蘭 紅, 田 進, 李淑芝, 劉立輝
(江西理工大學信息工程學院,江西 贛州341000)
隨著數(shù)字圖像技術(shù)的發(fā)展,現(xiàn)在已經(jīng)擁有很多成熟的算法[1],并且許多算法在Matlab中都已經(jīng)實現(xiàn)并形成了圖像處理工具箱[2-3].但這些實現(xiàn)了的算法在圖像處理工具箱中以圖像處理函數(shù)的形式存在,專業(yè)人士在使用時需要查找Matlab使用手冊,而非專業(yè)人士需要經(jīng)過專業(yè)的培訓才能學會使用.隨著成像設(shè)備的不斷升級和圖像處理在各個領(lǐng)域應(yīng)用的日益廣泛,人們對圖像處理技術(shù)的要求也越來越高,單一的算法已經(jīng)不能滿足圖像在航空航天、生物工程、醫(yī)藥圖像、軍事公安以及道路交通等領(lǐng)域的需求.為此擺在研究人員面前的課題不僅是要開展新算法的研究,還有如何對已有算法的集成和綜合利用[4-7].圖像處理一體化平臺設(shè)計主要考慮四個方面:首先,對圖像處理工具箱中常用的獨立算法進行集成,方便用戶在同一平臺內(nèi)使用;其次,設(shè)計不同算法對同一圖像的連續(xù)多次處理,提高平臺對圖像的處理能力;第三,由于每種算法有其適用領(lǐng)域和算法自身的局限性,因而構(gòu)建可視化交互式圖像處理平臺必不可少;第四,數(shù)字圖像處理技術(shù)不斷的發(fā)展,新的算法會不斷涌現(xiàn),提供可二次開發(fā)和集成的圖像處理平臺具有重要意義.
利用M atlab GUI實現(xiàn)圖像處理一體化平臺設(shè)計可以充分發(fā)揮M atlab在圖形可視化方面的特性[8].M atlab不僅擁有高性能數(shù)值計算能力,而且能夠開發(fā)出界面友好、使用方便的圖形界面,在系統(tǒng)仿真和圖像處理模型研究中具有廣泛的應(yīng)用[9-11].平臺設(shè)計中充分利用了M atlab的各種圖形對象如按鈕、文本框、菜單、圖軸等控件,通過鼠標拖入控件來創(chuàng)建控件對象,編寫相應(yīng)回調(diào)函數(shù)實現(xiàn)平臺的算法集成和交互可視化功能,為用戶有效利用多種方法進行圖像處理提供了便利.
圖像處理平臺設(shè)計的目的是能夠?qū)D像處理的各個獨立算法集成到一個平臺內(nèi),方便用戶選用多種方法對圖像進行處理.平臺基于M atlab GUI設(shè)計,實現(xiàn)圖像處理過程的交互和可視化,并為用戶二次開發(fā)提供平臺接口,提高圖像處理算法的綜合利用效率.
根據(jù)一體化的設(shè)計思想,平臺主要實現(xiàn)算法集成、交互可視化和提供二次開發(fā)接口等功能.其中算法集成分為已有算法集成和新算法集成.具體功能描述如下:
(1)已有算法集成是對M atlab圖像處理工具包中提供的算法進行集成,可以通過使用函數(shù)名加參數(shù)的方式直接調(diào)用.依據(jù)功能進行分類,將同類算法集成到同一菜單項內(nèi),如將傅里葉變換、小波變換、離散變換等算法歸類到圖像變換中,進行集成.
(2)新算法集成是指對自主開發(fā)的算法進行集成,如改進水平集算法[12]、交互式圖割算法[13]、細胞自動機分割算法[14]等均為自主開發(fā)的圖像分割算法,同已有算法集成方式類似,集成到平臺中,便于綜合運用和算法分析與對比.
(3)交互式可視化是指對圖像處理過程及結(jié)果的可視化顯示,并提供用戶交互區(qū).
(4)二次開發(fā)接口是指通過調(diào)用集成模板方式,為用戶提供一個將自己算法集成到平臺中的一個接口.
一個高性能的圖像處理平臺應(yīng)該為用戶提供方便快捷的操作.平臺設(shè)計中通過菜單和按鈕實現(xiàn)快捷操作,其中菜單項提供平臺的整體功能,快捷按鈕顯示具體的獨立功能.圖像處理平臺的布局設(shè)計如圖1所示.利用M atlab GUI提供的工具包和底層代碼,可以實現(xiàn)菜單功能區(qū)、快捷按鈕功能區(qū)、DEMO顯示區(qū)、可視化效果顯示區(qū)和用戶交互區(qū)的布局設(shè)計.
圖1 布局圖
菜單功能區(qū)用于顯示平臺的整體功能,如圖1中上面一行標記的各菜單項.平臺設(shè)計的菜單功能區(qū)包括文件操作、圖像增強、圖像變換、圖像恢復(fù)、圖像分割和幫助菜單等.菜單功能區(qū)的設(shè)計主要通過M atlab提供的菜單項組件來實現(xiàn),包括具體菜單項標題的設(shè)定和相應(yīng)的事件處理.
(1)設(shè)計菜單欄的整體布局,調(diào)用Menu editor編輯菜單項.方法如下:
%清空原有的菜單項
set(gcf,′menubar′,′none′);
%設(shè)置“文件”菜單項
file=uimenu(gcf,′Label′,′文件′);
%設(shè)置“圖像變換”菜單項
change=uimenu(gcf,′Label′,′圖像變換′);
%設(shè)置“help”菜單項 help=uimenu(gcf,′Label′,′help′).
(2)設(shè)計菜單項的屬性,提供快捷鍵操作.快捷鍵設(shè)置可以方便用戶使用鍵盤操作菜單,利用Menubar定義快捷鍵.平臺中定義ctrl+O代表文件菜單的快捷鍵,ctrl+Q代表圖像變換的快捷鍵,F(xiàn)1代表help幫助的快捷鍵,避免與其他常用快捷鍵的沖突.
(3)設(shè)計菜單項對應(yīng)的回調(diào)函數(shù),將菜單項和回調(diào)函數(shù)建立關(guān)聯(lián),關(guān)鍵步驟的設(shè)計代碼:
%創(chuàng)建文件菜單的子菜單‘打開’:open=uimenu(file,′Label′,′打開′);%創(chuàng)建’打開’子菜單的菜單項’加載圖像’,設(shè)置調(diào)用函數(shù)interface,設(shè)定其參數(shù)列表,如:
loading=uimenu (open,′Label′,′加 載 圖 像 ′,′callback′,
′interface(′′loadImage_Callback′′,gcbo,[],guidata(gcbo))′);%此處將菜單項‘加載圖像’和調(diào)用函數(shù)’loadimage_callback’進行關(guān)聯(lián),其中l(wèi)oadimage是自定義函數(shù)
%設(shè)置退出菜單項,直接調(diào)用系統(tǒng)函數(shù)exit,實現(xiàn)退出系統(tǒng)功能
exit=uimenu (file,′Label′,′退 出 ′,′Callback′,′exit′).
平臺設(shè)計的按鈕包括算法對應(yīng)的快捷按鈕和用戶交互按鈕,分別設(shè)置在圖1中的“快捷按鈕功能區(qū)”和“用戶交互區(qū)”中.算法對應(yīng)的快捷按鈕方便用戶直接選擇各種圖像處理算法;用戶交互按鈕則便于用戶對圖像處理過程或結(jié)果進行干預(yù)與操作,從而使圖像處理結(jié)果更好的滿足用戶需求.
按鈕設(shè)計通過M atlab按鈕組件來實現(xiàn),具體設(shè)置包括三步:
首先,利用菜單欄工具Align objects設(shè)計按鈕布局,包括按鈕的大小、樣式設(shè)計和按鈕間的間隔等.設(shè)計中考慮了動態(tài)添加的效果,即添加新算法時,如果選擇添加快捷按鈕,按鈕功能區(qū)會自動尋找最后一個按鈕所在的位置,按順序添加,當一行顯示不下時可自動實現(xiàn)換行.
其次,設(shè)計按鈕的屬性和特效.平臺中“快捷按鈕功能區(qū)”的按鈕實現(xiàn)了背景圖片添加和懸浮特效,懸浮的設(shè)計主要用于提示按鈕的功能,當鼠標停留在按鈕上時,懸浮的文字顯示按鈕所對應(yīng)的算法.對按鈕設(shè)置背景圖片,需首先讀取圖片信息:
a1=imread(′2.jpg′);%將圖像 2.jpg 的信息用變量a1存儲.
然后將圖片信息設(shè)置到按鈕上:set(handles.pushbutton3,′CData′,a1);%設(shè)置按鈕 pushbutton3 的背景為a1圖像.
再利用tooltipstring設(shè)置按鈕文字的懸浮效果:set (handles.pushbutton3,′tooltipstring′,′線性平滑濾波’);%設(shè)置按鈕pushbutton3上的文字 ‘線性平滑濾波’為懸浮效果.
第三,設(shè)計按鈕對應(yīng)的回調(diào)函數(shù),實現(xiàn)按鈕事件的響應(yīng).
set(handles.pushbutton3,callback′,
′interface (′′pushbutton3_fft_Callback′′,gcbo,[],guidata(gcbo))′);%此處將按鈕‘pushbutton3 和調(diào)用函數(shù) ′pushbutton3_fft_callback′建立關(guān)聯(lián),其中fft指傅里葉變換算法.
平臺設(shè)計將M atlab圖像處理算法中的多個Figure顯示融為一體,便于用戶更好的使用.平臺設(shè)計了DEMO演示區(qū)和可視化顯示區(qū),如圖1中標示的兩個主要矩形區(qū)域.用戶在圖像處理過程中,所選擇的初始圖像和圖像處理的中間過程及結(jié)果都可以在DEMO演示區(qū)和可視化顯示區(qū)中顯示.兩個顯示區(qū)采用分裂窗體設(shè)計,利用坐標軸控制效果顯示區(qū)的大小和范圍.
菜單功能項和快捷按鈕功能區(qū)提供用戶選擇的圖像處理算法,平臺中已集成的算法樣例可以通過按鈕或菜單項選擇在DEMO區(qū)進行演示;可視化效果展示區(qū)由坐標軸定義,每個子區(qū)域都對應(yīng)不同的坐標軸.處理過程和結(jié)果在指定坐標軸中顯示,通過用戶交互區(qū)的操作按鈕可實現(xiàn)圖像的交互式處理.
算法集成是平臺的核心,包括對已有算法的集成和二次開發(fā)接口的設(shè)計,利用M atlab底層代碼開發(fā)技術(shù)實現(xiàn).過程可視化和用戶交互設(shè)計是平臺提供的另一主要功能,允許用戶對待處理圖像進行初始輪廓設(shè)置和中間過程的干預(yù),直至達到滿意效果.
平臺首先對M atlab圖像處理工具箱中的已有算法進行集成.為了使平臺設(shè)計的系統(tǒng)程序具有良好的可讀性和移植性,首先對已有的圖像處理算法進行了歸類.歸類的依據(jù)是根據(jù)圖像處理的算法性質(zhì),如圖像變換、圖像增強、圖像恢復(fù)等進行分類,每一類對應(yīng)一個菜單項,每一類的具體算法對應(yīng)一個菜單子項.已有算法集成和歸類的主要設(shè)計思想包括三步:
Step1,歸類算法函數(shù)定義.將算法進行歸類,同一類算法建立一個類文件.平臺設(shè)計中將傅里葉變換、小波變換、離散變換等算法歸類為“圖像變換”,命名該類名為image_transformation,對應(yīng)菜單項中的“圖像變換”和三個快捷按鈕組件.M atlab自動生成包含按鈕組件的image_transformation()函數(shù)及其初始化結(jié)構(gòu)代碼.
Step2,菜單按鈕事件集成.image_transformation()函數(shù)中,組件標識和事件處理分別用Tag和callback屬性來定義,每個組件對應(yīng)自己的callback函數(shù).如設(shè)傅里葉變換的按鈕為pushbutton3_fft,其對應(yīng)的callback函數(shù)結(jié)構(gòu)為 function varargout= pushbutton3_fft_callback(hObject,eventdata,handles),該函數(shù)為一個接口程序,將要集成的算法填寫在該函數(shù)下,即可實現(xiàn)算法集成.傅里葉變換算法fftshift集成的格式如下:
Function varargout =image_transformation(varargin)%定義圖像變換菜單項
Gui_callback=varargin(1) ;%GUI_callback 處理變換函數(shù)的調(diào)用
Function varargout=pushbutton3_fft_callback()%傅里葉變換的callback函數(shù)
M=fftshift(fft2(image)) ;%對圖像進行傅里葉變換
Axes(handles.axesl);%設(shè)置顯示區(qū)域的坐標軸Imshow(M);//顯示傅里葉變換結(jié)果.
Step3,圖像顯示設(shè)置.要使集成算法處理的圖像在“DEMO區(qū)”或“可視化效果顯示區(qū)”中顯示,需要調(diào)用坐標軸函數(shù)Axes()指定具體的坐標軸.平臺設(shè)計中將fft算法的圖像處理結(jié)果顯示在坐標軸1中,則Axes的參數(shù)是handles.axes1.
利用以上集成方法,將M atlab圖像處理工具包中的常用算法集成到了平臺中.
平臺的顯示區(qū)包括DEMO演示區(qū)、可視化顯示區(qū)和用戶交互區(qū).其中圖像選擇和圖像處理過程及結(jié)果分別在DEMO演示區(qū)和可視化顯示區(qū)顯示,兩個顯示區(qū)采用分裂窗體設(shè)計,利用坐標軸控制效果顯示區(qū)的大小和范圍;用戶交互區(qū)用于用戶對圖像處理的過程或結(jié)果進行干預(yù),使圖像處理的結(jié)果更加精確.
(1)DEMO演示區(qū)將圖像處理過程做成矩陣,通過矩陣變換,以動態(tài)切換的形式將其在DEMO演示區(qū)的坐標軸中顯示出來.用于演示圖像處理平臺的算法運行效果,動態(tài)切換使用movie(參數(shù):矩陣)函數(shù)實現(xiàn)播放.
(2)可視化顯示區(qū)將坐標軸作為處理用戶交互和圖像處理結(jié)果顯示的工作平臺.記錄圖像處理過的過程和結(jié)果,即將坐標軸中變化的過程存儲在一個矩陣中.在處理結(jié)束后能夠通過矩陣的變化,將處理過程再次顯示出來,實現(xiàn)平臺交互式可視化的特點.在M atlab GUI設(shè)計平臺中使用moviein()函數(shù)和 getframe()函數(shù).getframe()函數(shù)獲取坐標軸內(nèi)的變化,moviein()函數(shù)記錄變化,并將變化保存在矩陣中.
(3)用戶交互區(qū)將用戶操作按鈕歸類,將一個完整的操作分為若干個子操作,使用戶看到具體的處理步驟,而不是直接給出處理的結(jié)果.通過設(shè)計交互按鈕,將按鈕與具體的子操作關(guān)聯(lián),實現(xiàn)圖像處理過程的交互.
平臺設(shè)計二次開發(fā)接口的目的是為了便于用戶將自己設(shè)計的新算法或在平臺上進行二次開發(fā)提供便利.二次開發(fā)接口設(shè)計的流程如圖2所示.
(1)模板參數(shù)定義.復(fù)制新算法到模板中,將算法修改為函數(shù)的形式.按照模板提供的形式,填寫函數(shù)名和函數(shù)參數(shù)列表.
(2)模板內(nèi)容設(shè)計.模板為一個定義好格式的M atlab文件,新算法集成到平臺時只需要對相應(yīng)參數(shù)進行改變.
(3)模板調(diào)用.生成模板的函數(shù)由按鈕事件調(diào)用觸發(fā).
(4)填寫算法名.將算法的名字填寫在集成文本框中,點擊集成按鈕,系統(tǒng)判斷此算法名是否存在.
(5)算法主函數(shù)設(shè)計.主函數(shù)中圖像顯示函數(shù)需要做部分修改.集成時圖像需要在平臺上顯示和處理,因而需要在圖像顯示部分將代碼修改為顯示在平臺的坐標軸上.
(6)算法輔助函數(shù)設(shè)計.輔助函數(shù)是指主函數(shù)在執(zhí)行過程中所調(diào)用的函數(shù).新算法集成中需要將輔助函數(shù)復(fù)制到與主函數(shù)相同的目錄下,以便主函數(shù)調(diào)用輔助函數(shù).
圖2 二次開發(fā)接口設(shè)計的流程圖
(7)主函數(shù)與按鈕關(guān)聯(lián)設(shè)計.將新算法的主函數(shù)與對應(yīng)的按鈕建立關(guān)聯(lián).方法是在按鈕的callback屬性設(shè)置為函數(shù)的名,同時添加需要用到的函數(shù)列表.
根據(jù)平臺的布局設(shè)計和接口及算法設(shè)計,在Windows XP操作系統(tǒng)下采用M atlab2009編碼實現(xiàn)圖像處理一體化平臺的功能,具體實現(xiàn)如下.
基于M atlab GUI的圖像處理平臺運行主界面如圖3所示.菜單項涵蓋平臺中圖像處理的各項功能.其下一排彩色圖標為快捷按鈕,右側(cè)藍色框標示的縱向按鈕為用戶交互按鈕區(qū),其中的紅色框標示的為集成按鈕區(qū).圖中顯示了均衡化圖像處理算法和gcbac圖像分割算法的運行效果.
圖3 運行界面圖
圖像處理平臺中用戶交互區(qū)通過使用圖3中右側(cè)的藍色框區(qū)域表示的交互按鈕實現(xiàn).圖4顯示了采用動態(tài)邊緣檢測算法對圖像初始化處理實行的用戶交互效果.交互過程利用鼠標左鍵,將要分割的目標區(qū)域進行初始標記,如圖4(a)中用紅色標出的多邊形;圖4(b)顯示的是圖像處理的中間過程,其中用戶也可以參與交互,在每次處理結(jié)束時,用戶通過鼠標左擊再次確定位置邊界,平臺算法會進行二次迭代分割,直至達到滿意效果,此時通過鼠標右擊,停止交互,得到最佳的圖像分割效果,如圖 4(c)所示.
用戶交互可以彌補算法迭代過程中的不足,提高圖像分割的精確度.平臺提供的交互式功能充分體現(xiàn)了圖像處理過程中交互式可視化的優(yōu)點.
二次開發(fā)接口設(shè)計主要用以實現(xiàn)用戶新算法的集成,點擊圖3中的紅框區(qū)域集成說明按鈕,彈出如圖5所示的新算法集成模板,首先在文件框中命名新算法的文件名,然后將開發(fā)的新算法按模板要求新建并保存,從而實現(xiàn)二次開發(fā)算法的集成.
圖4 交互式過程及其效果對比圖
二次開發(fā)算法集成模板為一個定義好格式的M atlab文件,新算法集成到平臺時只需要對相應(yīng)參數(shù)進行改變.在新算法集成過程中,用戶可直接使用模板內(nèi)的集成代碼,將模板代碼復(fù)制到編輯文本中,按說明進行參數(shù)修改,最終生成算法的集成和顯示.
圖5 二次開發(fā)模板設(shè)計
利用M atlab GUI特性,開發(fā)設(shè)計了圖像處理算法一體化平臺,實現(xiàn)了圖像處理算法的集成化、可視化、交互式和二次開發(fā)等功能.平臺設(shè)計中充分利用了M atlab GUI組件及底層開發(fā)特性,較好的展示了圖像處理的一體化功能.目前平臺上已集成了M atlab圖像處理工具包中的部分圖像處理算法和自行開發(fā)的圖像分割等算法,結(jié)果表明一體化的圖像處理平臺能夠幫助用戶方便快捷的實現(xiàn)對圖像處理的各種操作,尤其在圖像特征提取、用戶交互和二次開發(fā)集成等方面為用戶提供便利.
[1]Rafael C,Gonzalez,Richard E.Woods數(shù)字圖像處理[M].3 版.北京:電子工業(yè)出版社,2011.
[2]Rafael C.Gonzalez,Richard E.Woods數(shù)字圖像處理(M atlab 版)[M].北京:電子工業(yè)出版社,2011.
[3]趙書蘭.M atlab R2008數(shù)字圖像處理與分析實例教程[M].北京:化學工業(yè)出版社,2009.
[4]楊 娟,郭海湘,楊文霞,等.基于 M atlab的 GUI設(shè)計車輛路徑問題的仿真優(yōu)化平臺[J].系統(tǒng)仿真學報,2012,24(3):722-727.
[5]郭依正,焦蓬蓬.M atlab GUI在低質(zhì)量指紋圖像增強中的應(yīng)用[J].計算機技術(shù)與發(fā)展,2013,23(7):230-232.
[6]伊力哈木 亞爾買買提,哈力旦A.基于M atlab GUI的維吾爾文字符識別系統(tǒng)的設(shè)計[J].計算機技術(shù),2010,20(1):30-34
[7]史孝文,楊曉京,傅中裕.基于 M atlab的 GUI設(shè)計伺服驅(qū)動系統(tǒng)仿真軟件[J].機械工程與自動化,2005(2):17-19.
[8]孫 祥,黃曉鳴.基于 M atlab的集成化圖像處理系統(tǒng)[J].科學技術(shù)與工程,2007,7(20):5386-5388.
[9]張 錚,王艷平,薛桂香.數(shù)字圖像處理與機器視覺—Visual C++與M atlab實現(xiàn)[M].北京:人民郵電出版社,2010.
[10]劉海波,沈 晶,郭 聳.Visual C++數(shù)字圖像處理技術(shù)詳解[M].北京:機械工業(yè)出版社,2010.
[11]左 飛,萬晉森,劉 航.數(shù)字圖像處理原理與實踐:基于Visual C++開發(fā)[M].北京:電子工業(yè)出版社,2011.
[12]蘭 紅,陳 凌,張 璐.一種基于閾值初始化的變分水平集牙菌斑圖像分割方法[J].江西理工大學學報,2011,32(3):11-14.
[13]蘭 紅,柳顯濤.基于圖割優(yōu)化的能量最小化模型圖像分割方法[J].計算機應(yīng)用研究,2012,29(11):4381-4384.
[14]蘭 紅.多閾值優(yōu)化的交互式醫(yī)學圖像分割方法[J].計算機科學,2013,40(9):296-299.