趙建敏, 薛曉波, 李 琦
(內(nèi)蒙古科技大學(xué)信息工程學(xué)院,內(nèi)蒙古包頭 014010)
基于機(jī)器視覺的馬鈴薯病害識別系統(tǒng)
趙建敏, 薛曉波, 李 琦
(內(nèi)蒙古科技大學(xué)信息工程學(xué)院,內(nèi)蒙古包頭 014010)
設(shè)計出一種基于機(jī)器視覺的馬鈴薯病害識別系統(tǒng),該系統(tǒng)主要包括病害識別部分、服務(wù)器端、客戶端。識別部分采集病害葉片圖像,并進(jìn)行小波去噪。利用OTSU閾值算法分割圖像,提取病害的顏色、形狀、紋理特征并利用SVM分類器進(jìn)行識別?;赩S 2010搭建服務(wù)器端,提供包含REST API的Web Service與客戶端進(jìn)行信息交互?;贏ndroid SDK設(shè)計病害識別系統(tǒng)的手機(jī)客戶端,通過3G或無線網(wǎng)絡(luò)對服務(wù)器端進(jìn)行訪問。通過實地測試,能準(zhǔn)確識別出馬鈴薯的幾種主要病害,且識別率大于92%。
機(jī)器視覺;特征提?。环诸惼?;REST API;Android SDK;馬鈴薯病害
基于機(jī)器視覺的圖像識別系統(tǒng),一般采用CCD或CMOS攝相機(jī)攝取檢測圖像并轉(zhuǎn)化為數(shù)字信號,再采用先進(jìn)的計算機(jī)硬件與軟件技術(shù)對數(shù)字圖像信號進(jìn)行處理,從而得到所需的各種目標(biāo)圖像特征值,并由此實現(xiàn)識別或缺陷檢測等多種功能。
近年來大量學(xué)者做了相關(guān)研究,陳佳娟等通過對棉花葉片上的空洞及邊緣的殘缺處理來測定棉花蟲害的受害程度[1];邱道尹等研究出一套關(guān)于大田中農(nóng)作物害蟲實時檢測的系統(tǒng)[2]。機(jī)器視覺技術(shù)多集中用于工業(yè)領(lǐng)域[3],農(nóng)業(yè)方面處于嘗試探索階段。
2015年5—6月,在大田開放環(huán)境下采集馬鈴薯健康、早疫病、晚疫病、炭疽病、灰霉病等病害圖像樣本,4種病害癥狀見圖1。
本研究基于VS 2010搭建病害識別系統(tǒng),主要功能是對病斑進(jìn)行分割、特征提取,然后采用支持向量機(jī)的分類器進(jìn)行識別。用WCF REST Service構(gòu)建服務(wù)器端,提供REST風(fēng)格的服務(wù)與客戶端實現(xiàn)數(shù)據(jù)共享,客戶端采用美國谷歌(Google)公司推出的手機(jī)開發(fā)平臺Android SDK[4]等來實現(xiàn)。另外,增加了檔案管理系統(tǒng),記錄馬鈴薯病害的檔案和信息,系統(tǒng)結(jié)構(gòu)見圖2。
軟件結(jié)構(gòu)主要分為驅(qū)動層和應(yīng)用層,軟件架構(gòu)見圖3。
驅(qū)動層包括客戶端的Android SDK、JDK、Eclipse,Mysql數(shù)據(jù)庫,以及OpenCV。應(yīng)用層包括基于VS 2010的病害識別各部分,構(gòu)建的WCF REST Service以及病害信息管理等。
病害識別部分是本研究的核心部分。通過設(shè)計算法程序?qū)崿F(xiàn)病斑分割的各環(huán)節(jié),并且搭建病害識別系統(tǒng),具體過程見圖4。
2.1 預(yù)處理
采集到的圖像存在的缺點主要是噪聲干擾。與Fourier變換相比,小波變換是空間(時間)和頻率的局部變換,因而能有效地從信號中提取信息。
在VS 2010中調(diào)用Opencv函數(shù)DWT()和IDWT(),前者完成任意層次的小波變換,后者完成任意層次的小波逆變換,變換后的結(jié)果直接保存在輸入圖像中。小波變換將圖像分解成高頻部分和低頻部分,濾除圖像中的低頻成分,再通過小波逆變換還原圖像,病害部位的圖像得到增強(qiáng),同時也消除了圖像中低頻背景的干擾。
void DWT(IplImage*pImage,int nLayer);
void IDWT(IplImage*pImage,int nLayer)。
2.2 圖像局部顯示及分割
通過目標(biāo)與背景的二值化圖像與原圖作乘法運算得到良好的局部圖像。圖像局部顯示的關(guān)鍵是獲得良好的二值化圖像,本研究采用OTSU閾值分割算法來獲得。
OTSU分割法,即大津法,又叫最大類間方差法,是一種自適應(yīng)的閾值確定方法。按圖像的灰度特性,將圖像分成2個部分,稱之為部分0和部分1(即通常意義的背景與目標(biāo))。其主要的實現(xiàn)原理如下:
(1)建立圖像灰度直方圖(共有L個灰度級,每個出現(xiàn)概率為p);
(1)
(2)計算背景和目標(biāo)的出現(xiàn)概率,計算方法如下:
(2)
式中:假設(shè)t為所選定的閾值,A代表背景(灰度級為0~N),B為目標(biāo)。
(3)計算A和B2個區(qū)域的類間方差如下:
σ2=PA(ωA-ω0)2+PB(ωB-ω0)2。
(3)
式中:第1個表達(dá)式分別計算A和B區(qū)域的平均灰度值;第2個表達(dá)式計算灰度圖像全局的灰度平均值;第3個表達(dá)式計算A、B2個區(qū)域的類間方差。
利用上述算法得到二值化圖像(圖5)。
圖像的乘法操作是點對點的像素點進(jìn)行操作。如果記輸入圖像為A(x,y)和B(x,y),輸出圖像為C(x,y),則有:
C(x,y)=A(x,y)×B(x,y)。
(4)
利用二值化圖像與原圖作乘法運算得到良好的局部圖像(圖6)。
2.3 分類特征提取
馬鈴薯病態(tài)葉片在顏色和紋理上與正常葉片有較大的區(qū)別,而且不同種類的病害病斑顏色和形狀也不同。試驗中,將對馬鈴薯葉片病斑的顏色、紋理、病斑形狀這3個特征進(jìn)行提取研究。
2.3.1 顏色特征提取 RGB顏色模型中的R、G、B分別代表圖像顏色在紅(Red)通道、綠(Green)通道、藍(lán)(Blue)通道上的灰度值?;诓『D像的顏色特征進(jìn)行數(shù)值計算。在分割后圖像中分別統(tǒng)計病害部位R、G、B分量的平均值,其計算公式如下:
(5)
(6)
(7)
式中:Total為病害像素點總數(shù),N為病害圖像的像素點數(shù)。環(huán)境光照強(qiáng)度的不同會導(dǎo)致R、G、B的變化幅度很大,因此以G分量的均值為參照值,用R、B分量均值與G分量均值之比作為病害特征參數(shù),即
r=R/G。
(8)
b=B/G。
(9)
式中:r為紅色分量均值比,b為藍(lán)色分量均值比。由于r、b值對光照的變化不敏感,能夠有效地提高算法的性能。
RGB顏色分量特征值提取結(jié)果見表1。
表1 RGB顏色分量特征值提取
HSV顏色空間是一種比較直觀的顏色模型。其中H、S、V分別代表色調(diào)、飽和度、亮度。同樣可以得到HSV顏色分量特征提取結(jié)果見表2。
表2 HSV顏色分量特征提取
2.3.2 形狀特征提取 形狀特征提取需要在二化圖像中提取病斑輪廓。調(diào)用Opencv中相關(guān)函數(shù)進(jìn)行算法編程,以提取病斑輪廓特征。
cvFindContours():從二值圖像中檢索輪廓,并返回檢測到的輪廓個數(shù),用來統(tǒng)計病斑數(shù)目;用法為int contour_num=cvFindContours(src,storage,/&contour,sizeof(CvContour),CV_RETR_EXTERNA/L,CV_CHAIN_APPROX_SIMPLE)。cvContourArea():計算整個或部分輪廓的面積,用來計算病斑面積;用法為:tmpArea=fabs(cvContourArea(contour))。cvDrawContours():用于在圖像上繪制外部和內(nèi)部輪廓,這里只需要得到病斑的外部輪廓即可;用法為:cvDrawContours(dst,contour,color,color,-1,1,8)。cvArcLength():計算輪廓線的長度;用法為:tmpLength=cvArcLength(contour)。編寫程序在VS 2010上運行,提取病斑輪廓的相關(guān)信息,結(jié)果見圖7。
幾種形狀特征參數(shù):周長指病斑部位輪廓線上像素間距離之和。面積指計算葉片圖像病斑部位所含的像素數(shù)。形狀參數(shù)(圓形度):圓形度C用來描述病斑接近圓形的程度,計算公式為:
C=4πA/L2。
(10)
式中:圓形度C取值最大為1;病斑的外形越復(fù)雜越偏離圓形,其圓形度C的值越小。
利用輪廓的面積與周長等數(shù)據(jù)信息可以得到病斑的形狀特征值見表3。
表3 病斑形狀特征值
2.3.3 紋理特征提取 灰度共生矩陣是計算紋理特征的基礎(chǔ)。在計算得到共生矩陣之后,計算紋理特征量,筆者經(jīng)常用反差、能量、熵、相關(guān)性等特征量來表示紋理特征。
(1)反差又稱為對比度,反映了圖像的清晰度和紋理的溝紋深淺。
(11)
(2)能量是灰度共生矩陣各元素值的平方和,反映了圖像灰度分布均勻程度和紋理粗細(xì)度。
(12)
(3)熵是圖像包含信息量的隨機(jī)性度量。熵最大,熵值越大,圖像越復(fù)雜。
(13)
(4)相關(guān)性也稱為同質(zhì)性,用來度量圖像的灰度級在行或列方向上的相似程度,值越大,相關(guān)性也越大。
(14)
利用上述算式計算特征量,紋理特征提取結(jié)果見表4。
表4 紋理特征提取結(jié)果
2.4 分類器設(shè)計
功能較完善的識別系統(tǒng)在進(jìn)行模式識別之前,需要學(xué)習(xí)[5-6]。支持向量機(jī)是一種基于統(tǒng)計學(xué)習(xí)理論的機(jī)器學(xué)習(xí)算法,SVM算法在解決非線性、小樣本以及高維模式識別問題中表現(xiàn)出很多獨特的優(yōu)勢。OpenCV是一個開源的計算機(jī)視覺庫[7],在OpenCV中,SVM是作為一個類來定義接口的,本研究選用SVM分類器,分類器的構(gòu)造與識別流程見圖8。
采集4種病害與健康葉片共250個樣本,構(gòu)成馬鈴薯病害信息的數(shù)據(jù)文件。首先對病害信息數(shù)據(jù)進(jìn)行歸一化處理。對每種病害的紅色分量均值比r、藍(lán)色分量均值比b、色調(diào)H、飽和度S、亮度V、圓形度C、離散指數(shù)P、能量、熵、反差、相關(guān)性歸一化到[0,1]后,再選擇合適的內(nèi)核函數(shù)。由于徑向基核函數(shù)的計算復(fù)雜度不隨參數(shù)的改變而改變,同時在整個參數(shù)空間中Mercer條件均成立,是SVM方法中最常用的核函數(shù),因此本研究選取徑向基核函數(shù),其數(shù)學(xué)表達(dá)式為:
(15)
式中:ψ為輸入特征值;ψi為該特征值ψ對應(yīng)的結(jié)果;σ為徑向基核函數(shù)參數(shù),σ>0。
選擇每類20個樣本共計100個作為分類器的訓(xùn)練樣本,構(gòu)建分類器模型。分類識別中主要用到的程序為svmtrain和svmpredict。svmtrain的主要功能是對訓(xùn)練數(shù)據(jù)集進(jìn)行訓(xùn)練,獲得SVM模型;svmpredict的主要功能是根據(jù)訓(xùn)練獲得的模型,對數(shù)據(jù)集合進(jìn)行預(yù)測。語法為:svmtrain[options]training_set_file model_file,svmpredict[options] test_file model_file output_file;其中,options表示操作參數(shù)。用建立的SVM模型再對150個樣本進(jìn)行測試。
本研究采用基于VS 2010的WCF REST Service構(gòu)建服務(wù)器端,提供REST風(fēng)格的服務(wù),用以提供PUT、POST、GET、DELETE 等方法的用法,請求服務(wù)器端傳遞信息或操作資源,與客戶端實現(xiàn)數(shù)據(jù)共享。
3.1 服務(wù)器端
在VS 2010創(chuàng)建新的項目,使用Online Templates中的WCF REST Service Template提供項目模板。項目中不再有SVC文件,這樣就不能每次都通過xx.svc/users/1訪問,而是通過URL Routing配置。項目通過在Global.asax中配置Routing進(jìn)行URL重定向。通過ServiceRoute類進(jìn)行URL重定向,配置了1個名為Service1的Resource,指定到Service1類上。默認(rèn)生成的Resource:Service1代碼,是1個完整的RESTful結(jié)構(gòu),有著Get、Put、Post、Delete的完整支持。
3.2 客戶端
利用簡單、友好的人機(jī)交互界面,指引用戶挖掘出理想的決策規(guī)則,是農(nóng)業(yè)智能診斷系統(tǒng)實現(xiàn)有效推廣應(yīng)用的重要前提[8]。系統(tǒng)客戶端人機(jī)交互界面的設(shè)計充分結(jié)合了Android SDK提供的LinearLayout類、RelativeLayout類和AbsoluteLayout類各自的優(yōu)勢,并采用其提供的多種更具人性化、操作簡單的Android常用和高級控件,完成系統(tǒng)人機(jī)交互界面的設(shè)計。本研究構(gòu)建了客戶端開發(fā)環(huán)境,在Windows操作系統(tǒng)下,由“JDK(Java development kit)+Eclipse+Android SDK(Software development kit)+ADT(Android development tools)”構(gòu)建。其中,JDK是整個Java的核心,包括Java運行環(huán)境、Java工具和Java基礎(chǔ)的類庫;Eclipse是作為Android應(yīng)用程序開發(fā)IDE(integrated development environment)使用的;Android SDK是由Google提供的完全開放源代碼的Android專屬軟件開發(fā)工具包;ADT是支持Android工程和工具的通用插件,使得創(chuàng)建、運行和調(diào)試Android更加快速簡單[9-11]。
基于VS 2010搭建病害識別系統(tǒng),主界面見圖9。
基于Android SDK設(shè)計的客戶端界面見圖10。
試驗中將采集到的馬鈴薯葉片圖像中的150幅選作測試樣本,其中健康葉片圖像29幅、早疫病36幅、晚疫病34幅、炭疽病25幅、灰霉病26幅,利用識別系統(tǒng)進(jìn)行識別,其識別結(jié)果見表5。
從識別結(jié)果可以看出,對健康葉片的識別率可達(dá)100%,除了晚疫病的識別率為88%以外,其他病害識別率均可達(dá)到92%左右。
表5 病害識別結(jié)果
本研究基于機(jī)器視覺的馬鈴薯病害識別方法,以 VS 2010 為開發(fā)環(huán)境設(shè)計病害分割、局部顯示、特征提取等算法并實現(xiàn)各部分功能,從而得到幾種病害信息的主要特征值,生成馬鈴薯病害信息數(shù)據(jù),訓(xùn)練分類器模型,并對病害進(jìn)行識別。構(gòu)建識別系統(tǒng),通過REST風(fēng)格的Web Service與客戶端連接,客戶端基于Android SDK實現(xiàn)。通過測試,病害識別率總體在92%以上,基本達(dá)到了研究目的,滿足了識別要求,說明系統(tǒng)設(shè)計合理。這對機(jī)器視覺技術(shù)在農(nóng)作物病害識別方面的應(yīng)用具有積極意義。
[1]陳佳娟,趙學(xué)篤. 采用計算機(jī)視覺進(jìn)行棉花蟲害程度的自動測定[J]. 農(nóng)業(yè)工程學(xué)報,2001,17(2):157-160.
[2]邱道尹,張紅濤,劉新宇,等. 基于機(jī)器視覺的大田害蟲檢測系統(tǒng)[J]. 農(nóng)業(yè)機(jī)械學(xué)報,2007,38(1):120-122.
[3]李 斌. 基于計算視覺的奶牛體型線性測量系統(tǒng)設(shè)計[J]. 計算機(jī)測量與控制,2012,20(12):3213-3215.
[4]胡 君,程 京,王 敏. 基于XML的REST API設(shè)計與實現(xiàn)[J]. 微計算機(jī)信息,2010(9):166-167.
[5]李宏東. 模式分類[M]. 北京:機(jī)械工業(yè)出版社,2003:7-13.
[6]孫即祥. 現(xiàn)代模式識別[M]. 長沙:國防科技大學(xué)出版社,2002:1-5.
[7]彭艷芳. 視頻運動目標(biāo)檢測與跟蹤算法研究[D]. 武漢:武漢理工大學(xué),2010.
[8]李 偉,蘆東昕,柳長安. 基于Windows Mobile的智能終端上自動化測試研究[J]. 計算機(jī)工程與設(shè)計,2006,27(21):4055-4057.
[9]大 山. Android 操作系統(tǒng)應(yīng)用推薦[J]. 個人電腦,2011,17(3):82-91.
[10]尚明華,秦磊磊,王風(fēng)云,等. 基于Android智能手機(jī)的小麥生產(chǎn)風(fēng)險信息采集系統(tǒng)[J]. 農(nóng)業(yè)工程學(xué)報,2011,27(5):178-182.
[11]吳亞峰,索依娜. Android核心技術(shù)與實例詳解[M]. 北京:電子工業(yè)出版社,2010:22-25.
10.15889/j.issn.1002-1302.2017.02.058
2015-11-14
內(nèi)蒙古自治區(qū)高等學(xué)??茖W(xué)研究項目(編號:NJZY144)。
趙建敏(1982—),男,內(nèi)蒙古包頭人,碩士,講師,主要從事人機(jī)交互、模式識別的研究。E-mail:418405748@qq.com。
薛曉波,碩士研究生,主要從事機(jī)器視覺、圖像處理的研究。E-mail:418405748@qq.com。
S435.32;TP391.4
A
1002-1302(2017)02-0198-04
趙建敏,薛曉波,李 琦. 基于機(jī)器視覺的馬鈴薯病害識別系統(tǒng)[J]. 江蘇農(nóng)業(yè)科學(xué),2017,45(2):198-202.