黃麗韶
(湖南科技學院,湖南 永州 425199)
永州之野、橘香世界。近年來,永州市柑橘掛果面積為115.04萬畝(約766.93 km2),年產量82.05萬t[1]。柑橘業在永州農村產業結構調整、農民脫貧致富、城鄉人民就業和生態環境改善中發揮了重要作用。潰瘍病是柑橘的主要細菌性病害,類似于非典,是一種能隨空氣和水傳播的毀滅性病害。有關學者認為,潰瘍病對柑橘產業的影響已達到基本等同于“致死性”和“毀滅性”的程度[2]。利用計算機自動識別病害是全世界都在研究的問題,可以顯著節省成本,并可以防止由于人類自身的生物機能限制而產生的判斷錯誤。
圖像識別是用計算機來模擬生物宏觀視覺功能的科學與技術。從20世紀70年代開始,美國研發了大豆病害診斷助手、果園管理及害蟲防治系統、棉花管理專家系統,日本千葉大學開發了番茄病害診斷專家系統[3]。我國在國家自然科學基金、國家科技攻關的資助和許多部門的支持下,研發了柑橘園藝專家系統及玉米低溫冷害專家系統等。美國佛羅里達大學有學者利用柑橘葉片圖像開展病害自動識別相關研究工作。我國有學者在作物病蟲圖像特征提取、測量及種類自動識別研究中,對昆蟲圖像的分割和邊緣檢測算法進行研究。也有學者根據棉葉的孔洞及葉片邊緣殘缺來測定棉花受蟲害程度。還有學者針對植物病害彩色紋理圖像的特點,提出利用色度矩提取特征向量等進行病害識別的方法。
本設計主要分為文件系統與代碼兩部分。文件系統主要由圖像與模型兩大文件組成。圖像文件,顧名思義就是存放圖像的文件:由原始圖像(即還沒有處理的、初始的圖像)、處理后圖像(即經過一系列操作處理后的圖像)、測試集圖像(由原始圖像組成,都未經預處理)。代碼部分主要由預處理代碼、卷積神經網絡代碼、測試代碼3個部分組成。
圖像標準化功能是對原始數據的格式化處理,主要考慮圖像的像素大小、圖像的清晰度等以及圖像中的柑橘是否有潰瘍病的病癥,以避免開始就對結果造成影響。此外,還應考慮數據是否完整。所以在保證圖像高度為208的情況下,圖像比例縮減。
本功能主要采用Python中Os模塊、PIL模塊以及Opcv2模塊進行實驗。
首先獲取原始圖像集,對原始圖像進行確認并分類(即柑橘是否有潰瘍病的病癥);分類圖像后,定義標準像素,再將有潰瘍病病癥的柑橘進行標準化處理;利用Os模塊創建新文件夾,將處理后的圖像另存于新文件夾中,以便后續處理。
預處理功能主要是對圖像進行預處理,主要采用Python中的Opcv2模塊、Numpy模塊、Matplotlib模塊、PIL模塊進行處理。
3.3.1 灰度化處理功能
首先,獲得圖像每個點的像素值;其次,采用灰度加權平均算法(按0.3R+0.59G+0.11B的比例)進行計算;最后,將灰度加權平均算法所算得的值賦予圖像每個像素點。
3.3.2 二值化處理
首先調用灰度化后的圖像,其次采用最小誤差的全局閾值法進行二值化,在多次實驗中(使用BINARY、BINARY_INV、TRUNC、TOZERO、TOZERO_INV)等方法,發現采用THRESH_TOZERO_INV方法最好。
ret,thresh=cv2.threshold(GrayImage,127,255,cv2.THRESH_TOZERO_INV)
3.3.3 高斯濾波法去噪處理
高斯濾波就是對整幅圖像進行加權平均的過程,每一個像素點的值,都由其本身和鄰域內的其他像素值經過加權平均后得到。高斯濾波的具體操作:用一個模板(或稱卷積、掩模)掃描圖像中的每一個像素,用模板確定的鄰域內像素的加權平均灰度值替代模板中心像素點的值用。高斯平滑濾波器對于抑制服從正態分布的噪聲非常有效。先求卷積核,再進行高斯濾波即可。
3.3.4 Tensorflow卷積神經網絡構造模型
本設計中的Tensorflow卷積神經網絡一共由5層組成,前兩層由卷積層與池化層構成。
中間兩層是連接層,最后一層為輸出層。卷積核定義為3×3,共16個。每隔5 000步取一次模型。
在卷積層中,首先定義了16個3×3的卷積核。首先進行計算標準差,其次通過tf.get_variable函數創建出新的Tensorflow變量,再次進行偏差計算,最后加上激活函數進行非線性化處理。當然,這些操作都在定義的conv1的命名空間內執行。
在池化層中,首先需要定義的是池化窗口,其中,height=weight=池化窗口的步長=卷積核移動距離+1。最重要的是,需先規范化、再池化。規范化也就是特征縮放,局部需要響應歸一化。
在連接層中,首先把卷積過的多維tensor拉平成二維的張量(就是矩陣)。其次連接神經元,計算標準差。最后矩陣相乘再加上標準差。
在整個訓練過程中,因為采用batch訓練法,所以需要先定義隊列來存放。
測試功能也是本設計最后的功能,是對前面操作的檢驗,雖然不難,但結果的好壞直接影響整個設計的好壞。在整個測試功能的實現過程中,因為只考慮圖像中的柑橘等是否有被潰瘍病傷害過的痕跡,所以只考慮兩種結果,有或者無。提前定義了一個類,將測試集中的圖像在進行測試前,先進行標準化處理,依然是208×208的像素。
標準化模塊主要定義圖像的模式與大小,即所有圖像為RGB(Red、Green、Blue)模式,大小可自定義,主要是為了后續操作。
原先每張圖的像素各不相同,本研究將標準像素定義為853×640,所以每張圖經過此模塊后,像素改變為853×640,當然,一些圖像的模式也改變成了RGB模式。在此設計中,并沒有考慮水平、垂直分辨率等因素對后續實驗的影響。所以,并沒有改變圖像水平、垂直分辨率等。
預處理主要由3個部分組成:灰度化、二值化、濾波(其中還包含歸一化等操作)。灰度化操作從肉眼可以看出原圖像變灰,相對來說,還是比較亮的。因為原圖像綠色部分相對來說較多,而顏色對本設計來說比較重要,是重要的識別依據。所以使用了灰度加權平均算法,使用了0.59的Green,因此灰度化后的圖像,會比選用平均算法等算法處理的圖像,亮一些。總體來說還是可以的。
二值化操作,來源于本研究在灰度化后的圖像。在作二值化處理時,前期并不知道何種參數對后面操作更好,所以做了最小誤差全局閾值的所有參數處理,在后續的操作中,發現最后一種(即TOZERO_INV)參數作處理,對本設計后面的操作更有利。
另外,可以聽出一部分椒鹽噪音,因此,在后面的濾波操作中選取了高斯濾波方式。
高斯濾波,有一部分為原圖像(即二值化之后的圖像),有一部分為使用高斯濾波之后的圖像。因此可以看出,圖像中的椒鹽噪音減少了。之所以選取高斯濾波方法,是因為二值化之后的圖像出現了大量椒鹽噪音,而本操作就是為了減少這些噪音對后續操作的影響,提高本設計的準確率。
建模模塊也是本設計最重要的模塊之一。模型的好壞直接決定了本設計的成功與否。因本設計采取每5 000步取一次模型,所以本設計一共得到3個模型。這3個模型也是前面所有操作得到的最終結果。
測試模塊的作用就是將訓練集與測試集導入模型中,驗證此模型是否可用(即驗證此設計是否符合預期)。此模塊的結果在下面作出詳細解釋。
本設計采用訓練集與測試集分開測試。
實驗來源于測試集,之所以選取,是因為該實驗對模型的要求極高,因影響因素過多,很影響準確率。但識別該實驗沒有柑橘潰瘍病病癥的可能性依然超過72.00%。
實驗依然來自于測試集,并沒有柑橘潰瘍病的病癥,可能性在99.96%以上,效果是比較好的。
實驗來源于訓練集,模型認為該實驗沒有柑橘潰瘍病的病癥的可能性為99.99%。相對來說,準確率已經很高了。
根據最終結果的測試,發現最低的可能性為76.00%,最高的可能性高達99.99%。所以,本設計也符合最開始的預期。本設計的可改進之處有:(1)開發可視化界面,讓用戶用起來更加方便。(2)開發成App軟件,通過讀取相冊內數據,對圖像進行識別。(3)也可開發成電腦軟件,通過與攝像頭的合作,將柑橘園的柑橘樹進行實時監控,以進行實時提醒。(4)添加網絡功能,增加網上識別功能,如有需要,可直接在網頁上進行識別。