邢禮源, 陳玉潔, 張 豪, 羅一龍
(東華大學(xué) 機(jī)械工程學(xué)院,上海201620)
目前運(yùn)動(dòng)鞋的鞋底成型工藝主要有膠黏、縫制、模壓、硫化、注塑等,其中膠黏工藝因流程簡(jiǎn)單、生產(chǎn)效率高、成本低、適用大批量生產(chǎn),被制鞋企業(yè)廣泛應(yīng)用[1]。然而,人工涂膠耗時(shí)長(zhǎng),且膠水中的化學(xué)物質(zhì)對(duì)人體建康有一定的影響,因此,將機(jī)器人技術(shù)引入運(yùn)動(dòng)鞋生產(chǎn)中具有重要的意義。
丁度坤等[2]利用工業(yè)相機(jī)采集鞋底圖像并進(jìn)行鞋底輪廓的提取,但這種方法只提取鞋底的二維輪廓。馬新伍等[3]采用雙目立體視覺(jué)完成鞋底三維信息提取,但獲得的鞋底輪廓精度不高且算法開(kāi)發(fā)難度大。Hu等[4]提出了利用結(jié)構(gòu)光系統(tǒng)采集鞋底的三維信息,但提取的鞋底輪廓精度有待進(jìn)一步提高?;诖?,采用線結(jié)構(gòu)光對(duì)運(yùn)動(dòng)鞋底三維信息進(jìn)行提取,并重點(diǎn)對(duì)鞋底表面光條圖像中心的提取算法進(jìn)行研究,以滿足鞋底三維信息提取的精度和實(shí)時(shí)性要求。
常見(jiàn)的光條圖像中心提取方法主要分為兩類(lèi):一類(lèi)從光條圖像的幾何形態(tài)特征出發(fā),包括閾值法、極值法、骨架提取法等[6-8],這類(lèi)方法雖然簡(jiǎn)單快速,但易受各種噪聲和閾值的影響而導(dǎo)致提取精度降低;另一類(lèi)從光條圖像的灰度特征出發(fā),如重心法、方向模板法、Steger算法以及曲線擬合法[9-12],這類(lèi)方法提取中心準(zhǔn)確,精度較高,但當(dāng)光條寬度發(fā)生變化時(shí),會(huì)發(fā)生光條圖像部分區(qū)域中心提取失敗的情況。近年來(lái),一些學(xué)者綜合了兩類(lèi)光條圖像提取方法的優(yōu)點(diǎn),提出了改進(jìn)的光條圖像中心提取方法。汪安國(guó)等[13]先用自適應(yīng)閾值完成鞋底光條圖像的分割,再用極值法得到光條圖像的近似中心,最后用重心法實(shí)現(xiàn)鞋底光條圖像的中心提?。荒戏降萚14]提出改進(jìn)的Steger算法,先利用自適應(yīng)閾值分割光條圖像,然后用隨機(jī)霍夫變換求出光條邊緣線,再通過(guò)法線計(jì)算出光條圖像區(qū)域的寬度值,最后進(jìn)行Steger算法提取。然而,由于運(yùn)動(dòng)鞋的鞋底內(nèi)表面比較粗糙,光條圖像邊緣存在散斑[15],自適應(yīng)閾值不能完整地分割光條區(qū)域,進(jìn)而導(dǎo)致光條圖像中心提取失敗。
針對(duì)上述問(wèn)題,本文提出一種適用于運(yùn)動(dòng)鞋底表面光條圖像中心的提取算法。在自適應(yīng)閾值分割基礎(chǔ)上,計(jì)算模板均值與模板內(nèi)各像素間的差值,并將模板內(nèi)所有差值作為背景,再用Otsu法尋找最佳的差值閾值,從而有效分割光條的光斑。提取光條邊緣時(shí),根據(jù)光條圖像梯度等級(jí)直方圖自動(dòng)獲取Canny算子的高低閾值,避免了手動(dòng)選取閾值帶來(lái)的邊緣提取差異。利用光條的邊緣和梯度方向提取光條的寬度,根據(jù)光條的寬度縮小光條圖像中心的檢測(cè)范圍并改變Steger算法中高斯濾波核的大小,最后采用Hessian矩陣的求解得到光條圖像的中心,完成鞋底表面光條圖像的中心提取。
在理想情況下,光條圖像在橫截面上的能量分布符合高斯曲線分布,式(1)為高斯曲線的數(shù)學(xué)表達(dá)式。
(1)
式中:u為能量分布的幅值;σ為標(biāo)準(zhǔn)差,在圖像上代表曲線的跨度;μ為圖像縱坐標(biāo)的平均值。
然而,實(shí)際測(cè)量環(huán)境的復(fù)雜性使得鞋底表面光條圖像的形狀以及亮度分布發(fā)生了變化。在理想鞋底表面和運(yùn)動(dòng)鞋底粗糙表面上的光條圖像橫截面的能量分布如圖1所示。從圖1(a)可以看出,理想鞋底表面的光條圖像中心位置就是光條能量曲線極值所在的位置,而在圖1(b)中,鞋底粗糙表面的光條圖像中心位置范圍較廣。
(b) 運(yùn)動(dòng)鞋底粗糙表面
自適應(yīng)閾值算法主要的思想是將圖像中的各像素定義為中心,以其周?chē)泥徲蛳袼刈鳛橐粋€(gè)分塊,計(jì)算出這個(gè)分塊內(nèi)像素的加權(quán)均值作為閾值。這種方法可以較好地區(qū)分出光條區(qū)域和非光條區(qū)域,但無(wú)法分割出光條的光斑區(qū)域。
先根據(jù)灰度特征計(jì)算出模板平均灰度值;然后計(jì)算平均灰度值與模板內(nèi)各像素灰度的差值,以模板內(nèi)所有差值作為背景,采用Otsu法尋找最佳的差值閾值;最后利用光條邊緣兩側(cè)灰度值變化較大的特征來(lái)保留圖像的邊緣。差值閾值尋找的算法具體步驟如下:
(1) 計(jì)算模板平均灰度(ga)以及統(tǒng)計(jì)模板內(nèi)像素灰度值高于200和低于50的個(gè)數(shù),如式(2)~(4)所示。
(2)
a=w(gi) (i=1, 2, …, 9)
(3)
b=h(gi) (i=1, 2, …, 9)
(4)
式中:gi為模板內(nèi)光條圖像的像素灰度值;w(gi)和h(gi)分別為統(tǒng)計(jì)模板內(nèi)像素灰度值高于200和低于50的函數(shù);a為模板內(nèi)像素灰度值高于200的個(gè)數(shù);b為模板內(nèi)像素灰度值低于50的個(gè)數(shù)。
(2) 計(jì)算平均灰度與模板內(nèi)其他像素灰度的差值,如式(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,那么就認(rèn)為該點(diǎn)不是光條上的點(diǎn),將其灰度值置0,其余灰度值置255,最終完成圖像的分割。
1.3.1 光條邊緣提取
Canny算子在提取邊緣時(shí),采用邊緣模板計(jì)算光條圖像的梯度,通過(guò)非極大值抑制與高低閾值檢測(cè)連接邊緣。傳統(tǒng)Canny算子主要根據(jù)經(jīng)驗(yàn)選擇高低閾值,本文設(shè)計(jì)一種基于光條圖像梯度幅值的直方圖來(lái)選擇高低閾值的方法,根據(jù)光條圖像梯度等級(jí)直方圖自動(dòng)獲取閾值?;诠鈼l梯度幅值的直方圖閾值設(shè)計(jì)具體流程如下:
(1) 計(jì)算光條圖像梯度幅值的最大值和最小值,如式(8)和(9)所示。
M=fmax(B(x,y))
(8)
N=fmin(B(x,y))
(9)
式中:M為光條圖像梯度幅值的最大值;N為光條圖像梯度幅值最小值;B(x,y)為圖像在(x,y)位置的梯度值。
(2) 將梯度幅值區(qū)間[M,N]分成10等份小區(qū)間,則每個(gè)區(qū)間的長(zhǎng)度L和小區(qū)間Ki分別如式(10)和(11)所示。
L=(M-N)/10
(10)
Ki=[M+(i-1)×L,M+i×L] (i=1, 2, …, 10)
(11)
(3) 分別統(tǒng)計(jì)出現(xiàn)在Ki區(qū)間內(nèi)梯度幅值B(x,y)的個(gè)數(shù)Ri,如式(12)所示。
Ri=H(Ki) (i=1, 2, …, 10)
(12)
(4) 設(shè)Ki為梯度級(jí)數(shù)區(qū)段出現(xiàn)頻率最多的區(qū)段,那么Canny算法的高、低閾值th和tl,如式(13)所示。
th=M+i×L,t1=0.4×th
(13)
1.3.2 光條寬度提取
光條圖像灰度梯度方向與其法線方向非常接近,因此將灰度梯度方向作為光條的法線方向。假設(shè)點(diǎn)(x0,y0)是光條圖像的某個(gè)邊緣點(diǎn),該點(diǎn)的法線近似為灰度梯度方向,假設(shè)其斜率為k,那么經(jīng)過(guò)點(diǎn)(x0,y0)的直線如式(14)所示。
y=k(x-x0)+y0
(14)
對(duì)于直線y從一個(gè)邊緣點(diǎn)到另一個(gè)邊緣點(diǎn)所經(jīng)過(guò)的光條像素位置進(jìn)行數(shù)量統(tǒng)計(jì),就可以得到光條的寬度W。
Steger算法可以采用高斯濾波核來(lái)確定Hessian矩陣,并通過(guò)高斯濾波核的一階、二階形式濾除光條圖像的一部分噪聲,以便更準(zhǔn)確地求解出光條圖像中心。二維高斯核函數(shù)的定義如式(15)所示。
式中:σ為高斯濾波核的大??;x和y為圖像的橫、縱坐標(biāo)。
利用高斯核函數(shù)求解在任意圖像像素點(diǎn)(x,y)處的Hessian矩陣,如式(16)所示。
(16)
Steger算法對(duì)光條圖像區(qū)域內(nèi)所有像素點(diǎn)進(jìn)行Hessian矩陣計(jì)算,圖像中每一個(gè)像素點(diǎn)和長(zhǎng)度為n的二維高斯模板做多次卷積運(yùn)算[17]。由式(16)可以看出Hessian矩陣的計(jì)算量非常大。根據(jù)光條圖像的橫截面能量分布可知,光條圖像的中心位置主要在光條寬度的中間位置,故取光條圖像橫截面寬度中間0.4W范圍內(nèi)的像素點(diǎn)進(jìn)行Hessian矩陣計(jì)算。
Hessian矩陣求解后的兩個(gè)特征值與光條圖像灰度函數(shù)的兩個(gè)二階方向?qū)?shù)的極值是對(duì)應(yīng)的,特征值對(duì)應(yīng)的特征向量就是極值的方向。用較大特征值對(duì)應(yīng)的特征向量,在光條圖像像素點(diǎn)f(x,y)的基礎(chǔ)上,利用泰勒公式在該點(diǎn)的法向上展開(kāi),得到中心點(diǎn)亞像素坐標(biāo)(px,py),如式(17)和(18)所示。
(px,py)=(tnx,tny)
(17)
(18)
如果亞像素坐標(biāo)(px,py)的取值范圍在((-0.5, 0.5), (-0.5, 0.5))內(nèi),該點(diǎn)就是光條圖像中心點(diǎn)。
為了驗(yàn)證提出的運(yùn)動(dòng)鞋底粗糙表面的光條圖像中心提取方法的可行性與有效性,采用帶有光斑且寬度劇烈變化的光條圖像進(jìn)行試驗(yàn)驗(yàn)證。試驗(yàn)環(huán)境:Intel(R)i7-8550U處理器,4G內(nèi)存,軟件及版本為MATLAB 2018a。
使用不同的圖像分割方法分割運(yùn)動(dòng)鞋底光條圖像區(qū)域,結(jié)果如圖2所示。由圖2可知:Otsu法無(wú)法分辨出光斑,光條圖像提取失??;自適應(yīng)閾值法同樣不能區(qū)別光斑和光條邊緣,還帶有一些噪點(diǎn);本文的算法則可以有效分割出光條區(qū)域和光條的光斑。
(a) 原圖
(b) Otsu法
(c) 自適應(yīng)閾值法
(d) 本文算法
選擇Sobel算子、Robert算子、Canny算子以及本文改進(jìn)的Canny算法分別對(duì)同一運(yùn)動(dòng)鞋底光條圖像進(jìn)行邊緣提取。為了更好地觀察提取效果,對(duì)提取后的邊緣進(jìn)行放大處理,結(jié)果如圖3所示。
(a) Sobel算子
(b) Robert算子
(c) Canny算子
(d) 本文算法
從圖3(a)和(b)可以看出:Sobel算子和Roberts算子不能很好地提取邊緣,在光條的圖像邊緣和中間都存在一些噪聲點(diǎn);而在圖3(c)和(d)可以看出,本文算法和Canny算子都比較好地完成光條圖像邊緣提取,但本文所提的方法不用考慮閾值的選取,有更好的適應(yīng)性。
選擇灰度重心法、Steger算法以及本文的光條中心提取算法對(duì)同一運(yùn)動(dòng)鞋底的光條圖像進(jìn)行中心提取,結(jié)果如圖4所示。從圖4可以看到:灰度重心法無(wú)法對(duì)光條圖像寬度較細(xì)地方進(jìn)行中心點(diǎn)提??;傳統(tǒng)Steger算法在光條圖像寬度突然變小的地方發(fā)生中心點(diǎn)提取失敗;本文算法對(duì)于光條圖像任何寬度變化的區(qū)域都可以進(jìn)行中心點(diǎn)的提取。
(a) 原圖
(b) 灰度重心法
(c) Steger算法
(d) 本文算法
采集運(yùn)動(dòng)鞋底尾部、中間、中上、頭部處的光條圖像,并分別命名為1#、 2#、 3#、 4#光條圖像。每一類(lèi)圖片拍攝10張,分別利用灰度重心法、傳統(tǒng)Steger算法和本文算法進(jìn)行光條的中心提取,并統(tǒng)計(jì)光條圖像中心提取的平均時(shí)間,結(jié)果如表1所示。
表1 不同算法對(duì)光條的中心提取時(shí)間的對(duì)比
由表1可知:灰度重心法提取光條圖像的中心所花的時(shí)間最少;Steger算法提取光條圖像的中心花費(fèi)的時(shí)間最長(zhǎng);本文算法在提取不同位置光條圖像的中心所花的時(shí)間,要比傳統(tǒng)的Steger算法少三分之一左右。
本文采用的運(yùn)動(dòng)鞋底表面光條圖像的中心提取算法,可以很好地分割出光條的光斑,同時(shí)解決了光條寬度變化帶來(lái)光條圖像的中心提取缺失的問(wèn)題,具體結(jié)論如下:
(1) 使用模板內(nèi)像素灰度均值和其他像素灰度的差值閾值來(lái)分割光條圖像,解決了運(yùn)動(dòng)鞋底粗糙表面上光條的光斑無(wú)法分割的問(wèn)題。
(2) 通過(guò)光條的梯度直方圖自動(dòng)設(shè)置Canny算子的閾值,避免了手動(dòng)選取閾值帶來(lái)的邊緣提取差異,提高了Canny算子在提取鞋底的光條邊緣的穩(wěn)健性。
(3) 根據(jù)光條的寬度縮小光條中心的檢測(cè)范圍并改變Steger算法中高斯濾波核的大小,加快了Steger算法中心提取的速度,同時(shí)解決了光條寬度變化導(dǎo)致的光條中心提取缺失問(wèn)題。