王春妍,沈丹峰,楊國仲,張旭祥
(西安工程大學 機電工程學院,陜西 西安710048)
質量檢驗是現代工業制造的一個重要方面。在紡織工業生產中,織物的自動檢測是保證織物質量的重要手段[1]。長期以來,織物疵點的檢測過程仍然采用人工目測的方式進行,由于人工驗布成本較高,人為因素影響檢測率[2],因此需要對織物疵點進行自動檢測,以降低人工檢測造成的成本和時間浪費[3]。現有的織物疵點檢測方法主要有幾類:基于模型分析的方法、基于統計分析的方法、基于頻譜分析的方法[4]。基于模型分析的方法通過對織物自身的紋理信息進行建模,獲取相關特征檢測織物疵點,但其計算量大,對小面積織物疵點的識別能力較弱[5],如楊曉波[6]通過構建GRMF紋理模型自動識別統計特征畸變織物疵點紋理,其計算量大且過程極其復雜,難以檢測到面積較小的疵點。基于統計分析的方法通過計算織物圖像中紋理的統計特性來檢測織物疵點,檢測結果易受疵點類型和紋理特征等的影響[7],如陸聰[8]提出了基于灰度LBP共生矩陣的特征提取算法,改變共生矩陣的計算方式,結合LBP的旋轉不變性,利用2種算法的優勢,減少了計算量,提高了算法的實時性。基于頻譜分析的方法將圖像從時域變換到頻域,然后利用某種能量準則進行織物疵點檢測,但很大程度上受限于濾波器的選擇,如景軍鋒等[9]利用遺傳算法選取Gabor濾波器最優參數,利用調整后的Gabor濾波器檢測織物疵點,準確率提高,且耗時較短。胡克滿等[10]提出了一種自適應Canny邊緣檢測算法,自適應獲取高斯濾波參數與圖像閾值,改善了Canny算子的自適應性,可以更好地識別織物疵點的邊緣信息。
考慮到織物疵點特征與邊緣檢測算法的工作原理相似[11],疵點邊緣的紋理結構相對于正常織物部分會發生明顯突變,這些疵點會破壞織物的均勻結構,疵點區域與正常織物區域的分界處會出現密度梯度,故采用邊緣檢測算法對織物疵點進行檢測。相較于其他算法,邊緣檢測算法具有處理速度快、操作簡單等優點。常用的邊緣檢測算法有Prewitt算子、Canny算子、Laplacian算子、Roberts算子和Sobel算子等[12],其中,Prewitt算子原理為利用圖像中鄰域像素點的灰度差值達到極值來檢測邊緣,可以抑制噪聲,消除部分偽邊緣,然而,在傳統邊緣檢測算子中,噪聲平滑能力提高,邊緣定位能力會下降,噪聲平滑與邊緣定位能力近乎呈倒數關系,同時需要人工確定閾值大小,其自適應性[13]會有一定影響。為了克服這個缺點,得到更加準確的邊緣信息,本文提出了基于傳統Prewitt算子的改進算法檢測織物疵點,算法分為三個步驟:(1)增加Prewitt算子的45°和135°方向模板來改善圖像的邊緣結構;(2)結合非極大值抑制方法[14]對檢測到的邊緣結構進行細化;(3)采用自適應閾值法去除部分偽邊緣。
經典的Prewitt邊緣提取算法是一種離散的一階空域微分算子,通常用于檢測圖像的邊緣。該算法通常是用2個分別檢測水平和垂直邊緣的方向模板與圖像的每個像素點進行鄰域卷積來完成[15],它的2個模板如圖1所示:

圖1 Prewitt算子模板
用圖1模板對織物圖像中的像素點進行卷積操作和求絕對值,得出圖像梯度值的表達式為:

式中,Gx和Gy分別表示水平差分和垂直差分,P(x,y)表示Prewitt算子的梯度幅值,f(x,y)為像素點(x,y)的灰度值。
求出梯度后,選取合適的梯度閾值T,將P與T進行比較,當且僅當P<T時,該點為邊緣點,設定其像素值為0,其他的設定為255,通過調節T的大小來獲得最佳效果。
基于以上分析,Prewitt算子是一種將差分運算與局部平均相結合來計算3×3鄰域內梯度值的方法,雖然可以抑制噪聲,但檢測到的邊緣粗糙,邊緣位置難以準確定位。傳統Prewitt算子使用水平方向和垂直方向的掩模對圖像進行鄰域卷積,方向掩模不夠完善,其他方向的邊緣信息容易被忽略[16]。此外,人們往往根據經驗來選取閾值,很難得到精度較高的圖像邊緣結構。閾值過高,會導致圖像部分邊緣結構丟失;而閾值過低,則會導致不必要的偽邊緣出現[17]。
為了更加精確地檢測到疵點,減少后續檢測的工作量與復雜程度,對梯度幅值圖像P(x,y)進行了高斯濾波、增加45°方向模板和135°方向模板來計算梯度幅值、非極大值抑制以及自適應閾值選取。織物疵點檢測算法流程如圖2所示。

圖2 算法流程圖
高斯濾波是一種線性平滑濾波[18],可抑制和消除高斯噪聲,常用于視覺算法中的預處理階段,以達到圖像平滑和增強的效果。高斯濾波對圖像中每個像素點和鄰域內的其他像素值實現加權平均操作,具體來說是用一個卷積模板在圖像上的每一個像素上移動,得到的鄰域內像素的加權平均灰度值作為中心像素點的灰度值:

式中,(x,y)表示像素點坐標,在數字圖像處理中為整數;標準差σ表示高斯函數的寬度,通常采用二維零均值離散高斯函數作為平滑濾波器。
傳統的Prewitt算子在鄰域內求有限差分來計算梯度幅值方向,只能檢測垂直和水平方向,而不能檢測其他方向,導致部分邊緣缺失。改進后的算法增加了45°方向算子和135°方向算子,使邊緣結構更加完整。改進后的算子表達式為:

改進后的算子模板是:
改進了方向模板后,得到的像素點的梯度幅值P(x,y)是:

設置4個3×3的模板公式(5),4個模板分別對應0°、45°、90°、135°,以點 (x,y)為中心將其鄰域內3×3的區域分成兩部分,按照這4個模板分別對圖像中的每個像素點進行卷積操作和求絕對值,只要任意一個結果與選取的閾值相比,大于或者等于閾值T,則該模板的中心點所對應的像素點的灰度值為4個方向模板結果中的最大值,否則灰度值為0。
對于梯度幅值圖像,非極大值抑制是將當前像素點的梯度值與沿其梯度方向的2個相鄰梯度值進行比較,當值小于相鄰梯度值時,判斷像素點為非極大值進行抑制;如果其值大于相鄰的梯度值,則判斷該像素點為待保留的最大值。將梯度幅值分為0°、45°、90°、135°四部分,分別對應于0°、45°、90°、135°的4個方向上的相鄰像素點,可由Prewitt算子計算。因此,梯度幅值圖像P(x,y)在(x,y)處的非極大值抑制算法為:

傳統邊緣檢測需要通過分析圖像直方圖,人為設置閾值,適用性有限。針對人為選取閾值的不足,提出了一種自適應閾值選取方法,以圖像灰度平均值與各灰度級出現概率的乘積作為自適應閾值。
設圖像的大小為M×N,灰度值的取值范圍為L1,L2,…,LN,用概率分布來描述圖像的灰度值分布情況。各灰度值出現的概率為:

令h(Ln)代表圖像中灰度值Ln出現的次數,則有式(9)可以推出:

式(10)具有廣泛的適用性,可用于不同灰度的圖像,克服了傳統邊緣檢測人為選取閾值的局限性。
處理后的二值圖像M(x,y)為:對梯度幅值圖像上的像素點P(x,y),若該點梯度幅值大于閾值,且是局部變化最大的值,即p*(x,y)=1,則該像素點為圖像的邊緣,即

為了更好地檢驗本文算法的效果,選取帶有百腳、斷經、重緯、油污等疵點的大小為256像素×256像素的圖像進行試驗,試驗基本配置為i7-8565U CPU和8G內存,軟件編譯環境為MATLAB2018b環境,分別采用經典Prewitt算子和本文改進后的算法對織物圖像進行處理,檢測結果如圖3所示,圖3(a)是織物疵點原圖,圖3(b)是基于經典Prewitt算子的檢測效果圖,圖3(c)是基于經典Canny算子的檢測效果圖,圖3(d)是改進算法的檢測效果圖。

圖3 織物疵點檢測結果對比
可以看出,采用經典Prewitt算子進行織物疵點的邊緣檢測,其檢測邊緣粗糙,人為選取的閾值不能實現與織物疵點灰度值相近的噪聲跟疵點的分離,含有大量的正常紋理與噪聲信息,說明經典算子檢測邊緣較粗,所確定的閾值不是最優閾值,易產生偽邊緣。從改進后算法的分割效果能夠看出,織物疵點與背景紋理分離明顯,表明改進后算法不僅可以利用非極大值抑制細化邊緣,還通過自適應閾值法確定最佳閾值,使與疵點接近的噪聲被分離,去除部分偽邊緣。
改進算法的優越性在于:
(1)增加邊緣檢測模板方向數,提高了疵點邊緣完整度;
(2)梯度幅值圖像增加了非極大值抑制,減少了圖像的噪點與偽邊緣;
(3)采用自適應閾值分割方法,以圖像灰度平均值與各灰度級出現概率的乘積作為自適應閾值,等同于動態局部閾值分割,進一步提高了二值化圖像的準確度。
進一步地,擴大試驗范圍,選取130件某棉紡織廠人工驗后的疵布,在恒定光源下,用工業相機拍照,采用本文算法檢測后的統計結果見表1。

表1 疵點檢測結果統計
在經典Prewitt算子的基礎上,提出了一種改進的織物疵點檢測算法,剖析了經典Prewitt算子的檢測機理和操作流程。針對經典Prewitt算子的不足,增加45°和135°方向模板,結合非極大值抑制方法以及自適應閾值算法,實現織物疵點的檢測。研究結果表明,用改進算法有效解決了Prewitt算子檢測出的邊緣粗糙、人為選取閾值易誤判邊緣點的問題,得到的邊緣細節明顯,偽邊緣相對較少,實現了閾值智能化,具有較好的自適應性,提高了織物疵點的檢測精度。與其他方法相比,邊緣檢測算法最重要的優勢是操作簡單、耗時少,將其應用于低噪聲圖像或優化圖像處理方法的圖像中,可以得到更好的結果。