馬新明,趙曉莉,時(shí) 雷,錢 誠(chéng)
(1.河南農(nóng)業(yè)大學(xué)信息與管理科學(xué)學(xué)院,河南 鄭州 450002; 2.河南省糧食作物生理生態(tài)與遺傳改良省部共建國(guó)家重點(diǎn)實(shí)驗(yàn)室培育基地,河南 鄭州 450002)
數(shù)字圖像是人們對(duì)客觀景象、事物及人的思維、想象的一種描述和記錄,是人類用以表達(dá)和傳遞信息的一種重要手段.人對(duì)外界信息的感知大約有70%是通過(guò)視覺(jué)系統(tǒng),即以圖像的形式獲得的,且圖像具有信息量大、直觀等優(yōu)點(diǎn).隨著科學(xué)技術(shù)的不斷發(fā)展,圖像處理技術(shù)已受到許多學(xué)科的重視,被廣泛應(yīng)用于機(jī)器視覺(jué)、生物醫(yī)學(xué)、軍事、衛(wèi)星遙感、農(nóng)業(yè)生產(chǎn)等眾多領(lǐng)域.數(shù)字圖像技術(shù)具有快速、可靠、無(wú)損壞、信息量大等優(yōu)勢(shì),便于計(jì)算機(jī)處理和分析.目前國(guó)內(nèi)外有很多關(guān)于圖像處理的系統(tǒng)軟件,如張紅梅等[1]在Matlab環(huán)境下開(kāi)發(fā)的圖像處理系統(tǒng),具有圖像顯示、圖形繪制以及圖像的處理等功能;張秀榮等[2]采用Win32環(huán)境程序,設(shè)計(jì)了一個(gè)可視化圖像處理程序,實(shí)現(xiàn)了對(duì)圖像的基本處理;朱明等[3]采用DSP+FPGA線性流水陣列結(jié)構(gòu),并結(jié)合大規(guī)??删幊踢壿嬯嚵校瑢?shí)現(xiàn)了視頻圖像的采集和目標(biāo)提取的視頻數(shù)字圖像處理系統(tǒng);DAVID等[4]利用DSP并行處理方法,設(shè)計(jì)并開(kāi)發(fā)了一個(gè)低成本的可伸縮并行圖像處理系統(tǒng),實(shí)現(xiàn)了數(shù)據(jù)本地和共享內(nèi)存之間的傳遞.然而,由于各系統(tǒng)的應(yīng)用目的和側(cè)重點(diǎn)不同,其通用性存在一定的局限性,如系統(tǒng)界面交互性差,用戶無(wú)法自主選取算法及參數(shù)的設(shè)定;對(duì)圖像的像素、格式具有嚴(yán)格的要求;系統(tǒng)可擴(kuò)展性、可移植性較差,等等.因此,在實(shí)際應(yīng)用中,仍需根據(jù)客觀需求開(kāi)發(fā)適合某一領(lǐng)域的圖像處理系統(tǒng),不僅加大了工作量,也極大的浪費(fèi)了人力、物力、時(shí)間及資金等資源.本研究在Visual C++編譯環(huán)境下,采用MFC多文檔結(jié)構(gòu),借助OpenCV計(jì)算機(jī)視覺(jué)庫(kù)進(jìn)行混合編程,旨在開(kāi)發(fā)一個(gè)界面友好、方便用戶自主選擇圖像處理方法、可移植的圖像處理系統(tǒng),并以冬小麥白粉病為例,利用該系統(tǒng)處理病害圖像信息,進(jìn)而為快速診斷作物病害種類,為用戶提供輔助決策提供幫助,以降低病害對(duì)作物生產(chǎn)的影響.
1.1系統(tǒng)框架結(jié)構(gòu)
該系統(tǒng)由2大基本模塊組成:主控模塊和顯示模塊.主控模塊負(fù)責(zé)系統(tǒng)整體的功能實(shí)現(xiàn),接收用戶命令、進(jìn)行圖像的處理計(jì)算[5,6]等,是整個(gè)系統(tǒng)的核心;顯示模塊即用戶界面,負(fù)責(zé)用戶與系統(tǒng)的交互、顯示處理后的圖像等.系統(tǒng)采用多文檔結(jié)構(gòu),通過(guò)對(duì)話框操作實(shí)現(xiàn)用戶的交互處理,用戶在使用時(shí)不用考慮系統(tǒng)的內(nèi)部設(shè)計(jì)及圖像處理的原理,只需在用戶界面選擇所需要的菜單選項(xiàng),或確定某些算法的參數(shù),從而簡(jiǎn)化了系統(tǒng)操作的復(fù)雜性.
1.2系統(tǒng)功能
系統(tǒng)的基本功能包含文件的處理、圖像點(diǎn)的處理、鄰域處理、二值圖像處理、形態(tài)學(xué)處理等.
1.2.1 文件處理 文件的處理包括打開(kāi)、恢復(fù)圖像,關(guān)閉、保存當(dāng)前窗口及位圖,將處理后的圖像恢復(fù)為原始圖像等功能.該系統(tǒng)支持讀取多種格式的圖像,包括DIB位圖,JPEG,GIF,TIFF等.
1.2.2 點(diǎn)的處理 在對(duì)圖像點(diǎn)的處理過(guò)程中,有幾種常見(jiàn)的圖像幾何變換操作,如30°旋轉(zhuǎn)、180°旋轉(zhuǎn)、水平鏡像、垂直鏡像.此外,還可對(duì)圖像進(jìn)行灰階變換、圖像反相、圖像直方圖、直方圖均衡化等基礎(chǔ)的圖像增強(qiáng)操作.
1.2.3 領(lǐng)域處理 領(lǐng)域處理是對(duì)圖像空間域處理的總稱,包含鄰域平均法、Gauss濾波、中值濾波、Sobel算法、Laplace算法等,可對(duì)圖像進(jìn)行銳化和平滑處理,減小噪聲,增強(qiáng)圖像.
1.2.4 二值圖像處理 用戶選擇某一閾值T,或取自適應(yīng)閾值T,若像素灰度值小于T,則該像素值設(shè)為0,反之,像素值設(shè)為255,即將灰度圖像轉(zhuǎn)化為了2值(黑白)圖像.外接矩形、最小面積矩形、輪廓跟蹤、距離變換等實(shí)現(xiàn)了圖像的形態(tài)檢測(cè)、圖像分割等功能.
1.2.5 形態(tài)學(xué)處理 形態(tài)學(xué)處理的基本思想是用具有一定形態(tài)的結(jié)構(gòu)元素,來(lái)量度和提取圖像中的對(duì)應(yīng)形狀,達(dá)到對(duì)圖像分析和識(shí)別的目的.它主要包括4個(gè)基本運(yùn)算(腐蝕、膨脹、開(kāi)啟和閉合),其不同的組合可以實(shí)現(xiàn)濾除噪聲、目標(biāo)檢測(cè)、邊界提取、區(qū)域填充等功能.
1.2.6 彩色圖像處理 系統(tǒng)可以滿足對(duì)不同顏色效果處理的需求,獲取RGB,HSV,Lab顏色分量,同時(shí)還可以直接對(duì)彩色圖像進(jìn)行增強(qiáng)、邊緣檢測(cè)、分割等處理.
1.2.7 綜合圖像處理 系統(tǒng)可根據(jù)需要調(diào)整圖像的大小.此外,該系統(tǒng)也添加了一些結(jié)合特定理論的圖像處理方法,如分水嶺算法、金字塔圖像分割、形態(tài)學(xué)梯度等.
2.1面向?qū)ο蟮脑O(shè)計(jì)方法
面向?qū)ο蟮脑O(shè)計(jì)和開(kāi)發(fā)方法在軟件領(lǐng)域是比較成熟的技術(shù),其核心內(nèi)容是以對(duì)象為主要研究?jī)?nèi)容,對(duì)象間通過(guò)消息相互作用,具有封裝、繼承等特性.面向?qū)ο蟮姆椒ù蟠筇岣吡舜a的可重用性、可維護(hù)性和可擴(kuò)展性.本系統(tǒng)以Microsoft Visual C++6.0為編譯環(huán)境,采用MFC多文檔結(jié)構(gòu)設(shè)計(jì),以方便圖像的存放與處理.
2.2OpenCV計(jì)算機(jī)視覺(jué)庫(kù)
OpenCV是一個(gè)開(kāi)源的跨平臺(tái)計(jì)算機(jī)視覺(jué)庫(kù)[7,8],為圖像處理、模式識(shí)別、物體跟蹤、機(jī)器學(xué)習(xí)等提供了各種算法.OpenCV提供的高層函數(shù)可高效地解決計(jì)算機(jī)視覺(jué)中一些很復(fù)雜的問(wèn)題,若沒(méi)有高層函數(shù),它提供的基本函數(shù)也足夠?yàn)榇蠖鄶?shù)計(jì)算機(jī)視覺(jué)問(wèn)題創(chuàng)建一個(gè)完整的解決方案.
OpenCV主體分5個(gè)模塊,其中4個(gè)模塊如圖1所示.CV模塊包含基本的圖像處理函數(shù)和高級(jí)計(jì)算機(jī)視覺(jué)算法;MLL模塊是機(jī)器學(xué)習(xí)庫(kù),包含統(tǒng)計(jì)相關(guān)的分類和聚類工具;HighGUI模塊包含圖像和視頻的輸入/輸出函數(shù);CXCORE模塊包含了OpenCV的基本數(shù)據(jù)結(jié)構(gòu)和相關(guān)函數(shù).此外,CvAux模塊中存放一些即將被淘汰的和新出現(xiàn)的實(shí)驗(yàn)性的算法及函數(shù).
圖1 OpenCV模塊示意圖
圖像處理系統(tǒng)實(shí)現(xiàn)了對(duì)圖像信息的快速、無(wú)損壞性提取,為后期需要的輔助決策提供了支持.以河南農(nóng)業(yè)大學(xué)科教園區(qū)2013年采集的冬小麥白粉病葉片為例,對(duì)系統(tǒng)進(jìn)行檢測(cè).系統(tǒng)框架采用Microsoft Visual C++中的MFC多文檔結(jié)構(gòu),對(duì)圖像的存放和處理則采用OpenCV函數(shù),圖像的顯示采用位圖信息實(shí)現(xiàn).
3.1圖像顯示
為了提高該系統(tǒng)的普適性,采用設(shè)備無(wú)關(guān)位圖DIB實(shí)現(xiàn)MFC模式下圖像的顯示.OpenCV中的IplImage結(jié)構(gòu)與DIB像素具有相同的存儲(chǔ)結(jié)構(gòu)(如表1),因此,構(gòu)造一個(gè)DIB位圖信息就可以調(diào)用Windows API(應(yīng)用程序編程接口)中的StretchDIBits函數(shù),實(shí)現(xiàn)圖像的顯示.
表1 DIB位圖參數(shù)與IplImage結(jié)構(gòu)參數(shù)
StretchDIBits函數(shù)[9]將DIB矩形區(qū)域內(nèi)像素使用的顏色數(shù)據(jù)拷貝到指定的目標(biāo)矩形中,函數(shù)原型為:int StretchDIBits(HDC hdc,int XDest,int YDest,int nDestWidth,int nDestHeight,int XSrc,int Ysrc,int nSrcWidth,int nSrcHeight,CONST VOID*lpBits,CONST BITMAPINFO*lpBitsInfo,UINT iUsage,DWORD dwRop);若函數(shù)執(zhí)行成功,那么返回值是拷貝的掃描線數(shù)目,反之是GDI_ERROR.
3.2圖像輸入輸出
圖像獲取及圖像處理后結(jié)果的顯示可以采用OpenCV中的cvLoadImage、cvShowImage、cvSaveImage函數(shù)[7].函數(shù)cvLoadImage可以載入指定的圖像文件,并返回指向該文件的指針,函數(shù)原型為:IplImage*cvLoadImage ( const char*filename, int iscolor);函數(shù)cvShowImage是在指定的窗口顯示圖像,函數(shù)原型為:void cvShowImage( const char*name, const CvArr*image );cvSaveImage函數(shù)用來(lái)保存IplImage類型的指針變量,其原型為:int cvSaveImage( const char*filename, const CvArr*image );其中cvShowImage和cvSaveImage函數(shù)中的image變量均為IplImage指針變量.當(dāng)然,在圖像保存結(jié)束后,需要銷毀已創(chuàng)建的變量,以釋放其占用的內(nèi)存空間,而函數(shù)cvReleaseImage便可以起到這個(gè)作用,銷毀已定義的IplImage指針變量.
根據(jù)該圖像處理系統(tǒng)打開(kāi)的冬小麥白粉病圖像如圖2所示.
3.3圖像處理
圖像處理涉及多種處理算法,根據(jù)處理的目的不同,分為增強(qiáng)、平滑、邊緣檢測(cè)、分割等,這些操作同樣需要借助OpenCV函數(shù).在此僅以形態(tài)學(xué)梯度算法為例,顯示圖像分割后的效果,如圖3.
圖2 圖像處理系統(tǒng)展示
圖3 形態(tài)學(xué)梯度算法分割效果圖
void CVMFCView::OnErosion() //腐蝕
{
cvErode(workImg,workImg,0,1);
Invalidate();
}
void CVMFCView::OnDilation() //膨脹
{
cvDilate(workImg,workImg,0,1);
Invalidate();
}
void CVMFCView::OnGrads() //形態(tài)學(xué)梯度算法
{
IplImage*in;
IplImage*temp=NULL;
IplImage*out=NULL;
in=workImg;
temp=cvCreateImage(cvGetSize(in),
IPL_DEPTH_8U,workImg->nChannels);
out = cvCreateImage(cvGetSize(in),
IPL_DEPTH_8U,workImg->nChannels);
cvMorphologyEx(in,out,temp,0,CV_MOP_GRADIENT,1);
m_dibFlag=imageReplace(out,&workImg);
cvReleaseImage(&temp);
Invalidate();
}
本研究開(kāi)發(fā)的圖像處理系統(tǒng)是基于VC++和OpenCV進(jìn)行的設(shè)計(jì)與實(shí)現(xiàn),在此過(guò)程中主要針對(duì)冬小麥白粉病圖像進(jìn)行了探索研究,發(fā)現(xiàn)構(gòu)建的圖像處理系統(tǒng)不僅有效地提高了作物圖像處理的效率,而且為以后的圖像識(shí)別創(chuàng)造了前提條件,同時(shí)也為專家決策提供了支持.此外,對(duì)于該系統(tǒng)的普適性發(fā)現(xiàn),它不僅僅局限于作物圖像處理,也可以延伸到其他圖像類型,只要圖像格式屬于該系統(tǒng)可讀取范圍,就可以進(jìn)行處理.系統(tǒng)操作簡(jiǎn)單,界面友好,交互性強(qiáng),涵蓋了圖像處理的大量算法,可以滿足對(duì)圖像的基本處理要求,具有較強(qiáng)的可移植性與可擴(kuò)展性.
參考文獻(xiàn):
[1]張紅梅,張智高,華志強(qiáng).基于MATLAB的圖像處理系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)[J].內(nèi)蒙古民族大學(xué)學(xué)報(bào):自然科學(xué)版,2009, 24(2) :151-153.
[2]張秀榮,孟和達(dá)來(lái).數(shù)字圖像處理系統(tǒng)的開(kāi)發(fā)與研究[J].湖南師范大學(xué):自然科學(xué)學(xué)報(bào),2011, 34(6):35-39.
[3]朱 明,魯劍鋒.基于DSP+FPGA結(jié)構(gòu)圖像處理系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)[J].計(jì)算機(jī)測(cè)量與控制,2004, 12(9) :866-869.
[4]DAVID M H, SHIRISH P K, C ALLAN H. Low cost scaleable parallel image processing system [J]. Microprocessors and Microsystems, 2001, 25(3) :143-157.
[5]余松煜,周源華,張 瑞.數(shù)字圖像處理[M].上海:上海交通大學(xué)出版社,2007.
[6]章毓晉.圖像工程.上冊(cè)圖像處理 [M].北京:清華大學(xué)出版社,2006.
[7]BRADSKI G,KAEHLER A.學(xué)習(xí)OpenCV[M].于仕琪,劉瑞禎,譯.北京:清華大學(xué)出版社, 2009.
[8]陳勝勇,劉 盛.基于OpenCV的計(jì)算機(jī)視覺(jué)技術(shù)實(shí)現(xiàn)[M].北京:科學(xué)出版社,2008.
[9]陳小平.DraWDib函數(shù)組在圖形圖象處理方面的應(yīng)用[J].沈陽(yáng)化工學(xué)院學(xué)報(bào),2002, 16(1) :65-70.