何秋蓉,何子亮,古萬榮,鐘南,4,孫遠明,4
(1.華南農業(yè)大學食品學院,廣東廣州 510642)
(2.華南農業(yè)大學工程學院,廣東廣州 510642)(3.華南農業(yè)大學數學與信息學院,廣東廣州 510642)
(4.廣東省食品質量安全重點實驗室,廣東廣州 510642)
隨著計算機技術的發(fā)展,計算機視覺技術在農業(yè)中的應用越來越重要。但對農產品的檢測,大多數仍然依賴于化學檢測,大多數外觀檢測仍然依賴于人工方式。在我國,豬肉是主要的食用肉類,是人民群眾最常食用的肉類之一。五花肉是豬肉腹部和腹肋部位肥瘦相間的肉,深受人們群眾喜愛。伴隨著人們生活質量的日益提升,人們對食物的要求也越來越高。但是根據每個人口味的不同,對五花肉的肥瘦程度有不同的喜好。因此本文嘗試測定五花肉中瘦肉占比及瘦肉條數,為將來開發(fā)五花肉綜合品質檢測系統(tǒng)打下基礎。而計算機視覺技術作為一種近年來興起的無損檢測技術,本身帶有高效,客觀,準確等優(yōu)點,在許多行業(yè)之中已經被廣泛使用,因此本研究將使用計算機視覺技術對豬肉的瘦肉占比及瘦肉條數進行測定。
使用計算機視覺技術對肉類品質進行檢測在國內外已經早有先例,且技術也越來成熟,大概從 20世紀 90年代開始,該技術已經被應用在肉類的檢測上。尤其是近幾年,隨著計算機應用的越來越廣泛,該類工作越發(fā)引起了相關的注意。2010年伍學千對五花肉圖像提取了瘦肉總條數、顏色和肥瘦均勻性等三個特征指標。其中,利用圖像處理得到的瘦肉總條數與實際條數之間的吻合度88.29%;對顏色指標提取了R,G,B分量的均值,判定的正確率87.88%。肥瘦均勻性指標,判定的正確率83.33%[1]。2012年趙松瑋等人建立豬肉瘦肉率和背膘厚度在線檢測系統(tǒng),利用圖像處理技術設計屠宰線上豬胭體無損等級評定系統(tǒng),實現(xiàn)對豬肉品質的在線分級,證明了豬胭體無損等級評定系統(tǒng)對于實時檢測評估豬肉品質具有很大的潛力[2]。2015年曾山等人以基于高光譜圖像技術的冷鮮肉、解凍肉和變質肉的分類為研究對象,針對特征維數過高的問題,構建了一種基于流形模糊聚類算法的分類模型。實驗得出,該模型能準確地區(qū)分冷鮮肉、解凍肉和變質肉[3]。文獻4利用提取豬肉顏色,對豬肉新鮮度與顏色空間進行相關性研究,采用BP神經網絡和RBF神經網絡方法對豬肉新鮮度進行模式識別,并比較模式識別效果,建立一種基于機器視覺的豬肉新鮮度無損檢測方法[4]。文獻5使用手機拍攝豬肉,利用Otsu算法分割出圖像中的豬肉部分和背景,然后用顏色因子|R-G|+|R-B|的值對圖像進行彩色分層,計算出顏色區(qū)域比值,建立了用豬肉的色澤、黏度、彈性、氨氣、硫化氫、表面菌落總數和顏色區(qū)域比等7個特征為輸入的BP網絡分類模型。試驗結果表明,該方法能夠較好地對豬肉新鮮度進行檢測[5]。文獻6和7使用了光譜圖像技術對肉品非接觸檢測方法,借助光譜圖像中所包含的反映待測對象特征的空間分布信息與光譜特征信息,對肉品品質的多個指標(含水率、水活性、揮發(fā)性鹽基氮含量、肉色、微生物計數、酸價、pH值)進行分別或綜合評估,評估結果按照具體指標在被測目標內的空間分布情況以圖像的方式給出[6~8]。
此外,如利用圖像識別技術進行食品種類鑒別和食品安全把關[9~11],利用深度學習方法對肉質和肉種類進行區(qū)分研究[12~15],也有些文獻專門針對瘦肉的品質進行評價和快速區(qū)分研究[16~19],還有非常多新近工作對相關相近研究熱點進行研究[20]。根據本文調研,雖然近似研究和相關技術手段層出不窮,但國內外尚比較缺乏針對五花肉的肥瘦識別和計數的相關研究。因此,本文在應用方向上,即對五花肉進行肥瘦識別和計數研究方面做了初步嘗試。
本文的處理流程如圖1所示。
圖1 肥瘦識別的處理流程Fig.1 Recognition process of fat and lean meat
由于手機拍攝出來的豬肉圖像的像素較大,達1280×960像素。而根據MATLAB處理圖像正是通過像素點處理的,像素點過多,運行時間會很長??紤]到實際情況,所以對圖像進行按比例縮放0.5倍。這樣既可以保留大部分的圖像特征,又可以加快程序運行。本研究中使用的圖像縮放算法為最近鄰插值法。就是將目標圖像各點的像素值設為源圖像中與其最近的點。在待求象素的四鄰象素中,將距離待求象素最近的鄰象素灰度賦給待求象素[8]。
因為在圖像的采集過程中,往往受環(huán)境的影響(如豬肉身上有殘留污漬)導致圖像中存在噪聲污染。如果忽視這些噪聲會對后期的識別過程造成不可估量的影響,因此必須先消除。目前常用的有均值濾波,中值濾波,高斯濾波三種濾波方式。
均值濾波是利用卷積運算,對圖像鄰域進行灰度級平均處理,能對顆粒噪聲進行有效消除。該算法表示對于圖像的每個點(x, y),取其領域S,取其鄰域內所有像素灰度值的平均值所為該點的灰度值。雖然該方法能有效消除雜點噪聲,但會使區(qū)域的邊界模糊,并不適合該研究。
高斯濾波原理類似均值濾波,但對象點的領域內不同點采取不同的權值,越接近對象點,權值則越高,如3×3的高斯模板:
這種方式達到圖像模糊的同時,可以更多地保存圖像的細節(jié)。與均值濾波相比,高斯濾波平滑效率低,消除顆粒噪聲效果不如均值濾波,但可以更好地保存圖像的總體特征。
相對于前兩種線性濾波,中值濾波是一種非線性濾波,它是對象點鄰域內奇數個像素點灰度值的中間值作為該點的灰度值,這種濾波方式不僅對孤立奇點效果顯著,而且對密集程度較大的噪聲也有明顯效果,并相對與前兩種濾波,它能更好保護圖像邊緣,故本研究選擇該方式消除噪聲。
圖2 RGB模型的直方圖Fig.2 Histogram of RGB model
采集的五花肉圖像大概分為背景區(qū)域和五花肉目標區(qū)域,為了防止背景區(qū)域對圖像特征提取的影響,需先分離圖像的黑色背景。由于新鮮豬肉多顯鮮紅色,故可考慮在圖像的RGB模型中的R基色進行背景分離。
從下面圖2的R,G,B直方圖中可以看出,在R基色中相對于其它基色雙峰現(xiàn)象更顯著,而直方圖是一幅圖像中各像素灰度值出現(xiàn)次數或頻數的統(tǒng)計結果,它反映該圖像中不同灰度值出現(xiàn)的次數或頻數,雙峰現(xiàn)象更明顯則代表R計算較其他兩種基色在某一灰度值具有更高的頻數。由于R基色圖層直方圖中雙峰現(xiàn)象比較明顯,因此可以在圖像R基色中使用最大類間方差自適應閾值法(OTSU)進行閾值分割,從而達到背景分離的目的。該算法是在圖像灰度直方圖的基礎上根據最小二乘法的原理推導出來的,是具有統(tǒng)計意義的最佳分割。它的基本原理是根據得到的最佳閾值把圖像灰度值分割成兩部分,讓兩者之間的方差最大,該算法的具體過程為:
(1)設灰度級為i在分辨率為M*N的圖像中的像素個數f(i),則第i級灰度出現(xiàn)的概率為:
由于 R基色圖像是 8位的灰度值圖像,所以i=0,1,……255,且:
(2)設一灰度閾值k,根據閾值k將圖像灰度級分為兩類,即背景C0和目標豬肉區(qū)域C1,其中背景C0的灰度級為0~k,目標C1的灰度級為k~255。則背景C0部分出現(xiàn)的概率為:
目標C1部分出現(xiàn)的概率為:
其中:S0+S1=1。
(3)背景C0的平均灰度值為:
目標C1的平均灰度值為:
而圖像的總平均灰度值為:
(4)圖像中背景和目標的類間方差為Q(k)=S0(U-U0)2+S1(U-U1)2,令K的取值從0~255間變化,計算不同K值情況下的方差Q值,使得Q最大的K值即為最佳閾值。在MATLAB中有封裝好的OTSU函數的調用,為K=graythresh(image);其中返回值K即為最佳閾值,括號內為輸入圖像,得到K值后再二值化圖像即可,代碼為 image=im2bw(image,K),其中要輸入的第一個參數為要二值化的圖像,第二個參數為分割閾值,返回值為二值化后的圖像。實驗效果如圖3所示,其中的白色區(qū)域即為五花肉區(qū)域。
圖3 豬肉圖像背景分離后的效果圖Fig.3 Image of pork image after background separation
品質優(yōu)秀的五花肉通常肥瘦適中,半肥半瘦則最佳,即瘦肉占比45%~55%。因此需要對背景分離后得到的白色目標區(qū)域內再進行閾值分割,分離出瘦肉肥肉區(qū)域。但五花肉瘦肉區(qū)域中通常有很多“精夾肥”,這些并不算是肥肉,所以計算瘦肉占比前需對圖像進行孔洞填充。
因為在不同光照強度下原始圖像中肥肉與瘦肉中的顏色差別不同,很多時候肥瘦差別不夠明顯,因此需在肥瘦分離前增大瘦肉與肥肉之間的對比度。本研究中使用對比度自適應直方圖算法來增大兩者之間的對比度。自適應直方圖均衡化是用來提升圖像的對比度的一種計算機圖像處理技術。與常用來圖像增強的直方圖均衡的算法不同,自適應直方圖均衡化算法通過計算圖像的局部直方圖,然后重新分布亮度來改變圖像對比度。普通的直方圖均衡算法對于整幅圖像的像素使用相同的直方圖變換,對于那些像素值分布比較均衡的圖像來說,算法的效果很好。然而,如果圖像中包括明顯比圖像其它區(qū)域暗或者亮的部分,在這些部分的對比度將得不到有效的增強。但自適應直方圖均衡化算法則可以通過對局部區(qū)域執(zhí)行響應的直方圖均衡來改變上述問題。因此,該算法更適合于改進圖像的局部對比度以及獲得更多的圖像細節(jié)。
圖像增強后肥瘦區(qū)域對比度則比較明顯,因此可以對目標區(qū)域再用一次OTSU閾值分割法將五花肉的肥瘦分離出來。但由于OTSU算法函數的對象是整幅圖像,而此時只需要對目標區(qū)域(即五花肉區(qū)域)計算最佳閾值,并不包含背景區(qū)域,所以在這里需要修改OTSU的算法,具體內容如下所示:
(1)設灰度級為i在分辨率為M*N的圖像中的像素個數f(i),但此時i不包含0,設圖像中灰度值為0的像素數為L,則第i級灰度出現(xiàn)的概率為:
其中:i=1,2,……255,且:
(2)設一灰度閾值k,根據閾值k將圖像灰度級分為兩類,即瘦肉區(qū)域C0和肥肉區(qū)域C1,其中瘦肉C0的灰度級為1~k,肥肉C1的灰度級為k~255。則背景C0部分出現(xiàn)的概率為:
目標C1部分出現(xiàn)的概率為:
其中:S0+S1=1。
(3)瘦肉區(qū)域C0的平均灰度值為:
肥瘦區(qū)域C1的平均灰度值為:
圖像的總平均灰度值為:
(4)圖像中瘦肉和肥肉的類間方差為Q(k)=S0(U-U0)2+S1(U-U1)2,令K的取值從1~255間變化,計算不同K值情況下的方差Q值,使得Q最大的K值即為最佳閾值。
在MATLAB中沒有封裝好的局域的OTSU函數,因此本研究中在修改了OSTU的函數的代碼并將其重新定義了一個函數,修改的代碼為 num_bins=256;counts=imhist(I, num_bins);counts(1,1)=0;其中counts(1,1)=0是修改的部分,imhist(I, num_bins)函數是計算和顯示圖像I的直方圖,返回值是一個數組,num_bins為指定的灰度級數目,而在這里只需把返回值counts數組里的第一個數(即灰度值為0)的個數清零,即可實現(xiàn)在不包含灰度值為 0的像素下運用OTSU算法計算最佳閾值,結果如圖4所示,其中灰色區(qū)域為瘦肉,白色為肥肉。
圖4 肥瘦分離的過程和效果圖Fig.4 The process and effect of fat and lean separation
由于五花肉最上部分的豬皮呈紅色的部分在肥瘦分離時會被認為是瘦肉,且豬肉的邊界部分通常比較暗而也被誤認為是瘦肉,因此需要膨脹背景把這些錯誤的部分大致消除,形態(tài)學中膨脹是指用一個結構元素掃描圖像中的每一個像素,用結構元素中的每一個像素與其覆蓋的像素進行“與”操作,若都為 0,則該像素為0,否則為1。但由于膨脹只能用于二值圖像,因此膨脹前需把灰色瘦肉區(qū)域置成白色并把圖像轉成二值圖像,背景膨脹后再把其中的瘦肉區(qū)域還原成灰色,處理效果如圖5所示。
圖5 豬肉圖像膨脹處理的效果Fig.5 The process effect of image inflation
五花肉肥瘦分離后灰色瘦肉區(qū)域內有許多白色孔洞,一部分是閾值分割的誤差,另一部分是瘦肉中的“精夾肥”,無論哪一種,都是瘦肉區(qū)域的一部分,需對其進行填充。但由于 MATLAB中孔洞填充算法的作用對象也是二值圖像,因此在進行孔洞填充前需把灰色瘦肉區(qū)域置成白色,將白色肥肉區(qū)域置成黑色,再二值化圖像,然后進行孔洞填充,處理效果如圖 6所示。
圖6 豬肉圖像二值化孔洞填充效果Fig.6 The effect of pork image binarization
孔洞填充后,從圖6中可以看出,圖像中仍殘有一些落單的瘦肉(白色)區(qū)域,這些多為閾值分割的誤差或者豬皮中的深色區(qū)域,需在計算瘦肉占比前將其除去。由于這些多為小面積的落單區(qū)域,因此本研究中先計算每個瘦肉區(qū)域的面積,若單個瘦肉區(qū)域面積少于目標區(qū)域(五花肉區(qū)域)面積的六十分之一,則把這個區(qū)域內所有像素點的灰度值置成 0,運行結果如圖4所示。然后需把圖像中的肥肉區(qū)域還原,本研究中將圖6(b)中的白色瘦肉區(qū)域還原成灰色,再與圖4(c)作對比,若圖像中任意像素點屬于圖 4(c)中的五花肉區(qū)域,卻不屬于圖6(b)中的白色區(qū)域,則該像素點是屬于肥肉區(qū)域,并把該點的灰度值置成255(即白色),處理效果如圖7所示。
圖7 綜合計算的效果Fig.7 The overall effect
在除去殘余灰色區(qū)域后,瘦肉區(qū)域即是圖5中的灰色區(qū)域,此時只要遍歷整幅圖像,算出灰色區(qū)域的像素點個數,再計算圖5的五花肉區(qū)域的像素點個數,設灰色像素點個數為b,五花肉區(qū)域像素點個數為m,則瘦肉占比p=b/m,在此圖中,由MATLAB算出結果為0.44,即該五花肉大致有44%為瘦肉。
一塊優(yōu)質的五花肉通常由五層組成,第一層為豬皮,第二層為豬油,第三次為薄薄的豬瘦肉,第四次為豬油,第五層為深層的豬瘦肉。所以好的五花肉的瘦肉條數一般為兩條,因此可提取瘦肉條數特征從而判斷五花肉品質。在本研究中,我們通過計算肥瘦分離并填充后的圖像的灰色連通區(qū)域個數,即可算出五花肉中瘦肉條數,但在此之前需對圖像灰色區(qū)域進行閉操作,保證同一瘦肉區(qū)域間的灰色區(qū)域連通。
(1)由于光照不均勻等誤差可能會導致肥瘦分離后圖像中某些灰色區(qū)域并沒有連通在一起,如圖 8,所以在計算瘦肉條數前,需對圖像進行閉操作,保證其連通,閉操作在數學上是先膨脹后腐蝕的結果,膨脹的原理上文已經介紹過了,而腐蝕的原理則與膨脹相反,用一個結構元素掃描圖像中的每一個像素,用結構元素中的每一個像素與其覆蓋的像素做“與”操作,若都為1,則該像素為1,否則為0。只要有一個點不是白點,那么該點就被腐蝕成黑點。閉操作能填充物體內細小空洞,連接鄰近物體和平滑邊界,因此它能連通相近的灰色區(qū)域。閉操作前如圖8(a)所示,圖中白色區(qū)域為瘦肉區(qū)域,閉操作后如圖8(b)所示,可見相近瘦肉區(qū)域已經連通起來。
閉操作后,瘦肉條數即為圖8(b)中白色區(qū)域個數,為防止有誤差影響,因此在計算白色連通區(qū)域個數時需加判斷,當白色連通區(qū)域面積大于一定值時才認為是一個瘦肉條,經過反復實驗,最終閾值定為目標區(qū)域面積的三十分之一,然后標記出每一個瘦肉條,如圖9所示,其中每一個紅色方框代表一個瘦肉條。
圖8 閉操作前后的圖像Fig.8 The image before and after processing
圖9 瘦肉標記Fig.9 Lean indicator
由圖9可知,這個樣例圖像共有2條瘦肉。
按照上文方法處理2343個樣本,得到2343個肥瘦分離圖像,并與我們感官評定相比較即人工標注作為本文實驗的金標準,并根據難易程度,分為3組,分別是困難組(531張)、普通組(1169張)和容易組(643張)。本論文還仿真了ChengJin Du等[7]人(實驗中簡稱Du方法),伍學千等[1]人的方法(實驗中簡稱伍方法),趙松瑋等人的方法[2](實驗中簡稱趙方法)。實驗結果如下表1所示。
表1 肥瘦自動識別的實驗結果對比Table 1 The comparison of recognition fat and lean
通過分析實驗結果可知:
(1)本文方法在困難組和普通組獲得比較好的優(yōu)勢。說明本文通過基于最大類間方差自適應閾值可以較好的區(qū)分肥瘦區(qū)域,符合人類人工判斷預期。
(2)本文方法在容易組的識別準確度沒有獲得最好結果,但容易組普遍都已經接近滿分。
(3)通過三個不同的分組,可以看出,困難組的識別準確率差距較大,普通組次之,容易組差距很小。
通過對圖像本身進行觀測和分析,本文還發(fā)現(xiàn),采集圖像時反光或者光照強度過大會導致肥瘦分離出現(xiàn)錯誤,另外豬皮太紅也會導致閾值分割時閾值產生偏差。
本文使用視覺圖像技術對五花肉的瘦肉占比與瘦肉條數進行測定。提出了適用于分離五花肉中瘦肉與肥肉的方法,該方法先采用有限對比度自適應直方圖函數來增強瘦肉區(qū)域,使五花肉圖像中的肥肉與瘦肉區(qū)域對比度加大,接著使用最大類間方差自適應閾值法對圖像的目標區(qū)域中的肥肉與瘦肉進行分割。接著使用孔洞填充算法對瘦肉區(qū)域中的孔洞進行填補,然后根據連通域面積除去多余的瘦肉區(qū)域。通過對比與分析該方法能有效地分離出五花肉的瘦肉與肥肉區(qū)域,從而為后面的特征提取操作提供了可靠得而保障。對五花肉圖像提取了瘦肉占比與瘦肉條數兩個特征。瘦肉占比是通過計算圖像中瘦肉區(qū)域的面積與目標區(qū)域的總面積的比例得到的,實驗結果表明,本文方法比傳統(tǒng)方法具有更高的準確度。在將來的工作中,為了提高特征自動識別和學習能力,將嘗試使用 GPU進行深度學習模型訓練,進一步提高識別準確率。