[學習一個] Matlab GUI 學習筆記 Ⅰ
阿新 • • 發佈:2018-04-30
blank 技術分享 提問 string 自學 水平 crop AD pin
Matlab GUI 學習筆記 Ⅰ
1. Foreword
- Matlab 是嚴格意義上的編程語言嗎?曾經有人告訴我他是通過 Matlab 學會了面對對象編程,我是不信的,但這依然不妨礙它在特殊領域的強大功能。因為選修了這1個學分的 Matlab GUI 設計,亦有人表達了對Previous Matlab Blog的一些情緒,便寫上一些 Matlab GUI 編程學習的心得。
- 標題雖為Matlab GUI 學習筆記 Ⅰ,亦可成為稱為圖像處理技術應用實踐 - 課程設計 1 指北。
- 本文所用環境為 Matlab R2018a 中文版。
2. Task
- 自學Matlab GUI編程,設計並實現一個圖像空間變換系統。
- 要求:
- 能對圖像進行平移、旋轉、縮放、剪切、投影、仿射、變換以及各種復合變換;
- 能將各種變換後結果保存為圖像文件;
- 各種變換可以采用按鈕或者菜單的方式進行;
- 變換時的用戶可以自行設置簡單的變換參數。
3. Function
3.1 Create
- 在命令行窗口中輸入
guide
選擇新建 GUI 標簽 Blank GUI(Default) - 中文版漢化的比較完整,左側工具條中所有選項對應的控件都有其中文名稱。
- 在面板上右擊 -> 檢查器 -> Name 即可修改窗體標題
- 主要用到AXES、BUTTON控件
3.2 File
萬事的起源。
實現效果 :
3.2.1 打開圖片
- uigetdir 選擇文件(夾)
imread()
讀入圖像Code:
[ReadImageFileName,ReadImagePathName,ReadImageFilterIndex] = uigetfile({'*.jpg;*.png;*.tif','ImageFile(*.jpg;*.png;*.tif)';... '*.jpg','JPEGImageFile(*.jpg)';'*.*','AllFile(*.*)'},'ReadImage',... 'MultiSelect','off',... 'C:\Users\Public\Pictures\Sample Pictures'); FirstImageFullPath = fullfile(ReadImagePathName,ReadImageFileName); InputImage=imread(FirstImageFullPath);
3.2.2 保存圖片
- uigetdir 選擇文件(夾)
imwrite()
保存文件Code:
[SaveImagePathName] = uigetdir('C:\Users\Public\Pictures\Sample Pictures','請選擇文件夾'); filepath=fullfile(SaveImagePathName,'result.jpg'); imwrite(ResultImage,filepath,'jpg');
3.2.3 顯示圖片
axes()
定位顯示axesimshow()
顯示圖片Code:
axes(findobj('tag', 'axes1')); InputImage=imread(FirstImageFullPath); imshow(InputImage);
3.3 Transition
實現效果 :
3.3.1 平移
imdilate()
函數實現圖像平移Code:
se=translate(strel(1),[100,100]); ResultImage=imdilate(InputImage,se);
3.3.2 用戶交互
inputdlg()
函數打開對話框與用戶交互- 根據獲得的返回值設置參數
- 後文函數中涉及到用戶交互部分略去
Code:
defaulta={'100'}; a=inputdlg('請輸入x軸參數','',1,defaulta);
3.4 rotate
- 實現效果:
- 使用
imrotata()
函數 - Code :
ResultImage = imrotate(InputImage,90);
3.5 Scale
- 實現效果:
- 使用
resize()
函數 - Code :
ResultImage=imresize(InputImage,1.5);
3.6 Clipping
個人認為最難的部分。
最終實現效果:
3.6.1 按鈕交互
get(hObject,‘String‘);
返回值為按鈕的標題set(hObject,‘String‘,‘ChangeToTitle‘);
改變按鈕的標題使用if語句嵌套判斷切換按鈕標題:
now = get(hObject,'String'); if now == '剪切' set(hObject,'String','確定'); else set(hObject,'String','剪切'); end
3.6.2 剪切圖像
- 使用
imrect()
創建圖像選區
e.g.imrect(句柄,選區大小); getPosition()
獲得位置imcrop()
剪輯圖像Code:
h=imrect(handles.axes1, [10 10 100 100]); pos=getPosition(h); ResultImage=imcrop(InputImage, pos);
3.6.3 其他功能
getAPI()
獲得函數句柄addNewPositionCallback()
添加監聽器makeConstrainToRectFcn()
監聽器事件api = iptgetapi(h); api.addNewPositionCallback(@(p) title(mat2str(p,3))); %標題顯示選區大小 fcn = makeConstrainToRectFcn('imrect',get(gca,'XLim'),get(gca,'YLim')); api.setPositionConstraintFcn(fcn); %防止選區超出axes範圍
3.7 Projection
實現效果:
3.7.1 提問框交互
questdlg(Title,Text,choice,...,DafaultChoice)
提問框函數- Code :
s = questdlg(‘請選擇投影方式‘,‘參數‘,‘垂直‘,‘水平‘,‘垂直水平‘,‘垂直‘);
3.7.2 投影
- 見書。
- 參考
3.8 Affine & Transformation & ... & Postscript
No longer.
[學習一個] Matlab GUI 學習筆記 Ⅰ