邱廣萍,蘇展圖,周鳳如
(華南農(nóng)業(yè)大學(xué)珠江學(xué)院,廣東 廣州 510900)
隨著計(jì)算機(jī)與信息技術(shù)的高速發(fā)展,數(shù)字圖像處理技術(shù)得到快速的發(fā)展,目前已成為計(jì)算機(jī)科學(xué)、醫(yī)學(xué)、生物學(xué)、工程學(xué)、信息科學(xué)等領(lǐng)域各學(xué)科之間學(xué)習(xí)和研究的對象。但是數(shù)字圖像處理這門學(xué)科需要編寫大量的代碼,才能顯示數(shù)字圖像處理的效果,例如圖像增強(qiáng),圖像復(fù)原等。隨著GUI(圖形用戶界面)的廣泛流行,構(gòu)想設(shè)計(jì)一個交互式界面,通過窗口、菜單方便地進(jìn)行操作,展示MATLAB平臺下的開發(fā)技術(shù)。一個好的界面不僅有利于用戶快速掌握程序的操作流程,有效地使用程序,也有利于開發(fā)者在科研實(shí)踐和工程實(shí)踐中的廣泛應(yīng)用,尤其是在圖形處理技術(shù)、人工智能技術(shù)等方面。本系統(tǒng)設(shè)計(jì)的GUI實(shí)現(xiàn)了對圖像處理實(shí)驗(yàn)的演示,主要功能有:圖像取反,灰度處理,直方圖均衡化和直方圖規(guī)定化,裁剪,基本鏡像和旋轉(zhuǎn),縮放,亮度、對比度調(diào)節(jié),幾種噪聲的添加與濾除,邊緣信息檢測等。
圖形用戶界面(Graphical User Interfaces, GUI)是MATLAB軟件中提供人機(jī)交互的工具和方法,包含窗口、光標(biāo)、按鍵、菜單、說明文字等對象構(gòu)成的一個用戶界面。如果讀者想向別人提供應(yīng)用程序,想進(jìn)行某種技術(shù)、方法、效果的演示,想制作一個可供反復(fù)使用且操作簡便的專用工具,那么MATLAB軟件中的GUI為程序開發(fā)者打開了一扇窗口,不但可以提供圖文并茂的交互界面,簡化程序編寫過程,并且提高開發(fā)者的工作效率。GUI主要由七部分組成:版面設(shè)計(jì)器、屬性編輯器、菜單編輯器、調(diào)整工具、對象瀏覽器、Tab順序編輯器、M文件編輯器。
實(shí)現(xiàn)一個GUI的過程包括兩個基本任務(wù):一個是GUI的組件布局,另一個是GUI組件變成。在MATLAB中,Guide(Graphical User Interface Development Environment,圖形用戶界面開發(fā)環(huán)境)是一個組件布局工具集,能夠生成用戶所需的組件資源并保存在一個FIG文件中;其次,Guide還可以生成一個包含 GUI初始化和發(fā)布控制代碼的 M文件,該文件為回調(diào)函數(shù)(用戶在圖形界面中激活某一控件時要執(zhí)行的函數(shù))提供了一個框架[1]。FIG文件,擴(kuò)展名為.Fig,它包含對GUI和GUI組件的完整描述;M文件,擴(kuò)展名為.M,它包含控制 GUI的代碼和組件的回調(diào)事件代碼。這兩個文件與GUI顯示和編程任務(wù)相對應(yīng)。在版面設(shè)計(jì)器中創(chuàng)建GUI時,內(nèi)容保存在FIG文件中;對GUI編程時,內(nèi)容保存在M文件中[2]。圖1是GUI程序運(yùn)行的主要流程圖。只有清楚圖形用戶界面的運(yùn)行流程,才能對整個程序編寫運(yùn)籌帷幄,有助于高效編寫程序代碼。
圖1 GUI程序運(yùn)行的主要流程圖
該系統(tǒng)是用于演示數(shù)字圖像處理課程中具體的處理效果,例如圖像增強(qiáng)、圖像變換及圖像還原等。它以窗口的形式提供給用戶一個可視化的操控平臺,從功能上主要分為兩個模塊,即用戶管理界面,效果參數(shù)設(shè)置界面。完成后的效果圖如圖2所示。
圖2 效果圖界面外觀
用戶管理界面包括“打開”、“保存”、“原圖”、“撤銷”、“退出”5個按鈕。
(1)打開文件的代碼主要用uigetfile()函數(shù),uigetfile()函數(shù)可以設(shè)置文件類型,設(shè)置文件路徑名,返回的文件名等。這部分主要通過[filename,pathname]=uigetfile({'*.jpg'; '*.bmp';'*tif';'*.*'},'openfile')選擇相應(yīng)路徑打開圖像;通過file=[pathname,filename]; x=imread(file);讀取選中的圖像;最后,通過imshow(x);在顯示區(qū)域上顯示圖像。
(2)保存文件的代碼主要用uiputfile()函數(shù),可以獲取保存數(shù)據(jù)名稱,并實(shí)現(xiàn)任意路徑保存。與打開文件類似,通過對話框的形式來保存圖像數(shù)據(jù)。本段程序主要通過使用[filename,pathname]=uiputfile({'*.jpg';'*bmp';'*.tif';'*.*'},'save','untitled.jpg');語句中的uiputfile函數(shù)選擇文件名和路徑,并用 i=getimage(gca);取出坐標(biāo)2變換后的圖像數(shù)據(jù)保存到變量i,最后用imwrite函數(shù),把數(shù)據(jù)i存到指定的目錄下。
(3)撤銷按鈕的代碼通過設(shè)置一個全局變量 T,通過T=getimage把上一次操作后的圖像信息賦予全局變量T。點(diǎn)擊“撤銷”鍵時,通過 imshow(T);將圖像返回到上一步操作后的狀態(tài)。達(dá)到撤銷的效果。
(4)原圖的代碼實(shí)現(xiàn)通過設(shè)置一個全局變量S,保存原始圖像路徑,在點(diǎn)擊“還原”鍵時,重新讀取該全局變量。并通過f=imshow(y);,將還原的圖像顯示,達(dá)到還原的效果。
(5)退出的代碼實(shí)現(xiàn)通過通過clc清屏,用close關(guān)閉窗口,用clear清除變量,實(shí)現(xiàn)退出功能[3]。
該模塊主要包括圖像灰度、直方圖處理,圖像幾何變換,添加噪聲及濾波和圖像形態(tài)學(xué)處理部分。主要實(shí)現(xiàn)圖像取反、灰度處理、直方圖均衡化和直方圖規(guī)定化、圖像裁剪、水平和垂直鏡像、圖像旋轉(zhuǎn)、縮放和亮度調(diào)節(jié)等功能。
(1)圖像取反,對圖像求反是將原圖灰度值翻轉(zhuǎn),例如對灰度圖像取反,則直觀效果就是使黑變白,使白變黑。主要程序是通過f=imcomplement(*.img)函數(shù)實(shí)現(xiàn)圖像取反。Imshow(f);顯示結(jié)果。
(2)灰度處理,彩色圖像轉(zhuǎn)化成為灰度圖像的過程稱為圖像灰度化處理。主要程序是通過 x=rgb2gray(*.img)函數(shù)實(shí)現(xiàn),語句中的 rgb2gray(*.img)函數(shù),將圖像轉(zhuǎn)化為灰度圖像,通過imshow(x)顯示結(jié)果,實(shí)現(xiàn)灰度圖像的轉(zhuǎn)化。
(3)直方圖均衡化,直方圖均衡化處理是把圖像對比度加大,增大圖像反差,使圖像許多細(xì)節(jié)變得清晰。直方圖均衡化是圖像增強(qiáng)中主要的一種方法。直方圖均衡化通過histeq(x)函數(shù)實(shí)現(xiàn),由于此函數(shù)只能對灰度圖像進(jìn)行直方圖均衡,因此應(yīng)先將圖像轉(zhuǎn)化為灰度圖像。
(4)圖像幾何變換包括鏡像、縮放、旋轉(zhuǎn)等效果。圖像鏡像包含水平鏡像和垂直鏡像。圖像縮放有三種方法:最近鄰插值算法,雙線性插值法和雙三次插值法。圖像縮放的函數(shù)是imresize( )。圖像旋轉(zhuǎn)采用imrotate( )函數(shù)對圖像進(jìn)行旋轉(zhuǎn)。
(5)添加噪聲,在數(shù)字圖像處理中,常用的噪聲類型有:椒鹽噪聲、高斯噪聲。椒鹽噪聲椒鹽噪聲是由圖像傳感器,傳輸信道,解碼處理等產(chǎn)生的黑白相間的亮暗點(diǎn)噪聲[4]。添加椒鹽噪聲通過f=imnoise(*.img,'salt & pepper',p1);實(shí)現(xiàn)。P1參數(shù)通過輸入對話框的形式得到。參數(shù)值取0至1范圍內(nèi)任意數(shù),輸入值越大,噪聲越明顯。高斯噪聲,高斯噪聲是指它的概率密度函數(shù)服從高斯分布(即正態(tài)分布)的一類噪聲[5]。添加高斯噪聲通過f=imnoise(*.img,'gaussian',p1,p2);實(shí)現(xiàn)。
(6)圖像濾波,圖像濾波主要包括中值濾波、均值濾波、逆諧濾波等,即在盡量保留圖像細(xì)節(jié)特征的條件下對目標(biāo)圖像的噪聲進(jìn)行抑制,是數(shù)字圖像處理中的重要操作。中值濾波,中值(median)濾波器用模板所覆蓋的區(qū)域中像素的中間值作為濾波結(jié)果,中值濾波的主要功能就是讓與周圍像素灰度值的差比較大的像素改取與周圍像素值接近的值,從而可以消除孤立的噪聲點(diǎn)。可見,中值濾波對消除脈沖噪聲有良好效果。中值濾波通過 k=medfilt2(*.img);實(shí)現(xiàn)。均值濾波,主要采用f=imfilter(*,fspecial(‘a(chǎn)verage’,p))函數(shù)實(shí)現(xiàn),p是采用的模版數(shù)。
(7)圖像形態(tài)學(xué)處理,包括圖像腐蝕、膨脹、銳化、退化、邊緣檢測等。邊緣檢測是圖形處理和計(jì)算機(jī)視覺中的基本問題,邊緣檢測的目的是標(biāo)識數(shù)字圖像中亮度變化明顯的點(diǎn)[6]。邊緣檢測通過f=edge(*.img,'canny');語句中的edge函數(shù)進(jìn)行邊緣檢測,此功能可對灰度圖像進(jìn)行處理,在處理前需將圖像轉(zhuǎn)化為灰度圖像“canny”是指邊緣檢測的類型。
本系統(tǒng)把數(shù)字圖像處理課程主要的實(shí)驗(yàn)內(nèi)容進(jìn)行了程序編寫,最終完成了人機(jī)交互界面GUI的設(shè)計(jì)。在使用方面,可以直接把該系統(tǒng)應(yīng)用于數(shù)字圖像處理課程的輔助性教學(xué)中,使得課程的講授和分析過程更直觀可視化,更易控制和更容易接受。
[1]陳垚光,毛濤濤,王玲.精通MATLAB GUI設(shè)計(jì)[M].北京:電子工業(yè)出版社,2013.
[2]技術(shù)蛀蟲[EB/OL].http://www.cnblogs.com/nktblog/archive/2012/05/08/2489601.html
[3]馬曉路,劉倩,胡開云,等.MATLAB圖像處理從入門到精通[M].北京:中國鐵道出版社,2013.
[4]蘇岫,趙冬至,黃鳳榮,等.基于高空間分辨率的紅樹林衛(wèi)星遙感監(jiān)測技術(shù)進(jìn)展[J].熱帶海洋學(xué)報,2011,(3).
[5]譚永杰,曹彥,王永亮 圖像噪聲類型識別研究[J].周口師范學(xué)院學(xué)報,2013,(5).
[6]盧萌,趙合計(jì).一種改進(jìn)的小波自適應(yīng)邊緣檢測算法[J].計(jì)算機(jī)應(yīng)用研究,2011,(1).