吳 狄 ,龔偉東 ,黃錦華 ,朱健業(yè)
(廣州大學,廣東 廣州 511400)
目前,機器視覺技術(shù)飛速發(fā)展,在工業(yè)生產(chǎn)方面的檢測應用日趨成熟[1],同時在食品生產(chǎn)領(lǐng)域得到了較為廣泛的研究[2]。在食品生產(chǎn)過程中,由于各種原因,可能會出現(xiàn)破損、瑕疵等質(zhì)量問題。因此,在包裝前對食品進行嚴格的檢驗可以最大程度地保護消費者的合法權(quán)益[3]。且機器視覺檢測比傳統(tǒng)人工檢測具備兩個很大的優(yōu)勢:1)非接觸測量,機器視覺系統(tǒng)可以實現(xiàn)非接觸檢測,不會對被測物體造成任何損傷和改變,從而提高系統(tǒng)可靠性;2)系統(tǒng)穩(wěn)定性和連續(xù)性好,機器視覺檢測不會因工作時間長、環(huán)境惡劣而影響檢測精度和工作效率[4-6]。
為此,本文設(shè)計出了一種基于機器視覺的干魚片長度檢測方案。通過使用閾值分割、孔洞填充、特征提取等一系列算法實現(xiàn)對干魚片長度的檢測。該技術(shù)可以代替人工檢測,減少人工檢測帶來的誤差,以提高生產(chǎn)效率與準確率。
本研究要實現(xiàn)對干魚片長度的檢測,需要對所采集的干魚片圖像進行多步處理,減少或消除無用信息,以保證圖像的高質(zhì)量,從而確保檢測結(jié)果的準確性。干魚片長度檢測算法的步驟如圖1所示。
圖1 干魚片長度檢測算法流程
在獲得圖像數(shù)據(jù)后,最終目的是判斷所生產(chǎn)出的干魚片長度是否滿足生產(chǎn)要求如圖2所示,本文設(shè)計的算法核心就在于檢測干魚片區(qū)域的任意方向最小外接矩形的長度是否達到目標尺寸,如果達到,則該被測干魚片滿足生產(chǎn)要求,反之則不滿足。
圖2 采集的單個干魚片圖像
閾值分割是一種按圖像像素灰度進行分割的方法,即先將圖像的灰度劃分為不同的等級,然后使用設(shè)置灰度閾值的方法來確定目標區(qū)域[7-9]。閾值分割有兩個難點,一是在圖像分割之前,無法確定圖像分割生成區(qū)域的數(shù)目;二是閾值的確定,因為閾值的選擇直接影響分割的精度及對分割后的圖像進行描述分析的正確性[10-11]。對于灰度圖像中只有背景和目標兩類對象的情況來說,如果閾值選取過高,則容易把大量的目標誤識別為背景;如果閾值選取過低,則容易把大量的背景誤識別為目標。通常,閾值分割有三個步驟:1)確定閾值;2)將閾值與像素灰度值進行比較;3)對像素進行分類。
根據(jù)直方圖谷底確定閾值法是一種常見的閾值分割方法。若處于圖像中前景的物體內(nèi)部和圖像的背景區(qū)域的灰度值分布都較為均勻,此時該圖像的灰度直方圖將會具有明顯的雙峰,從而可以選擇兩峰之間的谷底對應的灰度值T作為圖像分割的閾值[12],T值選取如圖3所示,這種方法稱為根據(jù)直方圖谷底確定閾值法。
圖3 根據(jù)直方圖谷底確定閾值
按式(1)進行二值化,就可將目標從圖像中分割出來。
式(1)中,g(x)為閾值運算后的二值圖像。計算圖像中所有像素的灰度值,根據(jù)圖像的灰度直方圖確定閾值T,當像素點的灰度值小于T時,設(shè)置子像素點的灰度值為0;當該值大于或等于T時,設(shè)置該像素的灰度值為255。
通過閾值分割后,可以定位到大致的目標區(qū)域,但由于在實際檢測過程當中,為了保證檢測效率,我們并非是對單個干魚片進行逐個檢測,而是一次同時對多個對象進行檢測,如圖4所示。因此,需要利用算子確定給定輸入?yún)^(qū)域的連通分量,并將這些連通分量分割為各自獨立的區(qū)域,以便進行后續(xù)操作。
圖4 采集的多個干魚片圖像
另外,由于不同干魚片間存在的質(zhì)地差異,從而會導致不同干魚片所對應區(qū)域的灰度值分布的均勻程度也會有所差異。因此,在完成閾值分割后,可能會發(fā)現(xiàn)有的區(qū)域當中會存在孔洞。為了保證后續(xù)檢測的準確性,在完成區(qū)域分割后,需要對區(qū)域進行孔洞填充。
一個孔洞可以定義為由前景像素相連接的邊界所包圍的背景區(qū)域。設(shè)A表示一個集合,要對A中的孔洞進行填充,先求出A的補集AC為備用,其次所用到的結(jié)構(gòu)元素B,如圖5(c)所示。A的元素是八連通的邊界,每個邊界包圍一個背景區(qū)域(即一個孔洞),給定每一個孔洞中一個點,然后從該點開始填充整個邊界包圍的區(qū)域,下述為具體公式。
孔洞填充的過程如下:首先構(gòu)建圖像X0,如圖5(d)所示,其次利用B對X0進行膨脹運算,由于其膨脹的結(jié)果會超過孔洞的大小,于是利用上述構(gòu)造的AC,對其求交集,可將結(jié)果限制在孔洞內(nèi)(此處因為結(jié)構(gòu)元素B是一個四連通元素,每一次膨脹其邊界不會超出一個像素點,同時由于AC的四周都是一個像素的溝壑,因此求交集剛好能限制膨脹過界的像素)。開始迭代運算,當Xk=Xk-1,則算法在第k步迭代結(jié)束,最終得到X8的填充圖像,再與A求并集,可剛好填充原圖像的孔洞??锥刺畛淙^程如圖5所示。
圖5 孔洞填充過程
該檢測技術(shù)采用Halcon軟件作為測試環(huán)境,實驗驗證上述算法。首先,圖像采集需要調(diào)用Halcon庫中的read_image()算子,將由攝像頭采集到的干魚片灰度圖像讀取到界面當中,如圖6所示。為獲取目標區(qū)域,采用根據(jù)直方圖谷底確定閾值法進行閾值分割,利用threshold()算子可以提取圖像中干魚片對應的大致區(qū)域。其次,用connection()算子確定給定輸入?yún)^(qū)域的連通分量,并將這些連通分量分割為各自獨立的區(qū)域,如圖7所示。
圖6 采集的干魚片圖像
由于不同干魚片間存在質(zhì)地的差異,可以從圖7觀察到區(qū)域中存在孔洞,因此需要用fill_up()算子對區(qū)域進行孔洞填充,以便后續(xù)得到準確的目標區(qū)域。
圖7 閾值分割后的區(qū)域
完成孔洞填充后,圖像中還存在一些雜質(zhì),如圖8所示,會對后續(xù)的檢測產(chǎn)生影響,可以利用算子select_shape()來選擇有特定特征的區(qū)域,以消除雜質(zhì)。由于圖中的雜質(zhì)均為一些小面積點狀區(qū)域,此處可將面積設(shè)置為特征,同時設(shè)定合適的面積區(qū)間,從而過濾掉雜質(zhì),最終獲得如圖9所示的目標區(qū)域。
圖8 圖像中的雜質(zhì)
圖9 目標區(qū)域
由于本文設(shè)計的算法核心就在于檢測干魚片區(qū)域的任意方向最小外接矩形的長度是否達到目標長度,所以當?shù)玫饺鐖D9所示的目標區(qū)域后,需要確定圖中四個干魚片所對應區(qū)域的最小外接矩形,即包含該區(qū)域的所有矩形中面積最小的矩形。此處通過利用smallest_rectangle2()算子計算出區(qū)域?qū)淖钚⊥饨泳匦蔚拈L度、寬度及角度數(shù)據(jù)。再利用gen_rectangle2()算子自動繪制出對應的矩形,最終得到如圖10所示的區(qū)域。
圖10 目標區(qū)域?qū)淖钚⊥饨泳匦?/p>
在完成上述的流程后,可以提取出圖像中各個干魚片對應最小外接矩形的長度和寬度數(shù)據(jù)。在本文中將由軟件計算得出矩形長度的數(shù)據(jù)設(shè)為l,根據(jù)公式L=l×2×0.0373(單位:cm)可得到每個干魚片的實際長度,并與目標尺寸進行比較(在本研究中L需要滿足的范圍是:8.8 cm≤L≤9.8 cm)。最終在軟件界面顯示出結(jié)果,通過圖11可以觀察到,滿足目標長度的干魚片區(qū)域顯示為綠色(淺色),而不滿足要求的區(qū)域則顯示為紅色(深色)。
圖11 檢測結(jié)果
本文共設(shè)置100張測試圖像,其中每張圖像包含4個干魚片,實驗設(shè)定每5張圖像包含一個不滿足目標尺寸的干魚片,最終實驗結(jié)果如表1所示。
表1 實驗檢測結(jié)果
通過表1的實驗檢測結(jié)果可知,該方案的檢測準確性極高,且檢測速度很快,能夠滿足干魚片生產(chǎn)流水線的檢測要求,并取代人工檢測,在降低生產(chǎn)成本的同時,大幅度提高生產(chǎn)效率。
本研究采用機器視覺技術(shù),基于Halcon軟件平臺,設(shè)計了一種干魚片長度的檢測方法,使用機器視覺代替人工檢測。通過采用閾值分割、孔洞填充、特征提取等一系列算法實現(xiàn)了對干魚片是否滿足生產(chǎn)所要求的長度的檢測。由實驗結(jié)果可以看出,這種檢測技術(shù)算法相對簡單,且檢測準確性高,有較強的實用性,能夠減小人工檢測帶來的誤差,并提高檢測的效率。