摘要:本文主要介紹了MATLAB圖形界面設(shè)計的案例教學模式,以植物葉面積測量系統(tǒng)的設(shè)計為例,詳細介紹了如何利用MATLAB建立GUI界面,展現(xiàn)出MATLAB設(shè)計用戶界面巨大的簡潔性和方便性。
關(guān)鍵詞:MATLAB 圖形界面設(shè)計 GUI 案例式教學
MATLAB 是由美國Math Works公司發(fā)布的面向科學計算、可視化以及交互式程序設(shè)計的高科技計算環(huán)境。它將數(shù)值分析、矩陣計算、科學數(shù)據(jù)可視化以及非線性動態(tài)系統(tǒng)的建模和仿真等諸多強大的功能集成在一個易于使用的視窗環(huán)境中。
圖形用戶界面(Graphical User Interface,簡稱 GUI)是指采用圖形方式顯示的計算機操作環(huán)境用戶接口。與早期計算機使用的命令行界面相比,圖形界面對于用戶來說更為簡便易用。GUI的廣泛使用是當今計算機發(fā)展的重大成就之一,它極大的方便了非專業(yè)用戶的使用,用戶可通過窗口、菜單和按鍵的方式來方便地進行操作,使計算機產(chǎn)生某種動作或變化,如實現(xiàn)計算和繪圖等。
建立MATLAB GUI界面有兩種途徑,第一種是編寫腳本文件,第二種是在命令行里直接輸入GUIDE創(chuàng)建,新建并保存后,生成.fig和.m文件,在.fig界面中編輯好點擊按鈕、可編輯文本和靜態(tài)文本的位置、大小、顏色和字體。
本文以植物葉面積測量系統(tǒng)的設(shè)計為例,講解如何完成一個MATLAB GUI的設(shè)計。該植物葉面積測量系統(tǒng),利用數(shù)碼相機獲取植物葉面的數(shù)字圖像,以一枚直徑為19毫米的一角人民幣硬幣為參照物。通過圖像采集和圖像預(yù)處理等一系列操作后,獲取植物葉面的像素數(shù),根據(jù)植物頁面和硬幣總像素數(shù)的對比,利用公式,即可求出植物葉面積。
一、系統(tǒng)界面結(jié)構(gòu)設(shè)計。
本階段主要制定測量系統(tǒng)的界面結(jié)構(gòu)。首先根據(jù)課題確定該界面需要的元素的種類和個數(shù);其次確定界面的布局,可以使用GUIDE中內(nèi)嵌的工具調(diào)整圖形的尺寸和元件之間的距離;最后根據(jù)每個元素要完成的功能,設(shè)置各元素的各種屬性,如標簽tag、元件的顏色、顯示的文本等。該植物葉面積測量系統(tǒng)的界面共有5個按鈕和3個可編輯文本框,如圖1所示。
界面中有三個坐標軸,用來在GUI中顯示圖形或者圖像,設(shè)置圖像的屬性和外觀等方面。坐標軸通過axes函數(shù)創(chuàng)建,分別設(shè)置為axes1,axes2,axes3,可以通過tag來區(qū)分和選擇相對應(yīng)的axes坐標軸。
將此圖形保存后,會生成兩個文件,一個是FIG文件,該文件包含上述步驟創(chuàng)建的實際GUI界面,M文件包含了圖形和框架中對每個GUI元素的回調(diào)函數(shù)。
二、系統(tǒng)回調(diào)函數(shù)設(shè)計。
編輯好界面之后,編寫系統(tǒng)自動生成的M文件,編寫Callback回調(diào)函數(shù)。回調(diào)函數(shù)是對事件響應(yīng)所執(zhí)行的代碼,比如用戶單擊鼠標是一個事件,MATLAB程序必須對每一個事件進行響應(yīng),用點擊按鈕時,會觸發(fā)對應(yīng)的回調(diào)函數(shù),執(zhí)行相應(yīng)的操作。比如本系統(tǒng)界面有五個按鈕,點擊Calculate按鈕完成計算功能;點擊Clear按鈕,將所有的文本框的值都清零。其余三個按鈕,分別完成讀入圖像,圖像預(yù)處理和計算目標物體像素數(shù)的功能。
1、編寫Calculate按鈕的Callback回調(diào)函數(shù)。
戶點擊Calculate按鈕時,需要完成計算的功能,這個功能通過在回調(diào)函數(shù)實現(xiàn),用戶點擊Calculate按鈕,MATLAB執(zhí)行其回調(diào)函數(shù),完成計算功能。Callback回調(diào)函數(shù)有三個輸入?yún)?shù)hobject、eventdata和 handles,hobject是觸發(fā)回調(diào)的UI組件,eventdata是包含鼠標鍵盤操作的詳細信息的變量,handles是包含UI界面中所有對象的結(jié)構(gòu)體。guidata函數(shù)寫在一個模塊的末尾是用來保存handles和hoject的操作。
function calc_Callback(hobject,eventdata,handles)
specie_current = get(handles. speciepixel,’String’);
foliage_current = get(handles. foliage pixel,’String’);
area = 2.834*(str2double(foliage _current)/str2double(specie _current));
set (handles. foliage area,’ string’,area);
guidata(hobject,handles)
其中g(shù)et函數(shù)獲得句柄圖像對象的屬性,返回對象屬性的當前值。此程序是獲取調(diào)用字符串參照物像素數(shù)和葉片像素數(shù),再通過str2double函數(shù)將獲取到的兩個字符串轉(zhuǎn)換為雙精度值計算。根據(jù)計算公式,計算出的葉面積值通過set函數(shù)設(shè)置指定文本框顯示最終結(jié)果。
2、編寫第Clear按鈕的Callback回調(diào)函數(shù)。
編輯其回調(diào)函數(shù)set函數(shù)把三個變量置為0。set函數(shù)可以改變句柄圖像的屬性。點擊按鈕,所有文本框顯示為零,如圖2所示。
function cler_Callback(hobject,eventdata,handles)
set(handles. specie pixel,’ string’,0);
set(handles. foliage pixel,’ string’,0);
set(handles. foliage area,’ string’,0);
guidata(hobject,handles)
這里的CreateFcn函數(shù)是設(shè)置三個坐標軸屬性初始化,在程序運行初期執(zhí)行。set函數(shù)設(shè)置指定坐標軸屬性,此程序設(shè)置為隱藏GUI中的axes控件,使初始界面更加美觀簡潔。
function axes1_CreateFcn(hobject,eventdata,handles)
set(hobject,'xTick',[])
set(hobject,'ytick',[])
回調(diào)函數(shù)編寫完成后,系統(tǒng)界面設(shè)計完成,運行結(jié)果如圖2所示。
三、結(jié)論
本文以植物葉面積測量系統(tǒng)的設(shè)計為例,詳細介紹了如何利用MATLAB建立GUI界面,實踐證明,MATLAB GUI界面操作簡單,交互性強,采用案例式教學能夠激發(fā)學生的學習熱情,增強課堂的互動性,提高教學質(zhì)量。
參考文獻
[1]丁偉 精通MATLAB R2014b [M].清華大學出版社,2015,北京
[2]潘慧等 基于MATLAB圖形用戶界面的聽覺言語康復(fù)效果評估系統(tǒng)設(shè)計[J]. 聽力學及言語疾病雜志. 2019,27(06)
[3]王巧花等 基于MATLAB 的圖形用戶界面 (GUI) 設(shè)計[J].煤礦機械,2005,3: 60-62.
[4]方芬 基于MATLAB的植物葉面積測量[D] 南京大學金陵學院 2021
[5]熊莎莎等 信號與系統(tǒng)結(jié)合MATLAB案例式教學 [J]. 電腦知識與技術(shù). 2019,15(05)
作者簡介:張莉,1982年1月生,女,漢族,江蘇徐州人,碩士,講師,研究方向:電子通信。