研究生階段寫的一個小文章,內容膚淺,不過轉載請注明,謝謝!!
摘要:本文主要介紹了基於MATLAB的圖形用戶界面(GUI)來制作圖像處理軟件平台的具體過程和相關技巧,文章主要從幾個方面展開論述:第一,簡單介紹下GUI與GUIDE;第二,介紹以下GUIDE的模板及其操作方法;第三,詳細闡述一下圖像處理軟件平台的制作方法。本文的GUI例子所制作的圖像處理軟件可以實現的功能有:五種常用的邊緣檢測、灰度直方圖的顯示、灰度直方圖的均衡化、對比度自適應直方圖的均衡化、圖片的二值化以及彩色圖片的灰度化。文章基本介紹了以上的內容,關於軟件還有許多未能實現的功能有待於日后的逐步開發,從這個簡單的實例可以讓讀者從感性的方面充分了解MATLAB的圖形用戶界面的相關功能,同時為打算深入學習這一套MATLAB工具集的讀者做一個鋪墊。
關鍵詞:圖形用戶界面;圖像處理;邊緣檢測;MATLAB工具集
一、引言
圖形用於界面(Graphical User Interfaces,GUI)是提供人機交互的工具和方法。GUI是包含圖形對象(如窗口、圖標、菜單和文本)的用戶界面。以某種方式選擇或激活這些對象時,通常會引起動作或者發生變化。一個設計優秀的GUI能夠非常直觀的讓用戶知道如何操作MATLAB界面,並且了解設計者的開發意圖。MATLAB的GUI為開發者提供了一個不脫離MATLAB的開發環境,有助於MATLAB程序的GUI集成。這樣可以使開發者不必理會一大堆煩雜的代碼,簡化程序,但是同樣可以實現向決策者提供圖文並茂的界面,甚至達到多媒體的效果。可以說MATLAB提供了一個簡便的開發環境,可以讓開發者快速上手,提高了開發者的工作效率。
所謂的GUIDE就是圖形用戶界面開發環境(Graphical User Interface Development Environment),它向用戶提供了一系列的創建用戶圖形界面的工具。這些工具大大簡化了GUI設計和生成的過程。GUIDE可以完成的任務有如下兩點:1)輸出GUI。2)GUI編程。GUIDE實際上是一套MATLAB工具集,它主要由七部分組成:版面設計器、屬性編輯器、菜單編輯器、調整工具、對象瀏覽器、Tab順序編輯器、M文件編輯器。
二、GUIDE的操作界面及使用方法的介紹
1.啟動GUIDE 在命令窗口中直接鍵入guide,啟動GUIDE,或者直接點擊MATLAB上 按鈕,會出現如圖1所示的GUIDE Quick Start對話框。利用GUIDE模板創建GUI,或者打開已經存在的GUI,單擊OK按鈕,打開版面設計工具,如圖2所示。在通常狀況下組件面板並不顯示出組件的名稱,如果需要顯示組件名稱,則進行下面的操作:從File菜單中選擇Preferences選項,勾選Show names in component palette選項即可。
2.GUI文件的介紹 GUIDE把GUI設計的內容保存在兩個文件中,它們在第一次保存或運行時生成。一個是FIG文件,擴展名為.Fig,它包含對GUI和GUI組件的完整描述;另外一個是M文件,擴展名為.M,它包含控制GUI的代碼和組件的回調事件代碼。這兩個文件與GUI顯示和編程任務相對應。在版面設計器中創建GUI時,內容保存在FIG文件中;對GUI編程時,內容保存在M文件中。通常情況下在版面設計器工具欄上單擊 圖標可以打開M文件編輯器。圖3所示的編輯器顯示了GUI with Axes and Menu模板的M文件的內容。
3.GUIDE環境的設置 用戶可以自定義GUIDE設計環境。在File菜單下選擇Preferences,打開如圖4所示的設置對話框,可以進行相應的設置。
三、基於GUI的圖像處理軟件平台的設計過程
1.GUIDE版面設計器(即FIG文件)的設計 根據設計需要:首先拖拽兩個圖形窗口(Axes),一個作為待處理圖片區域,另一個作為已處理圖片區域;其次,拖拽六個電子按鈕(Radio Button),作為邊緣檢測操作按鈕以及一個Panel按鈕作為檢測按鈕的支撐面板;第三,拖拽三個按鈕(Push Button),作為灰度變化區域的按鈕;最后,拖拽五個按鈕(Push Button),作為選取/保存圖片及退出等操作按鈕。將上面的所有按鈕及圖形窗口合理的布局,達到美觀工整的效果,本文設計的GUIDE如圖5所示,然后運行一下GUI,系統會自動生成GUI文件。

圖5 圖像處理軟件的GUIDE版面
2.選取圖片按鈕的GUI設計 要想設計一個圖像處理的軟件,首先要考慮選取圖片,選取什么格式的圖片,這個是至關重要的,所以先介紹一下選取圖片按鈕的GUI設計方法。上面已經規划好了按鈕的位置,如果想在點擊選取圖片按鈕時,軟件給予響應,需要給按鈕輸入一定的程序代碼,設置代碼的方法如下:右鍵單擊選取圖片按鈕,選擇View Callbacks/ Callback,系統會自動帶設計者進入此按鈕的代碼輸入區域,在下面的空白處輸入如下代碼[1]:
global im %定義一個全局變量im
[filename,pathname]=...
uigetfile({'*.*';'*.bmp';'*.tif';'*.png'},'select picture'); %選擇圖片路徑
str=[pathname filename]; %合成路徑+文件名
im=imread(str); %讀取圖片
axes(handles.axes1); %使用第一個axes
imshow(im); %顯示圖片
寫完上述代碼后,保存M文件,然后運行GUI,現在就可以實現選擇圖片的功能了。當然有選取就要考慮存儲已處理好的圖片,這就引出了存儲圖片按鈕的GUI設計。
3.存儲圖片按鈕的GUI設計 同樣右鍵單擊存儲圖片按鈕,選擇View Callbacks/ Callback,進去M文件后在下面的空白處輸入如下代碼[2]:
global BW %定義處理后的圖片BW這個全局變量
[filename,pathname,filterindex]=...
uiputfile({'*.bmp';'*.tif';'*.png'},'save picture');存儲圖片路徑
if filterindex==0
return %如果取消操作,返回
else
str=[pathname filename]; %合成路徑+文件名
axes(handles.axes2); %使用第二個axes
imwrite(BW,str); %寫入圖片信息,即保存圖片
end
4.邊緣檢測按鈕組的GUI設計 本文設計的GUI主要包含了五種最常用的檢測算法(即roberts、sobel、prewitt、log、canny檢測),右鍵單擊Panel面板,選擇View Callbacks/ SelectionChangeFcn,進入M文件后在空白處輸入如下代碼[3]:
global im
global BW %定義全局變量
str=get(hObject,'string'); %拿到所選按鈕的名稱
axes(handles.axes2); %使用第二個axes
switch str %選擇語句
case'Initial' %點擊原圖按鈕
imshow(im); %顯示原圖
case'Roberts' %點擊Roberts邊緣檢測按鈕
BW=edge(im,'roberts');
imshow(BW);
case'Sobel' %點擊Sobel邊緣檢測按鈕
BW=edge(im,'sobel');
imshow(BW);
case'Prewitt' %點擊Prewitt邊緣檢測按鈕
BW=edge(im,'prewitt');
imshow(BW);
case'Log' %點擊Log邊緣檢測按鈕
BW=edge(im,'log');
imshow(BW);
case'Canny' %點擊Canny邊緣檢測按鈕
BW=edge(im,'canny');
imshow(BW);
end;
5.退出按鈕的GUI設計 同樣右鍵單擊退出按鈕,選擇View Callbacks/ Callback,進入M文件中,在空白處輸入如下代碼:
close(gcf) %關閉當前Figure窗口句柄
其他按鈕代碼的設置都與上面敘述的大同小異,相關圖像處理程序代碼請參考MATLAB7.0圖形圖像處理[4],在這里將不再累述。
四、圖像處理軟件的運行舉例
運行GUI,將生成圖像處理的軟件平台,它可以實現的功能有:五種常用的邊緣檢測、灰度直方圖的顯示、灰度直方圖的均衡化、對比度自適應直方圖的均衡化、圖片的二值化以及彩色圖片的灰度化。現在運行軟件並舉些相關圖像處理實例。
1.灰度圖片邊緣檢測的舉例 首先選擇一幅名字為lena256的灰度圖片,依次選擇五種檢測按鈕,比較各種邊緣檢測的處理效果,通過對比,發現Canny
算子對圖片的邊緣檢測效果比較好,其檢測效果如圖6所示,其它4種算子檢測后的效果如圖7所示。
2.灰度圖片的直方圖顯示舉例 選取名字為cameraman的灰度圖片,點擊直方圖的顯示按鈕,此灰度圖片的直方圖分布將顯示在第二個axes中,其處理結果如圖8所示。
3.彩色圖片的二值化和灰度化處理舉例 選取名字為Water lilies的彩色圖片,分別點擊二值化和灰度化按鈕並保存處理后的圖片,其處理后的圖片效果如圖9所示。
五、結束語
由於MATLAB強大的工程計算和仿真能力,使越來越多的用戶從原來的開發環境轉到MATLAB上來。現在絕大多數MATLAB開發者都是一些從事一定領域的研究者,他們使用其他的開發環境設計GUI不緊編程復雜、而且學習困難,往往需要花費大量時間在編程上。但是,MATLAB提供了一個簡便的開發環境,可以讓開發着快速上手,提高了開發者的工作效率。本文詳細向讀者介紹了MATLAB的GUI的制作方法,通過這個例子,可以清楚的了解GUIDE的設計方法及相關圖像處理代碼的編輯,使讀者從感性的角度認識GUIDE的功能及使用方法,可以說為初學者提供了一個學習平台,打下堅實的基礎
