邢禮源, 陳玉潔, 張 豪, 羅一龍
(東華大學 機械工程學院,上海201620)
目前運動鞋的鞋底成型工藝主要有膠黏、縫制、模壓、硫化、注塑等,其中膠黏工藝因流程簡單、生產效率高、成本低、適用大批量生產,被制鞋企業廣泛應用[1]。然而,人工涂膠耗時長,且膠水中的化學物質對人體建康有一定的影響,因此,將機器人技術引入運動鞋生產中具有重要的意義。
丁度坤等[2]利用工業相機采集鞋底圖像并進行鞋底輪廓的提取,但這種方法只提取鞋底的二維輪廓。馬新伍等[3]采用雙目立體視覺完成鞋底三維信息提取,但獲得的鞋底輪廓精度不高且算法開發難度大。Hu等[4]提出了利用結構光系統采集鞋底的三維信息,但提取的鞋底輪廓精度有待進一步提高?;诖耍捎镁€結構光對運動鞋底三維信息進行提取,并重點對鞋底表面光條圖像中心的提取算法進行研究,以滿足鞋底三維信息提取的精度和實時性要求。
常見的光條圖像中心提取方法主要分為兩類:一類從光條圖像的幾何形態特征出發,包括閾值法、極值法、骨架提取法等[6-8],這類方法雖然簡單快速,但易受各種噪聲和閾值的影響而導致提取精度降低;另一類從光條圖像的灰度特征出發,如重心法、方向模板法、Steger算法以及曲線擬合法[9-12],這類方法提取中心準確,精度較高,但當光條寬度發生變化時,會發生光條圖像部分區域中心提取失敗的情況。近年來,一些學者綜合了兩類光條圖像提取方法的優點,提出了改進的光條圖像中心提取方法。汪安國等[13]先用自適應閾值完成鞋底光條圖像的分割,再用極值法得到光條圖像的近似中心,最后用重心法實現鞋底光條圖像的中心提?。荒戏降萚14]提出改進的Steger算法,先利用自適應閾值分割光條圖像,然后用隨機霍夫變換求出光條邊緣線,再通過法線計算出光條圖像區域的寬度值,最后進行Steger算法提取。然而,由于運動鞋的鞋底內表面比較粗糙,光條圖像邊緣存在散斑[15],自適應閾值不能完整地分割光條區域,進而導致光條圖像中心提取失敗。
針對上述問題,本文提出一種適用于運動鞋底表面光條圖像中心的提取算法。在自適應閾值分割基礎上,計算模板均值與模板內各像素間的差值,并將模板內所有差值作為背景,再用Otsu法尋找最佳的差值閾值,從而有效分割光條的光斑。提取光條邊緣時,根據光條圖像梯度等級直方圖自動獲取Canny算子的高低閾值,避免了手動選取閾值帶來的邊緣提取差異。利用光條的邊緣和梯度方向提取光條的寬度,根據光條的寬度縮小光條圖像中心的檢測范圍并改變Steger算法中高斯濾波核的大小,最后采用Hessian矩陣的求解得到光條圖像的中心,完成鞋底表面光條圖像的中心提取。
在理想情況下,光條圖像在橫截面上的能量分布符合高斯曲線分布,式(1)為高斯曲線的數學表達式。
(1)
式中:u為能量分布的幅值;σ為標準差,在圖像上代表曲線的跨度;μ為圖像縱坐標的平均值。
然而,實際測量環境的復雜性使得鞋底表面光條圖像的形狀以及亮度分布發生了變化。在理想鞋底表面和運動鞋底粗糙表面上的光條圖像橫截面的能量分布如圖1所示。從圖1(a)可以看出,理想鞋底表面的光條圖像中心位置就是光條能量曲線極值所在的位置,而在圖1(b)中,鞋底粗糙表面的光條圖像中心位置范圍較廣。

(b) 運動鞋底粗糙表面
自適應閾值算法主要的思想是將圖像中的各像素定義為中心,以其周圍的鄰域像素作為一個分塊,計算出這個分塊內像素的加權均值作為閾值。這種方法可以較好地區分出光條區域和非光條區域,但無法分割出光條的光斑區域。
先根據灰度特征計算出模板平均灰度值;然后計算平均灰度值與模板內各像素灰度的差值,以模板內所有差值作為背景,采用Otsu法尋找最佳的差值閾值;最后利用光條邊緣兩側灰度值變化較大的特征來保留圖像的邊緣。差值閾值尋找的算法具體步驟如下:
(1) 計算模板平均灰度(ga)以及統計模板內像素灰度值高于200和低于50的個數,如式(2)~(4)所示。
(2)
a=w(gi) (i=1, 2, …, 9)
(3)
b=h(gi) (i=1, 2, …, 9)
(4)
式中:gi為模板內光條圖像的像素灰度值;w(gi)和h(gi)分別為統計模板內像素灰度值高于200和低于50的函數;a為模板內像素灰度值高于200的個數;b為模板內像素灰度值低于50的個數。
(2) 計算平均灰度與模板內其他像素灰度的差值,如式(5)所示。
Δgi=gi-ga(i=1, 2, …, 9)
(5)
(3) 利用Otsu尋找差值閾值,如式(6)和(7)所示。
μ=ω0(gt)μ0(gt)+ω1(gt)μ1(gt)
(6)

(7)

如果gi-ga>gt,且a<3或者b<3,那么就認為該點不是光條上的點,將其灰度值置0,其余灰度值置255,最終完成圖像的分割。
1.3.1 光條邊緣提取
Canny算子在提取邊緣時,采用邊緣模板計算光條圖像的梯度,通過非極大值抑制與高低閾值檢測連接邊緣。傳統Canny算子主要根據經驗選擇高低閾值,本文設計一種基于光條圖像梯度幅值的直方圖來選擇高低閾值的方法,根據光條圖像梯度等級直方圖自動獲取閾值。基于光條梯度幅值的直方圖閾值設計具體流程如下:
(1) 計算光條圖像梯度幅值的最大值和最小值,如式(8)和(9)所示。
M=fmax(B(x,y))
(8)
N=fmin(B(x,y))
(9)
式中:M為光條圖像梯度幅值的最大值;N為光條圖像梯度幅值最小值;B(x,y)為圖像在(x,y)位置的梯度值。
(2) 將梯度幅值區間[M,N]分成10等份小區間,則每個區間的長度L和小區間Ki分別如式(10)和(11)所示。
L=(M-N)/10
(10)
Ki=[M+(i-1)×L,M+i×L] (i=1, 2, …, 10)
(11)
(3) 分別統計出現在Ki區間內梯度幅值B(x,y)的個數Ri,如式(12)所示。
Ri=H(Ki) (i=1, 2, …, 10)
(12)
(4) 設Ki為梯度級數區段出現頻率最多的區段,那么Canny算法的高、低閾值th和tl,如式(13)所示。
th=M+i×L,t1=0.4×th
(13)
1.3.2 光條寬度提取
光條圖像灰度梯度方向與其法線方向非常接近,因此將灰度梯度方向作為光條的法線方向。假設點(x0,y0)是光條圖像的某個邊緣點,該點的法線近似為灰度梯度方向,假設其斜率為k,那么經過點(x0,y0)的直線如式(14)所示。
y=k(x-x0)+y0
(14)
對于直線y從一個邊緣點到另一個邊緣點所經過的光條像素位置進行數量統計,就可以得到光條的寬度W。
Steger算法可以采用高斯濾波核來確定Hessian矩陣,并通過高斯濾波核的一階、二階形式濾除光條圖像的一部分噪聲,以便更準確地求解出光條圖像中心。二維高斯核函數的定義如式(15)所示。
式中:σ為高斯濾波核的大?。粁和y為圖像的橫、縱坐標。

利用高斯核函數求解在任意圖像像素點(x,y)處的Hessian矩陣,如式(16)所示。
(16)

Steger算法對光條圖像區域內所有像素點進行Hessian矩陣計算,圖像中每一個像素點和長度為n的二維高斯模板做多次卷積運算[17]。由式(16)可以看出Hessian矩陣的計算量非常大。根據光條圖像的橫截面能量分布可知,光條圖像的中心位置主要在光條寬度的中間位置,故取光條圖像橫截面寬度中間0.4W范圍內的像素點進行Hessian矩陣計算。
Hessian矩陣求解后的兩個特征值與光條圖像灰度函數的兩個二階方向導數的極值是對應的,特征值對應的特征向量就是極值的方向。用較大特征值對應的特征向量,在光條圖像像素點f(x,y)的基礎上,利用泰勒公式在該點的法向上展開,得到中心點亞像素坐標(px,py),如式(17)和(18)所示。
(px,py)=(tnx,tny)
(17)
(18)

如果亞像素坐標(px,py)的取值范圍在((-0.5, 0.5), (-0.5, 0.5))內,該點就是光條圖像中心點。
為了驗證提出的運動鞋底粗糙表面的光條圖像中心提取方法的可行性與有效性,采用帶有光斑且寬度劇烈變化的光條圖像進行試驗驗證。試驗環境:Intel(R)i7-8550U處理器,4G內存,軟件及版本為MATLAB 2018a。
使用不同的圖像分割方法分割運動鞋底光條圖像區域,結果如圖2所示。由圖2可知:Otsu法無法分辨出光斑,光條圖像提取失?。蛔赃m應閾值法同樣不能區別光斑和光條邊緣,還帶有一些噪點;本文的算法則可以有效分割出光條區域和光條的光斑。

(a) 原圖

(b) Otsu法

(c) 自適應閾值法

(d) 本文算法
選擇Sobel算子、Robert算子、Canny算子以及本文改進的Canny算法分別對同一運動鞋底光條圖像進行邊緣提取。為了更好地觀察提取效果,對提取后的邊緣進行放大處理,結果如圖3所示。

(a) Sobel算子

(b) Robert算子

(c) Canny算子

(d) 本文算法
從圖3(a)和(b)可以看出:Sobel算子和Roberts算子不能很好地提取邊緣,在光條的圖像邊緣和中間都存在一些噪聲點;而在圖3(c)和(d)可以看出,本文算法和Canny算子都比較好地完成光條圖像邊緣提取,但本文所提的方法不用考慮閾值的選取,有更好的適應性。
選擇灰度重心法、Steger算法以及本文的光條中心提取算法對同一運動鞋底的光條圖像進行中心提取,結果如圖4所示。從圖4可以看到:灰度重心法無法對光條圖像寬度較細地方進行中心點提??;傳統Steger算法在光條圖像寬度突然變小的地方發生中心點提取失敗;本文算法對于光條圖像任何寬度變化的區域都可以進行中心點的提取。

(a) 原圖

(b) 灰度重心法

(c) Steger算法

(d) 本文算法
采集運動鞋底尾部、中間、中上、頭部處的光條圖像,并分別命名為1#、 2#、 3#、 4#光條圖像。每一類圖片拍攝10張,分別利用灰度重心法、傳統Steger算法和本文算法進行光條的中心提取,并統計光條圖像中心提取的平均時間,結果如表1所示。

表1 不同算法對光條的中心提取時間的對比
由表1可知:灰度重心法提取光條圖像的中心所花的時間最少;Steger算法提取光條圖像的中心花費的時間最長;本文算法在提取不同位置光條圖像的中心所花的時間,要比傳統的Steger算法少三分之一左右。
本文采用的運動鞋底表面光條圖像的中心提取算法,可以很好地分割出光條的光斑,同時解決了光條寬度變化帶來光條圖像的中心提取缺失的問題,具體結論如下:
(1) 使用模板內像素灰度均值和其他像素灰度的差值閾值來分割光條圖像,解決了運動鞋底粗糙表面上光條的光斑無法分割的問題。
(2) 通過光條的梯度直方圖自動設置Canny算子的閾值,避免了手動選取閾值帶來的邊緣提取差異,提高了Canny算子在提取鞋底的光條邊緣的穩健性。
(3) 根據光條的寬度縮小光條中心的檢測范圍并改變Steger算法中高斯濾波核的大小,加快了Steger算法中心提取的速度,同時解決了光條寬度變化導致的光條中心提取缺失問題。