陳 鈞,周井泉,程家文,谷文成
(南京郵電大學 電子與光學工程學院、柔性電子學院,江蘇 南京 210023)
近幾年,水果的銷量在不斷地增加,在現(xiàn)場分揀時隨著數(shù)量和種類的增加,其工作量自然而然也在加重。例如,水果超市經(jīng)常會看到由工作人員現(xiàn)場稱重、貼標簽而排起了很長的隊伍,這不僅浪費了人力資源,還浪費了消費者的時間;而且隨著大數(shù)據(jù)——智能時代的發(fā)展,以后會越來越趨向于機器智能的時代。大型超市里自助結算的機器,用機器視覺來代替人工分揀,效率會更高[1]。目前有許多的國內(nèi)外學者利用機器視覺對水果的識別、采摘、分揀、交易等環(huán)節(jié)進行了研究[2]。文獻[3]提出了一種基于多源圖像融合的綠色葡萄識別方法,首先通過中值濾波和小波變換對圖像進行去噪,再利用改進的加速穩(wěn)健特征方法提取特征點,根據(jù)特征偏移的一致性和圖像間的仿射關系完成匹配。該算法對綠葡萄的平均識別率達到92.1%。文獻[4]提出了一種紅綠藍深度相機來對荔枝進行識別。主要利用了顏色和紋理特征,設計了一種基于多尺度檢測和極大值抑制算法的方法。經(jīng)過實驗測試,該算法對綠荔枝和紅荔枝的識別率分別為89.92%和94.50%。文獻[5]使用了深度學習的卷積神經(jīng)網(wǎng)絡(convolutio-nal neural networks,CNN)對水果進行識別,還采用了基于視覺幾何組(visual geometry group,VGG)神經(jīng)網(wǎng)絡模型的遷移學習方法進行微調(diào),來減少訓練的時間,最后平均識別率可達到94.16 %。該類算法主要是基于計算機的中央處理器(central processing unit,CPU)或圖形處理器(graphic processing unit,GPU)對圖像進行處理,為了提高識別率,需要搭建深層次的網(wǎng)絡結構。文獻[6]使用了你只看一次版本3(you only look once version-3,YOLOV3)對蘋果識別定位的方法,其平均精度為87.71%。一幅圖像在GPU下檢測時間為16.69 ms,在CPU下為105.21 ms。文獻[7]采用了區(qū)域卷積神經(jīng)網(wǎng)絡(region convolutional neural networks,RCNN)中的Faster RCNN目標檢測算法,其網(wǎng)絡結構比較復雜,對綠色柑橘檢測的平均精度為85.49 %,一幅圖像的檢測時間為0.4 s。
將機器視覺應用于實際中,就需要很高的實時性,還要考慮成本,利用計算機的軟件來對圖像進行處理過程耗時過長,而利用現(xiàn)場可編程邏輯門陣列(field programmable gate array,FPGA)來實現(xiàn)圖像識別時,由于FPGA的流水線以及并行操作可以極大地加快運算速度,使得其在實時圖像處理中應用廣泛[8-10]。形狀是一種直觀的表現(xiàn),它不隨周圍環(huán)境(亮度、溫度等)的變化而變化,是一種比較穩(wěn)定的特征信息[11]。
在一個系統(tǒng)中為了能夠同時實現(xiàn)對多種水果的類型識別,就需要構建一個水果模板匹配的數(shù)據(jù)庫,識別水果的種類越多,該數(shù)據(jù)庫也就越大。并且在識別的時候會與數(shù)據(jù)庫里的模板進行匹配,得到一個最為接近的水果種類。為了能夠達到實時、高效,同時又能對多種水果進行識別,該文設計了一種多模板匹配的算法,并用FPGA硬件的方式實現(xiàn)了該算法。該算法的關鍵在于對圖像形狀特征的提取、模板數(shù)據(jù)庫的構建以及類型匹配與識別。
物體的形狀特征是根據(jù)物體的邊緣來體現(xiàn)的,對邊緣像素點進行提取與處理時,在一定程度上反映了物體的形狀。這里需要先對圖像進行灰度、濾波、邊緣化等預處理,采用邊緣梯度方向直方圖[12]的方法進行特征提取,對每個邊緣點的梯度方向按照劃分的區(qū)間進行統(tǒng)計,就會得到一組反映物體形狀的特征向量。
根據(jù)要識別物體形狀的不同,特征提取的情況有兩種,對于那些“圓潤”的物體可以采用第一種方法,而對于那些“棱角”分明的物體可以采用第二種方法。具體的流程如圖1所示。從圖1可以看出,第二種方法是在第一種方法的邊緣檢測前對圖像進行了二值化、腐蝕、膨脹的操作[13]。兩種方法各有各的優(yōu)點,適用于不同物體的檢測。第一種方法對圖像像素點的處理較少,后面得到的形狀特征的數(shù)據(jù)還保留了一定的圖像灰度特征,識別形狀大致相同但顏色不同的物體時更加具有區(qū)分度;而第二種方法增加的一些操作目的是為了得到更加純粹的邊緣形狀特征,由于一些物體存在紋理特征[14],經(jīng)過Sobel邊緣化得到的圖像會有紋理處像素點的摻雜,這不僅對Sobel邊緣化要求高,而且這是很難避免的。而增加腐蝕、膨脹操作后能有效地消除這一影響。

圖1 形狀特征提取流程
大部分水果的邊緣形狀都偏向于圓潤,不像正方形、三角形、星形那樣棱角分明,測量多種水果的模板數(shù)據(jù)時就很難有區(qū)分度,物體稍微旋轉就會影響識別的準確率,所以采用了第一種方法對水果進行識別。而第二種方法更適合那些人為的控制生長形狀,具有棱角的水果識別。
1.1.1 灰度化
采集到的是彩色圖像,需要對其進行灰度化,將其轉化為YCbCr類型,然后提取Y分量即可得到像素點的灰度值,轉化關系如式(1)。
Y=0.183R+0.614G+0.062B+16
(1)
式中,R代表的是圖像的紅色分量,G代表的是圖像的綠色分量,B代表的是圖像的藍色分量,Y為灰度值。
1.1.2 均值濾波
圖像在采集的過程中會產(chǎn)生許多噪聲,對后面的圖像處理會產(chǎn)生影響,這就需要濾波來消除噪聲。均值濾波法是一種線性低通濾波的方法,原理是通過求某一塊鄰域內(nèi)像素的平均值來削弱噪聲。設計采用的是3×3的模板,求取3×3鄰域內(nèi)像素點的平均值。
1.1.3 Sobel邊緣化
圖像的邊緣定義是通過灰度值的變化程度來尋找邊緣。這種灰度的變化程度是通過函數(shù)的導數(shù)來反映的,從數(shù)學上來看一階導數(shù)的極大值和二階導數(shù)過零點的就是亮度值變化最大的地方,這些導數(shù)就是圖像的邊緣,然后再設置適當?shù)拈撝?將這些點集合起來構成邊緣[15]。Sobel算子有兩組3×3的矩陣,如式(2),A表示水平方向,B表示垂直方向。


(2)
邊緣檢測的方法是將圖像中每個點都用Sobel算子做卷積,如式(3),卷積其實是進行加權求和的過程。用式(4)、式(5)計算x和y的亮度差分近似值,其中f(x,y)是圖像在(x,y)點的灰度值[16]。
(3)
Gx=f(x+1,y-1)+2f(x+1,y)+
f(x+1,y+1)-f(x-1,y-1)-
2f(x-1,y)-f(x-1,y+1)
(4)
Gy=f(x-1,y-1)+2f(x,y-1)+
f(x+1,y-1)-f(x-1,y+1)-
2f(x,y+1)-f(x+1,y+1)
(5)
將得到的Gx和Gy先求平方和再開方,如式(6),得到一個G,給G設一個閾值,大于這個閾值的點即為邊緣點。同時也得到了邊緣點的梯度方向θ,如式(7)。由于arctan函數(shù)是一個遞增的函數(shù),在硬件里很難實現(xiàn)。對其進行改進,根據(jù)映射的一一對應性,可直接用Gy/Gx來代替θ,后面對梯度方向的統(tǒng)計其實也就是對Gy/Gx的值進行統(tǒng)計。
(6)
θ=arctan(Gy/Gx)
(7)
1.1.4 梯度統(tǒng)計
根據(jù)上述得到的邊緣梯度方向θ的范圍是在0°~90°(Gx和Gy為正),對其進行劃分,統(tǒng)計每一個方向區(qū)間內(nèi)邊緣像素點的個數(shù)即可構成邊緣梯度方向直方圖,利用寄存器累加來實現(xiàn),如式(8)所示。其中i表示劃分的某一區(qū)間,T[i]表示該區(qū)間邊緣點的個數(shù)。這樣就構成了一組特征向量。區(qū)間劃分的越細,得到的特征向量也就越明顯,但對圖像的旋轉也會有影響。
T[i]=T[i]+1
(8)
1.1.5 歸一化
各個區(qū)間經(jīng)統(tǒng)計得到的邊緣點個數(shù)不易受物體平移的影響,但會受到圖像放大、縮小的影響,這就需要進行歸一化處理。
通過歸一化處理后,得到了最終的特征向量。提取出所需識別水果種類的所有特征向量,然后將所有的特征向量構成了一個多模板的數(shù)據(jù)庫。考慮到物體的旋轉問題,由于圓形的水果(橘子、蘋果)對最終得到的特征向量影響不大,而像香蕉、火龍果等這種不規(guī)則的物體可以多生成幾個方向的特征向量,在這幾個方向上輕微的旋轉對特征向量的影響很小。
模板數(shù)據(jù)庫將用于多模板匹配算法的分類與識別過程,算法模塊的框圖如圖2所示。

圖2 多模板匹配的算法框圖
對要識別的水果進行特征提取,得到特征向量,然后與數(shù)據(jù)庫里的模板數(shù)據(jù)進行匹配,通過求差再平方的方法得到一個距離。如式(9)中,ai為待測的某個分量,bi為模板對應的分量,n為特征向量的維數(shù)。距離越小,與該模板越接近,則說明待測水果與距離最小的模板最為匹配,從而歸類為相應的種類。
(9)
算法實現(xiàn)的原理如圖3所示。主控芯片PGL22G從OV5640攝像頭采集到的圖像經(jīng)過處理,使輸入圖像的格式為RGB彩色圖像;輸入時鐘是從晶振頻率為50 MHz通過分頻器來產(chǎn)生65 MHz的CLK;還有一些輸入的復位信號(rst)和控制信號,如行同步信號(hs)、場同步信號(vs)等,來實現(xiàn)復位功能以及同步控制邏輯。灰度化時存在小數(shù)部分,而verilog硬件描述語言不能表示小數(shù),需要先對其進行放大的操作,后面再對結果進行縮小。按照固定的倍數(shù)進行放縮時,為了節(jié)省資源可用移位操作來代替乘除操作。

圖3 算法實現(xiàn)原理
由于采用的是流水線結構,濾波時3×3的矩陣實現(xiàn)就需要先緩存兩行圖像像素點的灰度值,設計行緩存的模塊。Sobel邊緣化的實現(xiàn)主要包括3×3的矩陣模塊以及卷積求和的模塊,而3×3的矩陣模塊在均值濾波模塊中已經(jīng)實現(xiàn)過,可以直接調(diào)用。而卷積求和時平方和過后也不需要進行開方處理,直接將邊界閾值設為平方時的閾值。
梯度統(tǒng)計模塊的實現(xiàn)主要包括除法器模塊以及統(tǒng)計模塊設計,從θ的范圍可以倒推出Gy/Gx的值會存在小數(shù)部分,此時就需要將Gy的值進行移位放大;根據(jù)統(tǒng)計提取出一組特征向量,整個過程是流水線操作,統(tǒng)計時可以用寄存器來暫存統(tǒng)計值,通過時序來控制寄存器的輸出和清零。實時圖像在每一幀的時候給寄存器輸出一次,然后清零,統(tǒng)計下一幀的數(shù)據(jù)。
歸一化的實現(xiàn)主要通過調(diào)用之前的除法器,需要統(tǒng)計出邊緣像素點的總數(shù)以及每個區(qū)間像素點的總數(shù)作為除法器的輸入,考慮到流水線結構以及節(jié)省資源,這里設計時通過時序來控制。利用寄存器的延時將所需的數(shù)據(jù)送入同一個除法器里,這樣做大大節(jié)省了資源。
匹配與分類的過程主要是將特征向量與模板數(shù)據(jù)庫的模板進行求差再平方,尋找一個最小距離,根據(jù)距離來識別分類。高清晰度多媒體接口(high definition multimedia interface,HDMI)的使用還需要設計解碼器的模板,最后就可以將識別的結果通過HDMI顯示出來。
實驗所使用的硬件開發(fā)平臺為紫光的PGL22G-6MBG324的FPGA開發(fā)板。將待測物體放在黑色背景布上,通過OV5640攝像頭將采集到的圖像數(shù)據(jù)經(jīng)過處理傳入雙倍數(shù)據(jù)流的同步動態(tài)隨機存取器(double data rate synchronous dynamic random-access memory,DDR SDRAM)中,然后再從DDR SDRAM里讀數(shù)據(jù),將緩沖的數(shù)據(jù)傳入多模板算法進行處理,最后將處理好的數(shù)據(jù)輸出至HDMI,用來顯示處理后的圖像以及識別的結果。
整個系統(tǒng)的框架如圖4所示,系統(tǒng)的資源使用情況如表1所示。

圖4 硬件測試的系統(tǒng)架構

表1 系統(tǒng)資源的占用
測試的樣本數(shù)據(jù)集是采用實際的水果模型,每種所需識別的水果模型各20個,選取每種水果的其中一個來構建模板數(shù)據(jù)庫,其余的水果模型都用于測試過程。搭建好實際的測試平臺,根據(jù)不同的條件來進行測試。
3.2.1 實時性
該系統(tǒng)中,梯度方向統(tǒng)計模塊采用了一幀統(tǒng)計數(shù)據(jù)清零的方式,圖像輸出分辨率為1 024×768,而時鐘的頻率為65 MHz,且一個時鐘周期處理一個像素點,經(jīng)計算約為12.10 ms完成對一種水果的識別。并且還可以加快時鐘的頻率來進一步提高速度,比利用軟件平臺的方式進行識別的速度大大提升。
3.2.2 識別率
在室內(nèi)的環(huán)境下,一個系統(tǒng)里同時測試了如表1所示的幾種水果的識別率,考慮了實際應用情景,每種水果擺放在平臺的不同位置,所以實現(xiàn)對目標進行了平移,且對每種水果和每種條件都進行了400次的測試。模板數(shù)據(jù)庫的組成是由每種水果的水平和垂直方向的特征向量搭建的,這里的任意位置是指基于這兩個大致的方向隨意擺放的位置。從表2中可以看出,這些水果按照固定位置擺放時,識別準確率可達到98%以上。考慮平移、放縮、微旋的情況下會有所下降,而且還與水果的種類有關。香蕉因其形狀獨特,旋轉的影響會比較大。

表2 室內(nèi)條件下水果的識別率 %
3.2.3 性能對比
對以上四種水果在任意位置的識別率取平均準確率并與文獻[17]中提供的多種方法對水果檢測的性能進行比較,如表3所示。SSD、YOLO系列是對目標檢測與分類是同時進行的算法。CenterNet是一種中心網(wǎng)絡算法。

表3 不同方法的性能
從表3中可以看出,利用FPGA實現(xiàn)的多模板匹配算法相比于其他方法具有很高的實時性,在任意位置時的平均準確率也能達到91%以上。
3.2.4 穩(wěn)定性
對該算法的穩(wěn)定性測試,主要是分析光照、水果大小、位置的平移以及微旋對識別率的影響。改變光照的強度,這里用光通量來表示。在陰暗環(huán)境下,增加了色溫為6 500 K,光通量為100 lm、150 lm以及210 lm的光源。為了更好地測試光照的影響,模板數(shù)據(jù)庫的建立采用了150 lm的光照條件,然后通過增加和減少光通量的條件測試了下列幾種水果的識別準確率,如表4所示。

表4 不同光照下水果的識別率 %
從表4可以看出,減少光通量要比增加光通量的識別率更加穩(wěn)定。這是因為增加光通量,物體的邊緣像素點的數(shù)量會大大增加,從而與模板的特征向量差距會拉大,而且還與水果本身的顏色有關。黃色的香蕉自身亮度比較大,當光照增強時,對其影響較小;而這里對于青蘋果,對其表面增加光照,會使其表面變得很亮,差距就會變大,而選用紅蘋果時影響會變小。
識別率隨同種水果的大小或距離攝像頭的遠近位置的變化如表5所示,這里采用了光通量為150 lm,距離為50 cm的條件。改變攝像頭與物體的距離也能模擬水果大小的變化情況。可以看出識別率受物體的放縮影響較小。

表5 不同距離下水果的識別率 %
改變水果的微旋轉角度,光照條件還是采用光通量為150 lm的條件,測試了下列幾種水果的識別準確率,如表6所示。

表6 微旋下水果的識別率 %
從表6中可以看出,微旋對識別率的影響比較小,而且主要是和水果種類相關,像蘋果這種圓形不用考慮旋轉的影響,而像芒果和香蕉這種形狀旋轉會直接影響其識別率,這就需要在模板數(shù)據(jù)庫里多增加這些水果不同方向的特征向量。
該文提出了一種對多種水果進行種類識別的多模板匹配算法。用Gy/Gx來代替θ對邊緣梯度方向進行統(tǒng)計,從而提取出其形狀特征。構建了一個多模板的數(shù)據(jù)庫,再根據(jù)最小距離來匹配,完成了對多種水果的識別與分類。通過FPGA實現(xiàn)了這一算法,與一些神經(jīng)網(wǎng)絡算法相比具有更高的實時性,并且還可以改變時鐘頻率來進一步提升速度。對四種水果進行了測試,能夠在固定位置的識別率達到98 %以上,并且受光照、平移、縮放、微旋的影響較小。