張玉榮,王強強,吳 瓊,祝方清
1.河南工業(yè)大學 糧油食品學院,河南糧食作物協(xié)同創(chuàng)新中心,糧食儲藏安全河南省協(xié)同創(chuàng)新中心,河南 鄭州 450001
2.湖北大學知行學院,湖北 武漢 430011
小麥是我國的三大儲備糧食之一,做好小麥品質的檢測工作對于國家穩(wěn)定以及經濟的平穩(wěn)發(fā)展具有重要意義[1]。目前,在小麥品質檢驗工作中,不完善粒的檢測完全是由檢驗員感官檢測,工作量大、費時費力且主觀性強[2]。小麥不完善粒定義為受到損傷但尚有食用價值的籽粒,包括破損粒、生芽粒、蟲蝕粒、病斑粒和霉變粒[3-8]。為克服人工檢驗的不足以及實現(xiàn)小麥不完善??焖贌o損檢測的要求,利用圖像處理技術與深度學習的小麥不完善粒識別研究一直是糧食品質檢測領域的研究熱點[9]。國內研究中,曹婷翠等[10]將小麥粒以無粘連的方式整齊擺放在透明的載物板上進行圖像采集和處理,建立圖像數(shù)據(jù)庫 WheatImage,設計并實現(xiàn)2個卷積層、2個池化層和1個全連接層的卷積神經網絡模型的小麥不完善粒識別,較傳統(tǒng)的機器識別方法識別率提高了15%,對于加入噪聲干擾的圖像,識別率也達到 90%以上,有效解決了傳統(tǒng)小麥不完善粒識別中提取特征復雜等問題,但深度模型的結構淺、圖像信息單一。張博[11]使用MATLAB、Python軟件,對采集的整齊無粘連的小麥圖像進行處理,通過對單籽粒圖像進行旋轉、翻轉操作,擴容樣本,建立傳統(tǒng) SVM 模型和經典CNN網絡模型,識別結果表明,傳統(tǒng) SVM 模型和經典 CNN 模型對小麥籽粒的正確識別率分別為80.2%和90.6%,深度學習識別模型可有效用于小麥不完善粒分類識別中,但旋轉與翻轉的樣本擴容操作在深度模型訓練中就可實現(xiàn),擴容操作導致圖像數(shù)據(jù)冗余,模型學習效率低。國外研究中,Thomson等[12]對小麥籽粒進行逐粒掃描生成小麥三維圖形圖像,對小麥的完善粒和發(fā)芽粒進行分類識別,識別率分別為83%、89%。Neethirajan等[13]通過人工提取小麥籽粒的55個特征,使用BP人工神經網絡進行分類識別,整體識別準確率達到 95%。此外對基于高光譜圖像的機器視覺在小麥不完善粒識別中的應用進行了探索,光譜信息和圖像特征相結合可有效提高小麥不完善粒的識別準確率[14-15]。這些研究方法處理的小麥圖像大都是排列整齊、方向一致,雖然具有較高的識別準確率,但并不適合實際工作中小麥不完善粒在小麥籽粒堆中隨機分布的檢測識別。
OpenCV計算機視覺庫作為常用的圖像處理庫,支持目前先進的圖像處理技術且功能完善,采用Matlab、Python結合Visual Studio調用OpenCV函數(shù)庫進行不同類型圖像的濾波運算,可顯著提高處理效率,降低編程設計成本[16-19]。Dominguez等[20]將ImageJ(用于生命科學的圖像分析程序)和OpenCV計算機視覺庫結合開發(fā)了一個可用于生物醫(yī)學圖像有效處理且可公開使用的IJ-OpenCV庫;吳林輝等[21]以Java編程語言為基礎,使用OpenCV圖像技術定位車牌、分割車牌,接著應用Tensorflow成功識別車牌字符,但編程煩瑣、識別單一、移植性差。Python語言較Visual Studio和Java語言語法簡潔清晰,具有豐富和強大的庫,能夠快捷調用OpenCV 庫中的函數(shù)進行實時圖像處理[22]。李清洲等[23]使用Python-OpenCV函數(shù)庫設計車牌識別系統(tǒng),充分利用計算機視覺類庫OpenCV對圖像的處理功能,完成多種類型的汽車車牌識別。此外深度學習和支持向量機被廣泛應用于圖像處理和分類識別[24-26]。尚未見OpenCV函數(shù)庫在小麥不完善粒中應用方面的研究。作者采用Python-OpenCV函數(shù)庫對小麥籽粒方向、位置隨機的原始圖像進行處理,然后在Python環(huán)境下應用基于Keras框架的卷積深度模型做小麥不完善粒識別測試,可有效解決OpenCV函數(shù)庫在C語言或Java語言環(huán)境下不易配置與調用的問題,同時保證了小麥不完善粒識別的準確性。
采用河南中儲糧質量檢測中心提供的不同儲藏年限和不同品質的1 000余份小麥小樣,從樣品中挑出完善粒、生芽粒、破損粒、蟲蝕粒和病霉粒(病斑粒和生霉粒)。
圖像采集平臺:自主設計;計算機:戴爾有限公司;48MP相機:小米有限公司;Anaconda3 2019.10、Python 3.7.4、PyCharm 2019.3.1、Numpy 1.16.5、Matplotlib 3.1.1、Pandas 0.25.1、Keras 2.4.4、Tensorflow_gpu 1.13.1軟件。
為克服傳統(tǒng)圖像采集時采集到的圖像不能實時傳輸?shù)接嬎銠C及時標記處理、鏡頭與載物板之間距離不易控制、光源不均、籽粒必須整齊擺放等問題,本研究設計開發(fā)了一個采集小麥圖像的簡易裝置,如圖1所示,黑色吸光布與載物盤相結合組成接料盤,黑色吸光布具有不反光、質地軟、摩擦大等特點,既能使采集到的原始圖像沒有反光陰影干擾又能使從一定距離落下的小麥籽粒不易彈起和滾動,可避免籽粒黏結和區(qū)域籽粒聚集的現(xiàn)象,使小麥籽粒均勻、隨機地散落在接料盤上。
注:1.計算機; 2.相機; 3.光源; 4.限位槽; 5.載物盤;6.黑色吸光布; 7.底座; 8.右擋光板;9.左擋光板。
圖像采集時,將一個高10.0 mm、每個內孔直徑為4.5 mm的蜂窩式自由落料器置于接料盤上方5.0 mm處,小麥籽粒通過落料器的不同孔下落到接料盤的黑色吸光布上,推到相機下方進行拍照,傳輸?shù)接嬎銠C以JPG格式保存,完成小麥籽粒原始圖像采集。
對采集到的小麥原始圖像使用Python-OpenCV函數(shù)庫進行圖像預處理,步驟如圖2所示。
圖2 OpenCV圖像處理的步驟
2.1.1 圖像導入與格式轉換
OpenCV圖像處理時函數(shù)cv2.imread()用于讀取圖像文件,cv2.cvtColor()函數(shù)進行顏色空間轉換得到RGB格式的小麥圖像,之后對圖像進行灰度化處理使圖像特征增強,運行結果如圖3所示。從圖3可以看出,原始圖像為RGB格式,灰度化格式圖像(圖3c)并不是通常意義上的黑白圖像。
圖3 圖像格式轉換結果
2.1.2 圖像去噪
對小麥原始圖像進行去噪處理,可去除圖像中的噪聲干擾,使小麥籽粒在視覺上容易與背景區(qū)分。通過OpenCV圖像處理技術中常用的均值濾波cv2.blur()、高斯濾波cv2.GaussianBlur()、雙邊濾波cv2.bilateralFilter()、中值濾波cv2.medianBlur()[27]4種濾波器對小麥圖像進行濾波操作,結果如圖4所示。從圖4可以看出,均值濾波(圖4c)的處理效果最優(yōu)。
圖4 圖像4種濾波結果
2.1.3 圖像二值化
對小麥籽粒圖像進行二值化處理,可將圖像目標物與圖像背景分類,以用于后續(xù)的分割識別處理。Otsu′s二值化是對圖像進行一個雙峰直方圖計算,根據(jù)直方圖自動計算出一個閾值數(shù)值,即雙峰的中間值,函數(shù)cv2.THRESH_OTSU根據(jù)這個閾值數(shù)值對圖像進行二值化處理,運行結果如圖5所示,該直方圖具有明顯的雙峰,圖像的自動閾值數(shù)值計算結果為115。Otsu′s二值化的圖像結果較簡單,閾值二值化(閾值設置為80)圖像結果更優(yōu)。
圖5 去噪Otsu′s二值化
小麥籽粒原始圖像經過灰度化處理、均值濾波去噪、圖像二值化處理后,籽粒圖像的許多細節(jié)信息得到了增強,對比度增加,但小麥籽粒圖像上仍存在少量的噪聲信息,如籽粒邊緣上存在一定細小的毛刺、斷裂或者邊界圖像信息模糊不清。運用圖像形態(tài)學處理的圖像細化、像素化和修剪毛刺等技術在圖像后處理中進一步優(yōu)化圖像,成為圖像增強的有力補充。OpenCV中膨脹、腐蝕、開運算以及閉運算的函數(shù)如表1所示。
表1 OpenCV形態(tài)學處理函數(shù)
去噪小麥籽粒二值圖像形態(tài)學處理的結果如圖6所示,經過均值濾波運算后的小麥二值化圖像腐蝕操作后部分籽粒邊緣信息被掩蓋,膨脹操作后籽粒毛刺和黏結被放大,開閉運算處理后的圖像、噪聲得到了有效去除,人的視覺已可以清晰地觀察到籽粒形態(tài)。
圖6 去噪圖像形態(tài)學處理
用于圖像分割的常用方法有2種:一種是基于卷積神經網絡和圖像處理技術的圖像分割新方法,具有粗糙圖像分割(CIS)算法和精細圖像分割(FIS)算法[28];另一種是通過k-最近鄰方法進行的k均值聚類數(shù)據(jù)分類,即k均值聚類圖像分割[29]。本研究采用k均值聚類圖像分割,首先對小麥完全預處理后的圖像進行掩膜處理,然后對圖像中的籽粒進行輪廓檢測,將檢測到的輪廓用一個矩形邊框包起來,最后通過計算矩形方框的矩陣坐標將其剪裁保存下來完成圖像的分割。
在Python-OpenCV圖像處理中,掩膜的概念是從PCB版制作過程借鑒而來,通過掩膜操作,用選定的圖像對需要處理的圖像進行遮擋,來控制圖像,使被分割處理的區(qū)域在剪裁時不被波及,從而保留完整的單籽粒信息。掩膜運算函數(shù)cv2.bitwise_and()是一種圖像到圖像的“與”關系,運算結果如圖7所示。完成小麥圖像掩膜操作后,使用cv2.findContours()函數(shù)對圖像中的籽粒進行輪廓檢測,經過參數(shù)試驗,以生芽粒圖像為例,在圖像掩膜處理后得到的輪廓檢測效果如圖8所示,用cv2.minAreaRect()函數(shù)與cv2.boxPoints()函數(shù)對經過輪廓檢測的圖像進行最小矩形標記處理用于圖像分割,結果如圖9所示。
圖7 掩膜操作
圖8 輪廓檢測
圖9 矩形邊框
完成矩形邊框標記后,通過計算矩形方框的4個頂點矩陣坐標值,據(jù)此坐標將其剪裁保存下來完成圖像的分割,矩形方框矩陣坐標計算方法如圖10所示,以整幅圖像像素點為基準建立坐標軸,將圖像中每一個最小矩形方框的左上角頂點定義為坐標(x,y),右下角頂點坐標定義為(x+w,y+h),使用crop_img和cv2.imwrite()函數(shù)將每一個剪裁到的小麥籽粒保存到指定文件夾下。
圖10 像素矩陣坐標計算方法Fig.10 Pixel matrix coordinate calculation method
OpenCV函數(shù)庫中,k均值聚類函數(shù)cv2.kmeans()與相關參數(shù)構成基于k均值聚類算法的圖像分割,執(zhí)行結果如圖11a所示,由圖11可知,原始圖像中小麥籽粒方向、位置的隨機性導致執(zhí)行k均值聚類圖像分割后得到的小麥單籽粒圖像大小不一,采用OpenCV圖像縮放函數(shù)cv2.resize()對單籽粒圖像進行統(tǒng)一處理,結果如圖11b所示,從圖11可知,5類小麥籽粒圖像外觀特征得到了抽象化的增強,且與小麥籽粒原始形態(tài)一一映射。
Keras是一個由Python語言編寫的高度模塊化的深度學習框架,使用Keras框架時,只需調用Keras已經封裝好的函數(shù),在程序中就可以查看神經網絡模型結構,也可通過model.summary()函數(shù)輸出神經網絡模型的結構。Keras框架下常用的卷積神經網絡有AlexNet、VGGNet、GoogLeNet和ResNet,AlexNet的模型結構含5個卷積層、3個池化層和3個全連接層,訓練快,學習能力弱;VGGNet模型的經典代表是VGG16,其結構含13個卷積層、5個池化層和3個全連接層,訓練慢,深度深,學習能力強;GoogLeNet和ResNet都是模塊化的大規(guī)模卷積神經網絡,其規(guī)模是AlexNet和VGG16的數(shù)十倍,一般分類識別問題不宜采用。綜合比較4種神經網絡模型的深度和參數(shù),VGG16模型的識別精度和運行效率最佳,本研究采用VGG16神經網絡模型,以(224,224,3)的RGB圖像作為輸入數(shù)據(jù)。
采用直接讀取圖像數(shù)據(jù)的方法,建立小麥不完善粒圖像數(shù)據(jù)庫,數(shù)據(jù)庫文件夾下設3個數(shù)據(jù)集:訓練集、驗證集、測試集,每一個數(shù)據(jù)集分別包含5類小麥不完善粒圖像數(shù)據(jù)文件,3個數(shù)據(jù)集的圖像數(shù)據(jù)各自獨立、互不交叉。圖像數(shù)據(jù)庫數(shù)據(jù)如表2所示。
表2 圖像數(shù)據(jù)庫數(shù)據(jù)Table 2 Image database
訓練與驗證同時進行,小麥圖像數(shù)據(jù)庫梯度增加,由VGG16模型結構可知,輸入的單個小麥圖像數(shù)據(jù)均為(224,224,3),訓練過程中的數(shù)據(jù)參數(shù)如表3所示。
表3 訓練數(shù)據(jù)與參數(shù)Table 3 Training data and parameters
本研究采用的GPU內存為0.0/7.9GB,VGG16模型運行按93MB/img進行計算,batch_size的值為16、32、64,每個數(shù)據(jù)庫參與迭代10、100、500次得出訓練模型。data15迭代100次中訓練與驗證的精度和損失變化如圖12所示。
圖12 data15迭代100次中訓練與驗證的精度和損失變化
使用同一個測試集分別對4個訓練模型進行測試,測試集(N)共5類,每類200個圖像數(shù)據(jù),data15和data18測試結果如表4和表5所示。由表4和表5可知,同一數(shù)據(jù)庫不同迭代次數(shù)訓練得到的預測模型測試結果隨著迭代次數(shù)的增加而提高,data15迭代100次較10次的總體正確率提升了3.1%,data18迭代500次較100次的總體正確率提升了3.8%;不同數(shù)據(jù)庫同一迭代次數(shù)訓練得到的預測模型測試結果隨著數(shù)據(jù)庫圖像數(shù)據(jù)增加而提高,迭代100次時,data18較data15的總體正確率提升了7.4%。分析表明,隨著模型訓練迭代次數(shù)的增加,訓練參數(shù)通過去差留優(yōu)逐漸優(yōu)化,預測模型識別準確率提高;數(shù)據(jù)庫圖像數(shù)據(jù)增多,圖像信息更全面,預測模型識別準確率提高。結果表明,Python-OpenCV圖像處理得到的小麥圖像分類識別會隨著小麥圖像數(shù)據(jù)與訓練迭代次數(shù)的增加,訓練參數(shù)不斷優(yōu)化,圖像信息增多,預測模型的識別正確率提高,且不會因籽粒圖像信息單一而出現(xiàn)模型訓練過擬合現(xiàn)象。
表4 data15測試結果Table 4 Data15 test results
表5 data18測試結果Table 5 Data18 test results
通過Python-OpenCV圖像處理函數(shù)庫對小麥圖像進行處理后小麥籽粒圖像外觀特征得到了增強,對于深度學習而言,增加了小麥方向、位置隨機分布以及resize化小麥單籽粒信息,模型訓練時不會因圖像數(shù)據(jù)信息單一而過擬合。整齊排列的小麥圖像處理方式,雖然少量的數(shù)據(jù)就能快速訓練出來識別度較高的分類檢測模型,但不具備廣泛的實用性。本研究結果表明,在小麥籽粒隨機分布的情況下使用該圖像處理技術處理完成的小麥籽粒圖像,圖像信息多變,深度模型訓練會隨著訓練數(shù)據(jù)與迭代次數(shù)的增加,模型信息越來越廣泛且不會訓練過擬合,不完善粒的識別準確率也會逐步提高,以此種圖像數(shù)據(jù)庫初步訓練到的神經網絡模型對小麥不完善粒的總體識別準確率達到85.4%。本研究中的Python-OpenCV圖像處理方法,既有效增加了小麥籽粒的空間隨機性,又符合小麥不完善粒的實際場景檢測識別,可為小麥不完善粒的智能、快速、無損檢測設備的研發(fā)提供理論支撐。