姚俊光,余冰純,林景峰,殷惠莉
(華南農(nóng)業(yè)大學(xué)電子工程學(xué)院,廣州510642)
龍眼是我國亞熱帶特產(chǎn)珍貴果樹,具有2000 多年栽培歷史,品種繁多,不同品種外觀略有差異。從產(chǎn)值來看,2014 年我國龍眼產(chǎn)量超過180 萬噸[1],隨著傳統(tǒng)農(nóng)業(yè)的升級改造,機(jī)械化與自動(dòng)化水平不斷提升。為了降低勞動(dòng)力成本,提高生成力,機(jī)械化果實(shí)采摘技術(shù)日漸受到人們重視。目前水果機(jī)械采收方式一般有兩種,一種是機(jī)械化采收方式——機(jī)器通過震動(dòng)使得果實(shí)與枝干分離;另一種是機(jī)器人采收方式——機(jī)器借助計(jì)算機(jī)圖像處理技術(shù)精確定位果實(shí)(串)的位置,然后通過機(jī)械方式對果實(shí)進(jìn)行采摘[2]。本文提出了一種基于OpenCV 的龍眼圖像合理通道選擇的圖像處理技術(shù),調(diào)用OpenCV 中強(qiáng)大的圖像處理函數(shù)庫,在Visual Studio 2017 的編譯環(huán)境下,用C++語言對龍眼圖片進(jìn)行圖像處理分析,從而挑選出最合適的模型通道。
在計(jì)算機(jī)視覺領(lǐng)域內(nèi),為了更好地描述一幅彩色圖像的顏色,人們提出了許多的色彩空間模型,即用一組數(shù)值來描述一個(gè)色彩的數(shù)學(xué)模型。其中經(jīng)常用到的模型有RGB 模型、HSI/HSV 模型、La*b*模型、YCrCb模型、OHTA 模型、CIE-XYZ 模型等六種,這六種模型大體上可以分為兩類,一種是混合顏色模型,這個(gè)顏色模型中的所有分量都包含有亮度信息;另一種是把亮度信息單獨(dú)提出,作為單獨(dú)的一個(gè)分量的色彩模型。
HSV/HIS 色彩空間模型是一種基于視覺原理的模型。這一類模型將光照強(qiáng)度這一特征提取出來,單獨(dú)作為一個(gè)分量。
RGB 模型是一種加色模型,在三維直角坐標(biāo)系中,原點(diǎn)處表示黑色RGB(0,0,0),而RGB(255,255,255)則表示為白光。
La*b*模型是一種基于人的視覺原理而確定的一種色彩空間模型。La*b*模型相較于其他色彩空間模型而言是一個(gè)較為均勻的色彩空間模型。
色彩空間色度圖展示了對一般人可見的所有色度,但是XYZ 模型可以表示的顏色比人眼實(shí)際能看到的顏色范圍要大很多。CIE-XYZ 在色度圖上的歐氏距離并不對應(yīng)于兩種顏色之間的差別程度。
YCrCb 模型是一種類似于HSV 的色彩空間模型。該模型將亮度與人所感覺的顏色分離,是YUV 色彩空間的壓縮和偏移。
OHTA 色彩空間又被稱作I1I2I3色彩空間模型,它是由Ohta 等人[3]在1980 年通過研究比較而提出的一種對基于圖片色彩區(qū)域分割有效的一種色彩空間模型。OHTA 模型由一組正交基I1I2I3組成。
OHTA 顏色空間可由RGB 模型經(jīng)過線性變換得到。
通常,OHTA 模型與RGB 模型的轉(zhuǎn)換公式可以表現(xiàn)為公式(1)所示的形式,但是在實(shí)際操作過程中需要將其轉(zhuǎn)換到了[0,255]的空間當(dāng)中。
在圖像采集過程當(dāng)中由于各種原因,難免會(huì)在拍攝的圖像中產(chǎn)生各種各樣的噪聲,這些噪聲如果不消去,很有可能會(huì)對后面的進(jìn)一步操作帶來不利的影響。因此對采集到的圖片預(yù)先作濾波處理是很有必要的。一個(gè)合適的濾波算法不僅要求運(yùn)算速度快,還要能很好地抑制噪聲污染極大地保留原有的圖像信息。
王曉虹等人[4]提出了一種結(jié)合Ridgelet 變換與Wiener 濾波的算法用于對蘋果圖像進(jìn)行濾波,這種濾波算法可以自適應(yīng)地抑制圖像噪聲。Jiménez 等人[5]通過預(yù)設(shè)掃描窗口,通過檢測窗口內(nèi)的各點(diǎn)與其均值的差值是否大于三個(gè)標(biāo)準(zhǔn)差來抑制圖像中的高斯噪聲,同時(shí)這種算法還能夠有效地保護(hù)不連續(xù)邊緣信息。
圖像平滑處理方法主要分為空域法和頻域法[6]。圖像處理中主要采用空域法中的兩種最經(jīng)典的平滑方法:均值濾波(blur 函數(shù))和中值濾波(medianBlur 函數(shù))。
如公式(2),均值濾波則是線性濾波的一種,主要方法為鄰域平均法,即采用一片圖像區(qū)域的各個(gè)像素的均值來代替原圖像的各個(gè)像素值。一般要在圖像上對目標(biāo)圖像給出的一個(gè)內(nèi)核,構(gòu)成一個(gè)濾波模板,在用模板中的全體像素的平均值代替原來的像素值。均值濾波可以有效處理噪音,同時(shí)處理速度較快。
如公式(3),中值濾波采用非線性濾波方式,就是將一個(gè)像素周圍的一個(gè)窗口內(nèi)的所有像素灰度值進(jìn)行排序后選取其中的中值來代替那個(gè)像素的灰度值。因此中值濾波的速度會(huì)較慢。中值濾波能夠有效地消除隨機(jī)噪聲帶來的污染,能較好地保護(hù)圖像的邊緣,不會(huì)使得圖像模糊化。
本文研究工作流程如圖1 所示。輸入圖片后,對圖片進(jìn)行濾波去噪,分離出各個(gè)通道,再分離出來的通道中篩選出一部分果實(shí)與背景較易區(qū)分開的通道,最后利用幾個(gè)通道得出的灰度圖繪制像素直方圖,經(jīng)過分析從而得出合理的通道。
圖1 圖像處理技術(shù)工作流程圖
通過OpenCV 庫內(nèi)的imread 函數(shù)讀取圖片。文中分析待處理的部分成熟龍眼原圖如圖2 所示。
圖2 成熟龍眼原圖
為了消除噪聲污染,減少圖像上的噪音或者失真,需要對待處理的圖片進(jìn)行模糊處理,也叫平滑處理。經(jīng)過濾波后的圖像,視覺上感覺整體比較模糊。圖像處理中則采用此方法去除噪音,減少接下來所畫的直方圖的毛刺,使曲線較為平滑,易于得出規(guī)律。經(jīng)均值濾波后的圖片如圖3 所示。
圖3 均值濾波后的圖
如前所述,常用的有六種色彩空間模型,而每種色彩空間模型由三個(gè)通道組成。每個(gè)通道由不同的規(guī)則在計(jì)算機(jī)里面由不同的矩陣記錄。為了分析選擇合理的通道,首先就要把通道分離出來,分離出來的通道在計(jì)算機(jī)里由像素點(diǎn)矩陣儲存。分析方法有兩種,第一種是直接觀察各個(gè)像素的數(shù)值,觀察感興趣區(qū)域(Region Of Interest,ROI)部分像素值特點(diǎn)。很多情況下,由于直接觀察不夠直觀,這就增大了觀察的難度。第二種方法就是分離出通道后,直接以灰度圖的形式呈現(xiàn)出來。這樣通過觀察每個(gè)通道對應(yīng)的灰度圖感興趣區(qū)域是否與其他部分區(qū)別較大,即可粗劣選擇合適的通道。
讀取完畢圖片后,在cvtColor()函數(shù)分別輸入原始圖片矩陣,目標(biāo)圖片矩陣,和轉(zhuǎn)換標(biāo)志語,使每幅圖片轉(zhuǎn)換到不同的色彩空間通道里面。然后調(diào)用OpenCV庫里面的split 函數(shù),將轉(zhuǎn)換后的色彩空間模型分離到某個(gè)Mat 類一維數(shù)組里面。最后分別讀取Mat 類數(shù)組里面的值,通過imshow 以灰度圖的形式表現(xiàn)出來。其中OHTA 模式的色彩空間模型并沒有對應(yīng)的轉(zhuǎn)換標(biāo)志符。解決方法就是把BGR 模型分離出來的R 通道、G通道、B 通道分別存到某個(gè)Mat 類數(shù)組里面,通過公式(1)計(jì)算出I1I2I3通道,最后顯示。由于OpenCV 默認(rèn)灰度圖存儲大小為無符號字符型,即0-255 數(shù)值,這就導(dǎo)致了在計(jì)算過程中有可能溢出,為此圖片深度需要采用convertTo()函數(shù)轉(zhuǎn)化為16 位無符號字符型,最后存儲在Mat 類里面。圖4 為部分圖片分離的灰度圖。
通過分析發(fā)現(xiàn),圖2 中五幅圖片的BGR 與XYZ色彩模型果實(shí)與背景灰度深度與原圖基本一樣,并沒有很好地突出感興趣區(qū)域,果實(shí)與背景難以分辨。在OHTA 模式中,五張圖片I1通道感興趣區(qū)域與非感興趣區(qū)域比對不大,不可以很好地突出ROI。I3在某些圖片中可以比較好地區(qū)分出ROI,例如圖(a)、圖(c)、圖(d)。而對圖(b)、圖(e),果實(shí)基本與背景一樣難以分辨。在La*b*中,a*、b*雖然整體比較淺,但還是可以很好地分辨出果實(shí)與背景,不過b*通道對圖(b)、圖(c)、圖(d)、圖(e)中感興趣區(qū)域與非感興趣區(qū)域?qū)Ρ榷扰ca*通道相差較大。在HSV 色彩模型中,V 通道取決于明度,S 通道取決于飽和度,兩者都不是區(qū)分果實(shí)與背景的根本判據(jù),通過分離出來的灰度圖的確可以看出,V 通道與S 通道都不合適。同理,在YCrCb 模型中,Y通道也是表征顏色的亮度成分,也不是判斷感興趣區(qū)域與非感興趣區(qū)域的根本判據(jù),應(yīng)該舍棄。
在HSV 空間中的H 通道,YCrCb 空間中的Cr 通道、Cb 通道,La*b*空間中的a*通道以及OHTA 空間中的I2,這些通道都可以清楚地分辨出果實(shí)與背景。
深入分析,Cb 通道受外界照明影響較大,并且通過進(jìn)一步觀察,發(fā)現(xiàn)盡管同是表示紅色量的Cr 通道和a*通道,對比度上在Cr 通道內(nèi),圖像灰度值的對比度更大而在a*通道中,果實(shí)與枝干的灰度差距不大,因此可選擇的通道只有H 通道、Cr 通道、a*通道以及I2通道。
圖4 成熟龍眼在各個(gè)色彩模型中的各通道的灰度圖像
初步確定合適的通道后,還需要具體分析各個(gè)通道中的特性。通過在直方圖中標(biāo)記感興趣區(qū)域與非感興趣區(qū)域之間顯著的像素值的統(tǒng)計(jì)變化,在興趣點(diǎn)設(shè)置一個(gè)有相近特征的直方圖所構(gòu)成的“標(biāo)簽”,對數(shù)據(jù)進(jìn)行統(tǒng)計(jì),并且將統(tǒng)計(jì)值統(tǒng)計(jì)到一系列事先定義好的組距中,用于確定圖像中的興趣點(diǎn)。通過calcHist()函數(shù)計(jì)算各個(gè)通道在組距里面的像素值個(gè)數(shù)。然后調(diào)用minMaxLoc()函數(shù),此函數(shù)可以返回InputArray 類型的單通道陣列的最大值與最小值和最大值位置與最小值位置,方便后續(xù)計(jì)算。為了便于觀察,把第一個(gè)通道用藍(lán)色表示,第二個(gè)通道用綠色表示,第三個(gè)通道用紅色表示。部分圖片的直方圖如圖5 所示。
圖5 圖(a)色彩空間通道灰度分布直方圖
通過分析可知,如果要分割閾值,雖然不同圖片之間對應(yīng)的通道的分割閾值不是固定的,不過此閾值應(yīng)該在某一個(gè)范圍內(nèi)。在HSV 通道分析中,可以看到H通道幾乎都表現(xiàn)出“雙峰”,而且雙峰出現(xiàn)的范圍基本一致。S 通道、V 通道出現(xiàn)的“峰”與H 通道的基本不在同一個(gè)范圍內(nèi)。在YCrCb 各個(gè)通道中,Cr 通道普遍表現(xiàn)出“雙峰”,Cb 通道也表現(xiàn)出“峰”,Y 通道的“峰”范圍較大,所以Y 通道不適合用于閾值分割,這與之前的分析結(jié)果一致。La*b*通道也表現(xiàn)出較易分割的“峰”。OHTA 模式中,I2也基本表現(xiàn)出“峰”,但是由于“峰”較為“矮小”,如果用閾值分割的方法分割的話,分割的范圍要略大,這不利于果實(shí)與背景分離出來。所以O(shè)HTA 模式不適合用于龍眼的閾值分割。
本文對獲取的龍眼圖像利用OpenCV 中的圖像處理函數(shù)庫,首先對輸入圖像進(jìn)行模糊濾波處理,得到噪音較少的圖像,然后將各個(gè)圖片轉(zhuǎn)換為不同的色彩空間模型,再在不同的色彩空間模型下將通道分割開來,觀察各個(gè)圖像果實(shí)與背景是否易于區(qū)分,挑選出五個(gè)易于區(qū)分的通道后,經(jīng)過進(jìn)一步分析,選擇最合適的四個(gè)通道,即H 通道、Cr 通道、a*通道以及I2通道。最后繪制挑選出的模型的直方圖,通過分析直方圖,得到后續(xù)閾值分割可能需要用到的三個(gè)色彩空間模型,即HSV 模型、La*b*模型、YCrCb 模型。