王文成, 李 健, 王瑞蘭, 吳小進(jìn), 孫學(xué)巖
(濰坊學(xué)院 信息與控制工程學(xué)院, 山東 濰坊 261061)
“數(shù)字圖像處理”課程是學(xué)生學(xué)習(xí)機(jī)器視覺(jué)技術(shù)的基礎(chǔ)和電子信息工程、自動(dòng)化等專業(yè)的核心課程。該課程涉及內(nèi)容較多,不但要講授基本概念、基本原理和基本方法,還要培養(yǎng)學(xué)生的實(shí)踐能力[1-6]。傳統(tǒng)的先課堂理論、后實(shí)驗(yàn)實(shí)踐的授課方式將理論和實(shí)踐教學(xué)隔離,教學(xué)效果不夠好。因此,開發(fā)能夠在課堂教學(xué)過(guò)程中操作的數(shù)字圖像處理演示平臺(tái)就成為教學(xué)的需要[7-10]。
Matlab屬于美國(guó)MathWorks公司開發(fā)的數(shù)學(xué)軟件,快捷的編程方式深得科研工作者的喜愛(ài)。特別是Matlab中的GUI(graphical user interfaces)工具為人機(jī)交互界面的設(shè)計(jì)提供了方便,提高了軟件開發(fā)的效率。本文利用Matlab GUI和Image Processing Toolbox,基于模塊化的思想,構(gòu)建了數(shù)字圖像處理實(shí)驗(yàn)平臺(tái)。該平臺(tái)的設(shè)計(jì)充分考慮人機(jī)交互的友好性和可擴(kuò)展性,使學(xué)生能夠直觀感受圖像處理算法的效果,并可以對(duì)算法進(jìn)行修改和擴(kuò)展,提高了教學(xué)的靈活性和學(xué)生的創(chuàng)新能力[11-12]。
基于Matlab GUI的數(shù)字圖像處理仿真平臺(tái)集成了“數(shù)字圖像處理”課程理論教學(xué)和實(shí)驗(yàn)教學(xué)的6個(gè)主要模塊:圖像變換、圖像增強(qiáng)、圖像濾波、邊緣檢測(cè)、圖像分割和綜合案例。由于理論教學(xué)涵蓋的內(nèi)容較多,因此各模塊還分別拆分出了不同功能的子模塊,在平臺(tái)的主界面中點(diǎn)擊就可打開相應(yīng)子模塊界面。如果學(xué)生需要增減模塊或調(diào)整主界面的外觀,可以通過(guò)修改主界面的代碼來(lái)實(shí)現(xiàn)。該實(shí)驗(yàn)平臺(tái)的主要模塊如圖1所示。
圖1 GUI 實(shí)驗(yàn)平臺(tái)的主要模塊
Matlab提供了圖形化的用戶界面開發(fā)環(huán)境,可以高效進(jìn)行界面的設(shè)計(jì)。仿真平臺(tái)的搭建包含各個(gè)模塊界面設(shè)計(jì)和程序?qū)崿F(xiàn),最終通過(guò)GUI設(shè)計(jì)形成兩個(gè)文件:一個(gè)是擴(kuò)展名為“.fig”的文件,包含對(duì)GUI組件的描述;另一個(gè)是擴(kuò)展名為“.m”的文件,包含控制GUI組件的程序代碼。這兩個(gè)文件與界面的顯示和編程任務(wù)相對(duì)應(yīng)。圖2是GUI程序運(yùn)行的初始化流程。
圖2 GUI 程序運(yùn)行的初始化流程
根據(jù)實(shí)驗(yàn)教學(xué)的需要,該平臺(tái)可進(jìn)行主控界面與子控界面直接回調(diào)和切換。首先,需要規(guī)劃主界面和子界面的布局,通過(guò)在子界面中添加控件,實(shí)現(xiàn)演示內(nèi)容的參數(shù)修改和函數(shù)調(diào)用;然后,編寫界面回調(diào)函數(shù),實(shí)現(xiàn)主界面與子界面之間的切換。
該仿真平臺(tái)涉及數(shù)字圖像處理課程中6個(gè)模塊的教學(xué)內(nèi)容。學(xué)生登錄平臺(tái)后,只需要點(diǎn)擊主界面的相應(yīng)按鈕即可進(jìn)入子模塊界面進(jìn)行實(shí)驗(yàn)。如果需要增減測(cè)試模塊或調(diào)整主界面的外觀,可自行修改主界面的代碼來(lái)實(shí)現(xiàn)。打開子界面的程序代碼為:
open(′fig_name.fig′); %fig_name為窗口名;
h = guihandles;
該平臺(tái)中每個(gè)子界面都能為用戶提供一個(gè)可視化的操作窗口,用于參數(shù)的設(shè)置和圖形圖像的顯示。其中圖像的打開、保存及退出3個(gè)按鈕功能相同,其函數(shù)代碼如下:
(1) “打開”按鈕操作利用uigetfile()函數(shù)實(shí)現(xiàn),它可以實(shí)現(xiàn)設(shè)置文件類型和路徑名的功能。具體方法為:通過(guò)[filename,pathname] = uigetfile({′*.jpg′; ′*.bmp′;′*tif′;′*.*′},′openfile′)選擇相應(yīng)路徑打開圖像;通過(guò)file=[pathname,filename]; x=imread(file),讀取選中的圖像;最后,通過(guò) imshow()函數(shù)在顯示區(qū)域顯示圖像。
(2) “保存”按鈕操作利用uiputfile()函數(shù)實(shí)現(xiàn),它通過(guò)獲取數(shù)據(jù)名稱實(shí)現(xiàn)任意路徑保存。其中語(yǔ)句[filename,pathname]=uiputfile({′*.jpg′;′*bmp′;′*.tif′;′*.*′},′save′,′untitled.jpg′)用于選擇文件名和路徑;i=getimage(gca)取出坐標(biāo)變換后的圖像數(shù)據(jù)保存到變量i;最后用imwrite()函數(shù)把數(shù)據(jù)i存到指定的目錄下。
(3)“退出”按鈕用于退出演示平臺(tái),程序代碼包括:clc(清屏)、close all(關(guān)閉窗口)、clear all(清除變量)。
圖像變換實(shí)驗(yàn)用來(lái)描述圖像由一種狀態(tài)轉(zhuǎn)換為另一種狀態(tài)的過(guò)程,主要演示灰度變換、圖像求反、圖像旋轉(zhuǎn)、圖像縮放等基本操作。具體描述如下:
(1) 灰度變換是把RGB彩色圖像轉(zhuǎn)換為灰度圖像的過(guò)程,通過(guò)rgb2gray()函數(shù)實(shí)現(xiàn);
(2) 圖像取反是將圖像的灰度值求補(bǔ),即白色變黑色、黑色變白色的過(guò)程,通過(guò)imcomplement()函數(shù)實(shí)現(xiàn);
(3) 圖像旋轉(zhuǎn)是對(duì)圖像進(jìn)行幾何變換,可實(shí)現(xiàn)鏡像、翻轉(zhuǎn)、任意角度旋轉(zhuǎn)等效果,通過(guò)imrotate()函數(shù)實(shí)現(xiàn);
(4) 圖像縮放是改變圖像的大小,采用imrotate()函數(shù)實(shí)現(xiàn),縮放方法有最近鄰插值算法、雙線性插值法和雙三次插值法。
圖像變換仿真實(shí)驗(yàn)界面如圖3所示。
圖3 圖像變換界面
圖像增強(qiáng)實(shí)驗(yàn)可演示圖像灰度調(diào)整的結(jié)果(見(jiàn)圖4),包含線性變換、對(duì)數(shù)變換和直方圖均衡化操作。
(1) 線性變換。通過(guò)對(duì)像素值進(jìn)行比例調(diào)節(jié)或增減像素值實(shí)現(xiàn)灰度變化。假設(shè)y為輸出,x為輸入,k為系數(shù),b為截距,則實(shí)現(xiàn)方法為:y=kx+b。學(xué)生也可以使用imadjust()函數(shù)進(jìn)行編程。
(2) 對(duì)數(shù)變換。利用圖像的輸入輸出像素值呈對(duì)數(shù)關(guān)系進(jìn)行灰度調(diào)整,實(shí)現(xiàn)方法為:y=log(1+x)。
(3) 直方圖均衡化。通過(guò)調(diào)整圖像的灰度值分布曲線,增大圖像對(duì)比度、增強(qiáng)圖像細(xì)節(jié),采用histeq() 函數(shù)實(shí)現(xiàn)。對(duì)于彩色圖像的直方圖均衡化,需要將其分別在R、G、B空間均衡化后再進(jìn)行合成。
圖4 圖像增強(qiáng)界面
圖像濾波實(shí)驗(yàn)主要包括噪聲生成、均值濾波、中值濾波、和頻域?yàn)V波等操作。圖像濾波實(shí)驗(yàn)界面如圖5所示。具體描述如下:
(1) 噪聲生成。通過(guò)程序模擬噪聲在圖像中的存在狀態(tài),所用的函數(shù)為imnoise()。噪聲的類型分為高斯噪聲和椒鹽噪聲,參數(shù)通過(guò)拖動(dòng)滑動(dòng)塊的形式得到,值越大,噪聲越明顯。
(2) 平均濾波。屬于像素值線性濾波操作,采用imfilter()函數(shù)實(shí)現(xiàn),所采用的模板窗口通過(guò)單選按鈕選擇,共有3×3、5×5、7×7、11×11等4個(gè)選項(xiàng),可以使學(xué)生觀測(cè)濾波器窗口的尺寸變化對(duì)濾波效果的影響。
(3) 中值濾波。屬于非線性濾波方法,是將窗口區(qū)域中所有像素的中間值作為濾波的結(jié)果,主要作用是消除雜點(diǎn)噪聲。該功能利用medfilt2()函數(shù)即可實(shí)現(xiàn),平臺(tái)中同樣提供了4種不同大小窗口選項(xiàng)。
(4) 頻域?yàn)V波。通過(guò)將圖像變換到頻率域進(jìn)行去除噪聲的方法。實(shí)驗(yàn)中設(shè)置了高通濾波和低通濾波的選項(xiàng),所涉及的函數(shù)包括fft2()、fftshift()、hpfilter()、lpfilter()等。
圖5 圖像濾波界面
邊緣檢測(cè)實(shí)驗(yàn)可以實(shí)現(xiàn)利用不同的邊緣檢測(cè)算子實(shí)現(xiàn)對(duì)圖像邊緣的提取,所用的算子包括Robert算子、Sobel算子和Canny算子。此外,還可以利用Hough變換檢測(cè)直線。具體描述如下:
(1) 邊緣檢測(cè)。通過(guò)算子標(biāo)識(shí)數(shù)字圖像中亮度變化明顯的點(diǎn),主要通過(guò)edge()函數(shù)實(shí)現(xiàn)。此功能可對(duì)灰度圖像進(jìn)行處理,根據(jù)不同的算子,在函數(shù)調(diào)用中分別選擇′roberts′、′sobel′、′canny′實(shí)現(xiàn)不同算子的處理結(jié)果。
(2) Hough變換。主要利用了圖像空間和Hough參數(shù)空間的點(diǎn)-線對(duì)偶性,把圖像空間中的檢測(cè)問(wèn)題轉(zhuǎn)換到參數(shù)空間中解決。通過(guò)該程序調(diào)用可以實(shí)現(xiàn)圖像中直線的檢測(cè)。
圖像分割實(shí)驗(yàn)教學(xué)內(nèi)容是閾值分割和區(qū)域分割。具體描述如下:
(1) 閾值分割。用來(lái)培養(yǎng)學(xué)生如何設(shè)定閾值,將一幅灰度圖像的目標(biāo)和背景分離,以便計(jì)算各個(gè)目標(biāo)的數(shù)字特征,主要涉及的函數(shù)為im2bw()。該平臺(tái)實(shí)現(xiàn)了雙峰閾值和迭代閾值分割的方法,對(duì)于人工選擇法、最大類間差閾值選擇法等,可由學(xué)生自己嘗試添加。
(2) 區(qū)域分割。用來(lái)考查學(xué)生對(duì)區(qū)域生長(zhǎng)方法的理解。平臺(tái)中提供了regiongrowing()函數(shù)的例程供學(xué)生操作,并且提供了生長(zhǎng)點(diǎn)和生長(zhǎng)閾值參數(shù)設(shè)置的實(shí)驗(yàn)。
數(shù)字圖像處理實(shí)驗(yàn)平臺(tái)加載了人臉檢測(cè)和顆粒計(jì)數(shù)兩個(gè)現(xiàn)實(shí)生活中的案例(見(jiàn)圖6),目的是讓學(xué)生了解圖像處理技術(shù)在日常生活中的應(yīng)用,提高學(xué)習(xí)興趣。
(1) 人臉檢測(cè)。人臉檢測(cè)采用2種實(shí)現(xiàn)方法。對(duì)于彩色圖像,利用了人臉在YCbCr空間的分布特性,通過(guò)空間轉(zhuǎn)換和閾值分割得到人臉。對(duì)于灰度圖像的人臉檢測(cè),借助了Adaboost函數(shù)庫(kù),設(shè)計(jì)了分類器進(jìn)行人臉檢測(cè)。由于綜合案例比較復(fù)雜,實(shí)驗(yàn)平臺(tái)主要進(jìn)行演示實(shí)驗(yàn)。
(2) 顆粒計(jì)數(shù)。該實(shí)驗(yàn)用來(lái)鍛煉學(xué)生的Blob分析能力。通過(guò)對(duì)一幅顆粒圖像的閾值分割,統(tǒng)計(jì)顆粒的面積、個(gè)數(shù)、直徑等參數(shù)。所涉及的函數(shù)包括regionprops()、bwlabel()等。
圖6 綜合案例
基于Matlab GUI 的數(shù)字圖像處理實(shí)驗(yàn)平臺(tái)具有如下特點(diǎn):
(1) 界面友好,操作方便。該平臺(tái)提供了友好的人機(jī)交互界面,學(xué)生通過(guò)參數(shù)調(diào)節(jié)就可以觀察實(shí)驗(yàn)結(jié)果,減少了重復(fù)編程的時(shí)間。此外,該平臺(tái)可以對(duì)比不同算法的實(shí)驗(yàn)結(jié)果,能夠觀測(cè)參數(shù)變化對(duì)于實(shí)驗(yàn)結(jié)果的影響。
(2) 內(nèi)容豐富,可擴(kuò)展性強(qiáng)。該平臺(tái)中的實(shí)驗(yàn)?zāi)K涵蓋了數(shù)字圖像處理基礎(chǔ)的核心內(nèi)容,具有良好的可移植性和可擴(kuò)展性。師生在使用過(guò)程中也可以編寫或修改程序進(jìn)行完善,通過(guò)添加或刪除內(nèi)容優(yōu)化實(shí)驗(yàn)設(shè)計(jì)。
(3) 演示方便,可視化。教師在理論教學(xué)過(guò)程中,可以隨時(shí)通過(guò)多媒體設(shè)備演示圖像處理算法的運(yùn)行結(jié)果,有利于學(xué)生加深對(duì)原理和應(yīng)用場(chǎng)景的理解,提升教學(xué)效果。
基于Matlab GUI的實(shí)驗(yàn)平臺(tái)已應(yīng)用于本校數(shù)字圖像處理課程的輔助性教學(xué)中,使理論講授和公式的推導(dǎo)、分析變得直觀和可視化。該實(shí)驗(yàn)平臺(tái)用戶界面友好、交互性強(qiáng)、易于擴(kuò)展,有利于師生在使用過(guò)程中自行增刪特色模塊,優(yōu)化實(shí)驗(yàn)設(shè)計(jì),加深學(xué)生對(duì)數(shù)字圖像處理相關(guān)理論的理解,提升“數(shù)字圖像處理”課程的實(shí)踐教學(xué)效果。