閆偉偉,孫宏昌,張 廷,張樹剛,田東閣,蔣永翔
(1.天津職業(yè)技術師范大學機器人及智能裝備研究所,天津 300222;2.呼倫貝爾職業(yè)技術學院,呼倫貝爾 021000;3.天津亞東智鑫科技有限公司,天津 300380)
塑料編織袋廣泛應用于各行各業(yè),因其具有較好的拉伸性能,可承載并有效保護質量較大的產品,滿足了消費者的使用需求。目前,傳統(tǒng)的編織布原料破損檢測主要依靠人工識別[1],檢測效率低下、誤判率高,檢測人員長期視力集中易導致眼睛疲勞以及引發(fā)職業(yè)病。因此,在編織布檢測流程中應用機器視覺檢測技術十分必要。
破損編織布圖像中背景與缺陷邊緣、缺陷與缺陷邊緣特征是檢測破損的關鍵特征[2],因此在機器視覺技術中通常會引入圖像邊緣檢測技術。在圖像邊緣檢測中常用的一階邊緣檢測算子有:Roberts 算子[3]、Prewitt 算子[4]、Sobel 算子[5]、Scharr 算子[6]等;二階的邊緣檢測算子有:Laplacian 算子[7]、LoG 算子[8]、Canny 算子[9]等,這些算子的原理都是將圖像與特定大小的模板進行卷積處理。上述算法簡單,實用性強,其中Canny 算子因其檢測精度高、信噪比高等優(yōu)勢在圖像處理領域中應用廣泛。但由于Canny 算子中的高低閾值需要人為設定,過高的高閾值會導致邊緣斷裂,出現邊界不連續(xù)的情況而丟失邊緣細節(jié)信息;反之,過低的低閾值會出現偽邊緣。當圖像光照情況發(fā)生變化時,圖像整體灰度分布隨之變化,導致高低閾值需進行相應地修改,因此傳統(tǒng)Canny 算子在閾值的確定上缺乏實時性和自適應性[10]。針對上述問題,文獻[11]提出了結合雙重Otsu 方法進行高低閾值確定的算法,文獻[12]使用迭代閾值分割法和改進Otsu 算法以選取高低閾值,實現邊緣檢測連接,文獻[13]利用梯度直方圖選取閾值。以上方法雖然提高了邊緣提取的檢測精度,但并沒有改善算法的自適應性。本文提出一種改進Canny 算法,旨在提高Canny 算子在織物疵點邊緣檢測中的準確性和自適應性。
傳統(tǒng)的Canny 邊緣檢測算法最初由John F.Canny提出,并設定了信噪比準則、定位精度準則、單一邊緣響應準則[14]來提高邊緣檢測精度。為滿足這3 條準則,John F.Canny 在一階微分算子的基礎上,增加了2 項改進,即非極大值抑制和雙閾值。多邊緣響應、邊緣的定位精度利用非極大值抑制來控制;雙閾值能減少邊緣的漏檢率。其檢測流程如圖1 所示。
圖1 傳統(tǒng)Canny 邊緣檢測算法流程
(1)利用二維線性高斯濾波器對目標圖像進行去噪。二維高斯函數與圖像進行卷積處理以達到平滑圖像的效果,二維高斯函數 G(x,y)為
高斯函數與目標圖像卷積公式為
式中:σ 為高斯函數的標準差,其大小可以控制圖像的平滑程度;R(x,y)為高斯函數與輸入圖像進行卷積處理之后的圖像;f(x,y)為輸入圖像;“*”代表卷積運算。
為提高運算效率,可以將高斯函數轉化為高斯濾波模板[15],再與輸入圖像做卷積運算得到平滑后的圖像。
(2)計算梯度幅值和方向,利用Sobel 梯度模板[16]分別計算去噪后的圖像在像素點(x,y)處x 和y 方向上的偏導數。
其在x 方向上的偏導數Ix為
在y 方向上的偏導數Iy為
式中:R(x,y)為像素點(x,y)處的像素值。
則利用二范數計算其梯度幅值O 所得
其梯度方向為
(3)非極大值抑制(NMS)[17]旨在盡可能保留圖像灰度梯度幅值變化最大的點,盡可能地抑制該范圍內的干擾值,提高邊緣定位的準確度。非極大值抑制的具體實現方法為:遍歷圖像的每一個像素點,如果像素點R(x,y)處像素的梯度值不大于該梯度方向上相鄰2 個像素點的梯度值,則把點R(x,y)標記為非邊緣點;反之,像素點R(x,y)則被標記為候選邊緣點。
(4)滯后閾值化,人工確定1 個高閾值Th和1 個低閾值Tl,分別對經過非極大值抑制處理之后的梯度圖做二值化處理,然后對邊緣點進行選取和連接,具體方法為:掃描圖像的像素點(x,y),如果該點像素梯度值大于高閾值,則點(x,y)為邊緣像素;如果該點像素梯度值小于低閾值,則該點認定為非邊緣點;若像素點的梯度值處于高、低閾值之間,則進一步檢查像素點(x,y)的 3 × 3 鄰域,如果在像素 3 × 3 的鄰域內有梯度大于 Th的像素(x,y),則(x,y)為邊緣像素點,否則視為非邊緣像素。
從上述Canny 邊緣檢測算子的檢測流程可以看出,由于進行邊緣檢測和連接時所依據的高低閾值是人工設定的,因此對整幅編織布圖像進行邊緣檢測時無法估計局部特征信息,隨著設定值的不同,所檢測物體的輪廓信息出現檢測出假邊緣或邊緣斷裂等情況,無法實現自適應。另外,人工設定閾值會因經驗不同而產生誤差。針對傳統(tǒng)Canny 算子存在的不足,本文運用雙重基本全局閾值分割算法[18],根據實時的光照環(huán)境變化自適應地確定合適的高閾值和低閾值。改進后的Canny 算法流程如圖2 所示。
圖2 改進Canny 算法流程
在一個灰度等級為L(一般L=256)的圖像中,設有nm個灰度值為m 的像素,n 表示像素總個數,其中n=n0+n1+…+nL-1,灰度圖像中灰度值m 像素點出現的概率用 p(m)表示,則
其中,p(0)+p(1)+ … +p(L-1)=1,用初始閾值T0將圖像中的像素灰度值分成C0和C1兩大類,即C0={0,1,...,T0},C1={T0+1,T0+2…,L-1}。
對于初始閾值T0的設置,可以先找出圖像中灰度最大的值hmax和灰度最小的值hmin,令T0為灰度最大的值hmax和灰度最小的值hmin的均值,這樣可以減少計算量,則有
則C0和C1的分布概率分別為ω0和ω1
式中:ω0為 C0的分布概率;ω1為 C1的分布概率,且ω0+ω1=1。
C0部分像素點的灰度均值φ0(T)為
C1部分像素點的灰度均值φ1(T)為
對φ0(T)與φ1(T)求均值,有
其中,T1是經過一次迭代所得的一個閾值。
由上述對基本全局閾值分割算法的介紹可知,雙重基本全局閾值分割算法是先對梯度圖像賦予一個初始閾值T0,第一步使用上述方法獲取一個新的閾值T1,然后將T0和T1進行比較,如果二者相等或是二者之差在一個允許的范圍內,返回T1,此時所得到的新閾值T1即為最優(yōu)閾值,將其設置為高閾值Th;否則繼續(xù)進行迭代,直到相鄰2 次得到的閾值之差為0 或者在一個允許的范圍時,終止迭代,最終得到最優(yōu)閾值。第二步在[0,Th]之間再次使用全局閾值分割法得到另一個最優(yōu)閾值,將其設置為低閾值,此時得到的高閾值和低閾值即可作為滯后閾值化操作所需的閾值。
為驗證上述理論分析的可行性和有效性,在Python 3.7.0 環(huán)境下配置開源計算機視覺函數庫OpenCV4.2.0版本進行測試。傳統(tǒng)Canny 檢測算法直接調用edge=cv2.Canny(image,threshold1,threshold2),image 為經過灰度變換后的灰度圖像,threshold1、threshold2 分別為設定的低閾值和高閾值,edge 為檢測出的圖像邊緣二值圖。改進后的算子中的高低閾值是經過2 次全局閾值分割方法多次迭代得到的,不需人為設定。
選取多幅不同缺陷類型的圖像對本文改進算子和傳統(tǒng)算子的檢測效果進行對比,其中傳統(tǒng)算法與改進算法所用的高斯濾波模板大小均為3×3,標準差σ=1.4,計算梯度用一階Sobel 梯度模板,由于圖像整體灰度較低,傳統(tǒng)算法雙閾值中高閾值選擇為30,低閾值為15。
圖3 為有瑕疵編織布的原圖,改進算法所得閾值與傳統(tǒng)方法確定的閾值對比結果如表1 所示。從表1可以看出,改進Canny 算法確定的閾值能根據圖像灰度分布自適應確定高低閾值,提高了算法的自適應性。兩種算法在處理同一幅圖像時,采用改進的方法多于傳統(tǒng)方法,這是因為在確定Canny 算子的最優(yōu)閾值時需要額外的計算量,這就使得算法在時間復雜度上有一定的提高。
圖3 瑕疵編織布原始圖像
表1 編織布圖閾值比較
采用改進Canny 算法和傳統(tǒng)Canny 算法分別對其處理后,編織布圖檢測出的瑕疵邊緣像素占圖像整體像素比例情況如表2 所示。從表2 可以看出,改進的Canny 邊緣檢測算法能檢測出更多的瑕疵邊緣像素。
表2 編織布圖檢出邊緣像素占比 %
傳統(tǒng)Canny 算法和改進Canny 算法的檢測結果分別如圖 4 和圖 5 所示。由圖 4(a)、圖 5(a)中的標記處可以看出,改進方法檢測出破損編織布瑕疵的邊緣細節(jié)更多。由圖4(b)、圖5(b)小破損瑕疵可以看到,傳統(tǒng)算法對于編織布小破損情況下的檢測情況明顯不如改進后的算法。圖5 中的打結和跳線瑕疵圖可以看出,改進的算法邊緣檢測和連接的效果更好,這也為后續(xù)疵點檢測和打標機標記瑕疵布料提供了依據。
圖4 傳統(tǒng)Canny 算法檢測圖
圖5 改進Canny 算法檢測圖
本文在傳統(tǒng)Canny 算子確定高閾值和低閾值的步驟中應用2 次全局閾值分割方法,解決了其邊緣檢測算子在確定高低閾值方面自適應能力差的問題。該算法能夠根據圖像整體灰度分布自適應地確定合適的閾值,無需人為操作。實驗結果表明,本算法檢測出的邊緣像素明顯增多,在邊緣像素連接方面的效果更好,而且能在一定程度上抑制假邊緣,提高了Canny算子在織物疵點邊緣檢測上的自適應性。同時,由于低閾值也是由算法根據圖像灰度分布計算得到的,因此能夠減少偽邊緣的產生,保證了后續(xù)疵點檢測和標記的準確性。本文的算法在自適應性、邊緣檢測和連接方面相比傳統(tǒng)算法具有一定的優(yōu)勢,但在檢測時間方面耗時比傳統(tǒng)算法長,對檢測效率有一定的影響,今后仍需進一步研究。