劉天賜,劉桂華,胡 莉,黃會(huì)明
(西南科技大學(xué) 信息工程學(xué)院,四川 綿陽(yáng) 621010)
近年來(lái),線結(jié)構(gòu)光三維測(cè)量技術(shù)被廣泛應(yīng)用于越來(lái)越多的領(lǐng)域,比如尺寸測(cè)量、逆向工程、缺陷檢測(cè)、目標(biāo)識(shí)別以及焊縫跟蹤等領(lǐng)域[1]。在線結(jié)構(gòu)光測(cè)量系統(tǒng)中由于目標(biāo)物表面起伏變化復(fù)雜,導(dǎo)致激光器投射條紋發(fā)生形變,再由CCD 拍攝有激光條紋照射的目標(biāo)圖像,然后根據(jù)提取到的激光線對(duì)物體進(jìn)行三維測(cè)量。在此過(guò)程中激光中心線的精確提取是測(cè)量系統(tǒng)的關(guān)鍵步驟之一。
目前常用的方法主要有極值法、幾何中心法、邊緣法等[2-4],對(duì)激光線中心線定位較快且易于提取,但缺點(diǎn)是只能達(dá)到像素級(jí),無(wú)法在高精度場(chǎng)合下應(yīng)用,局限性較大,而且易受環(huán)境和噪聲影響?;叶戎匦姆╗5]和Steger 算法[6]能夠提取亞像素級(jí)的激光條紋中心線,灰度重心法運(yùn)算速度快且易于實(shí)現(xiàn),但只考慮光條的橫向或者縱向,在條紋曲率變化較大時(shí)會(huì)產(chǎn)生較大誤差。為了減少噪聲干擾,潘碩等人[7]通過(guò)塊匹配尋找結(jié)構(gòu)光圖像中的相似光條結(jié)構(gòu),求取它們的坐標(biāo)均值作為最終的光條中心,但運(yùn)行效率不高,對(duì)直線抗噪效果很好;王利等人[8]有效結(jié)合條紋的二值寬度與灰度信息,使激光條紋在高噪聲背景下仍能精確提取中心線;胡斌等人 [9]在重心法基礎(chǔ)上引入方向模板法提高了計(jì)算效率,但僅能計(jì)算出四個(gè)法線方向,限制了中心線提取精度。Steger 算法可以精確計(jì)算出激光條紋的方向,再進(jìn)行二次泰勒展開求取極值得到亞像素激光點(diǎn),其精度較高,但引入了多次高斯卷積,計(jì)算效率低下,不適合應(yīng)用于實(shí)時(shí)場(chǎng)景。為了提高其計(jì)算效率,提出了一種基于主成分分析的中心線提取方法[10],將中心點(diǎn)的法線方向利用主成分分析的方法進(jìn)行求取,避免了多次卷積,使其對(duì)比Steger 算法速度提高了近3 倍,但對(duì)灰度值飽和度較多的強(qiáng)光源圖片提取精度不高。周源等人[11]在具有強(qiáng)光干擾的情況下,提出利用像素點(diǎn)的歐式距離和灰度值能量構(gòu)建函數(shù)和最短路徑搜索算法,對(duì)具有干擾的激光線進(jìn)行中心提取,提高了運(yùn)算效率和精度,但此方法提取的精度只能達(dá)到像素級(jí),不適合精度較高的場(chǎng)景。由于環(huán)境噪聲、物體表面的復(fù)雜性導(dǎo)致存在折線缺陷的問(wèn)題,金俊等人[12]采用貝塞爾曲線擬合改善了光條中心折線特征,但其擬合的復(fù)雜性高。胡楊等人[13]結(jié)合主成分分析與灰度重心法提高了速度,但僅靠梯度幅值較大的邊界點(diǎn)參與計(jì)算,很大程度上提取的精度取決于邊界像素,因此易受邊界噪聲影響。
在實(shí)際三維測(cè)量中,針對(duì)投射在物體表面上的激光線變化趨勢(shì)復(fù)雜,中心線提取精度不高、保留細(xì)節(jié)差等問(wèn)題。本文提出了一種基于法線引導(dǎo)的激光中心線提取方法,該方法可以提取有效像素點(diǎn)集,用于灰度重心法提取亞像素級(jí)中心位置。此方法利用各種算法的特點(diǎn),從而得到高精度的光條中心坐標(biāo)。
首先,要找到有利于提取激光中心線的圖像區(qū)域。由于在結(jié)構(gòu)光圖片中,存在大量的背景信息,而結(jié)構(gòu)光條紋區(qū)域小且和圖像背景區(qū)域的灰度值相差較大,為了能將感興趣區(qū)域進(jìn)行提取,本文采用自動(dòng)閾值分割的大津閾值法[14]得出分割閾值,根據(jù)閾值將激光條紋區(qū)域提取出來(lái)。不但能減少背景參與后續(xù)計(jì)算過(guò)程的影響,還能提高提取結(jié)構(gòu)光的速度。
通過(guò)上述方法對(duì)圖像進(jìn)行初次預(yù)處理,雖能夠自適應(yīng)地將目標(biāo)區(qū)域和背景區(qū)域的灰度閾值計(jì)算出來(lái),但由于結(jié)構(gòu)光部分區(qū)域位于圖像邊緣,導(dǎo)致對(duì)其進(jìn)行拍攝時(shí)入射的能量不足,因此會(huì)出現(xiàn)部分中心線灰度值低于分割閾值,經(jīng)圖像分割后出現(xiàn)一些偽斷線的情況。當(dāng)把處于“斷線”區(qū)域的原激光圖片進(jìn)行放大時(shí),發(fā)現(xiàn)其灰度分布仍符合高斯分布,說(shuō)明此位置也是激光線的一部分。在此,本文采取形態(tài)學(xué)閉運(yùn)算的方法對(duì)其進(jìn)行修補(bǔ),其原理是對(duì)二值化后的激光線進(jìn)行膨脹操作,用于連接圖中斷線情況,此時(shí),激光線整體面積會(huì)增加,為了恢復(fù)激光線原有的形狀,再使用與膨脹操作相同大小的結(jié)構(gòu)元素進(jìn)行腐蝕。如果使用的形態(tài)學(xué)的核太大,反而會(huì)在掃描物體時(shí)有些真斷線情況也會(huì)對(duì)其進(jìn)行修補(bǔ),導(dǎo)致最后掃描出來(lái)的三維數(shù)據(jù)出現(xiàn)偏差,因此本次使用的核大小為3×3,其效果如圖1 所示。
圖1 修補(bǔ)斷線過(guò)程示意圖Fig. 1 Schematic diagram of repairing broken wires
基于法線引導(dǎo)的中心坐標(biāo)提取步驟是用幾何中心法快速定位中心線,利用主成分分析法求解中心線的法線方向,根據(jù)中心點(diǎn)劃分八鄰域,結(jié)合法線角度尋找有效像素點(diǎn),最后使用灰度重心法求取亞像素級(jí)中心線。
為了能初步對(duì)激光線進(jìn)行中心提取,結(jié)合邊緣檢測(cè)法和幾何中心法對(duì)激光條紋進(jìn)行初步定位,用Canny 算法[15]對(duì)目標(biāo)區(qū)域進(jìn)行邊緣檢測(cè),得到除邊緣以外其他像素均為零的圖像。利用多條結(jié)構(gòu)光條紋的邊緣像素,通過(guò)(1)式計(jì)算結(jié)構(gòu)光兩邊邊緣位置的中值,從而得到中心點(diǎn):
式中:a、b分別表示單根結(jié)構(gòu)光在每一行得到的最左側(cè)和最右側(cè)的非零像素點(diǎn)對(duì)應(yīng)的列坐標(biāo)值;c為目標(biāo)值。幾何中心法原理簡(jiǎn)單,運(yùn)行速度快,并且此方法只對(duì)提取的邊緣進(jìn)行計(jì)算,對(duì)噪聲點(diǎn)不敏感,可以穩(wěn)定地提取到結(jié)構(gòu)光的幾何中心,從而快速粗略得到結(jié)構(gòu)光像素級(jí)中心線,如圖2 所示。
圖2 幾何中心法求取中心線Fig. 2 Center line obtained by geometric center method
實(shí)際情況中,幾何中心法提取的中心線遠(yuǎn)不能滿足工業(yè)要求。為了精確定位結(jié)構(gòu)光的中心位置,需要對(duì)初步提取的中心線進(jìn)行法線求取,再通過(guò)法線方向上的有效像素點(diǎn)集進(jìn)行灰度重心法。目前對(duì)結(jié)構(gòu)光法線求取最常用的為Steger 算法。此方法原理是對(duì)圖像進(jìn)行多次高斯卷積,得到圖像的Hessian 矩陣,然后對(duì)Hessian 矩陣進(jìn)行特征值分解,將絕對(duì)值最大的特征值對(duì)應(yīng)的特征向量做為當(dāng)前像素點(diǎn)的法線方向。雖然具有較高的精度和穩(wěn)健性,但需要對(duì)圖像進(jìn)行多次二維高斯卷積,計(jì)算量大,難以滿足實(shí)時(shí)性要求。因此本文選擇PCA方法[9]求取當(dāng)前點(diǎn)的法線向量,PCA 方法不需要進(jìn)行多次卷積,可以大大減少計(jì)算量,減少了不必要的時(shí)間和資源開銷。
在實(shí)際拍攝中,得到的結(jié)構(gòu)光圖片中往往會(huì)存在噪聲,極大影響結(jié)構(gòu)光條紋提取效果。對(duì)此本文使用二維高斯卷積對(duì)提取的結(jié)構(gòu)光圖像進(jìn)行計(jì)算,能有效降低噪聲對(duì)提取條紋中心的負(fù)面影響。其計(jì)算公式為
經(jīng)過(guò)二維高斯卷積可得到條紋圖像的梯度分布圖,選取幾何中心法得到的像素級(jí)中心點(diǎn)作為計(jì)算法向的主要點(diǎn)集,可快速求取激光條紋的形變情況。假設(shè)(Gx,Gy)表示梯度向量,則梯度向量的協(xié)方差矩陣C為
利用主成分分析法對(duì)協(xié)方差矩陣進(jìn)行特征分解,得到最大特征值對(duì)應(yīng)的特征向量即為法線方向。則特征值和對(duì)應(yīng)的特征向量表達(dá)為
式中:特征值λ1、λ2對(duì)應(yīng)的特征向量分別為v1、v2,由表達(dá)式可知,λ1>λ2,因此,對(duì)應(yīng)的特征向量v1為條紋法線方向,再對(duì)法線向量進(jìn)行歸一化處理可得到與法線方向一致的單位向量n=(nx,ny)T,為后續(xù)法線引導(dǎo)提供了條件,圖3 為法線方向示意圖。
圖3 法線方向示意圖Fig. 3 Schematic diagram of normal direction
當(dāng)不考慮激光條紋法線方向時(shí),傳統(tǒng)的灰度重心法對(duì)在x方向或者y方向呈高斯分布的激光條紋具有很好的提取效果,其x方向或y方向灰度值特性分布如圖4 曲線a;相反,當(dāng)結(jié)構(gòu)光條紋出現(xiàn)曲率較大時(shí),此時(shí)激光條紋的橫向或者縱向的灰度值并不符合高斯分布,如圖4 曲線b,提取的激光線中心線會(huì)有很大偏差,造成重建效果差。
圖4 激光條紋灰度分布特性曲線圖Fig. 4 Curves of gray distribution properties of laser stripes
根據(jù)PCA 求取的法線方向,可得到此時(shí)結(jié)構(gòu)光條紋沿法線方向橫截面的二維圖像分布。而傳統(tǒng)的灰度重心法只考慮在橫向或者縱向分布的結(jié)構(gòu)光條紋,在提取曲率較大的激光條紋中心線時(shí)并沒(méi)有較好的效果[16],導(dǎo)致提取的激光線出現(xiàn)折線情況較多,并不光滑,與實(shí)際及光條紋中心線偏差較大[17]。為了能更充分地利用灰度重心法尋找對(duì)提取中心點(diǎn)有貢獻(xiàn)的鄰近激光點(diǎn),使其提取的中心線更加穩(wěn)定,并且不會(huì)造成很大的偏差。因此本文提出基于法線引導(dǎo)的中心線亞像素提取方法,此方法能夠使結(jié)構(gòu)光條紋法線方向分布的像素參與計(jì)算,從而更準(zhǔn)確地提取結(jié)構(gòu)光中心線。其具體過(guò)程如下:
首先是通過(guò)幾何中心法得到像素級(jí)中心線,初步對(duì)中心線進(jìn)行定位。對(duì)提取到的中心點(diǎn),利用八鄰域方法對(duì)當(dāng)前像素點(diǎn)進(jìn)行角度劃分,每45°劃分1 個(gè)區(qū)域,總共劃分8 個(gè)區(qū)域,分別對(duì)應(yīng)其八鄰域,如圖5(a)所示。利用得到的法線角度對(duì)其鄰域進(jìn)行有效像素的提取,提取步驟如下:
圖5 8 角度劃分以及尋找有效點(diǎn)示意圖Fig. 5 Schematic diagram of eight-angle division and searching for effective points
1) 以當(dāng)前單像素中點(diǎn)為中心,求取與法線方向目標(biāo)點(diǎn)連線夾角;
2) 根據(jù)求取當(dāng)前點(diǎn)的角度與區(qū)域劃分的角度進(jìn)行對(duì)比,選擇符合角度區(qū)間的八鄰域之一;
3) 將選擇的八鄰域之一的點(diǎn)作為有效點(diǎn)p進(jìn)行存儲(chǔ),并以此為當(dāng)前點(diǎn),繼續(xù)進(jìn)行與法線方向目標(biāo)點(diǎn)連線求取夾角,返回步驟2)。
提取中心點(diǎn)鄰域的有效點(diǎn)集如圖6 所示,圖6(a)是利用幾何中心法得到中心線獲得的法線方向;圖6(b)則是使用法線引導(dǎo)法對(duì)中心點(diǎn)橫截面提取的有效像素。
圖6 有效點(diǎn)集示意圖Fig. 6 Schematic diagram of effective point set
最后利用(10)式、(11)式進(jìn)行灰度重心法。
式中:Gx(x,y)表示中心點(diǎn)x方向的像素集合;Gy(x,y)表示中心點(diǎn)y方向的像素集合;xi與yi分別表示最終提取的結(jié)構(gòu)光中心點(diǎn)。通過(guò)遍歷所有幾何中心法得到的中心點(diǎn),尋找中心點(diǎn)求取亞像素點(diǎn)的有效像素點(diǎn)集,最終使用灰度重心法可得到亞像素級(jí)中心點(diǎn)。
為了驗(yàn)證本文算法的有效性,搭建了線結(jié)構(gòu)光的視覺(jué)測(cè)量系統(tǒng),以獲取多條結(jié)構(gòu)光圖片。本次視覺(jué)測(cè)量系統(tǒng)采用了分辨率為1 280×1 024 像素的彩色工業(yè)相機(jī)采集圖像和以中心波長(zhǎng)為420 nm 的藍(lán)紫色激光線作為投射光源。實(shí)驗(yàn)軟件環(huán)境為win10 系 統(tǒng),visual studio2017 在win64 Debug 模 式下使用opencv4.30 進(jìn)行本文算法的編寫。
圖7(a)為攝像機(jī)采集到投射在平面上的原始激光光條圖像,圖7(b)~圖7(d)分別采用Steger算法、灰度重心法和本文算法的提取部分效果對(duì)比??梢钥吹剑疚乃惴ㄝ^其他2 種算法具有近似的提取效果。
圖7 激光原圖及算法提取效果對(duì)比圖Fig. 7 Comparison of original laser image and extraction effect of algorithm
為了進(jìn)一步驗(yàn)證所提方法對(duì)提取激光線效果的優(yōu)越性,因結(jié)構(gòu)光在二維平面內(nèi)的投影為直線分布,本文將多線激光進(jìn)行單根線分離。對(duì)每種方法提取到的激光點(diǎn)數(shù)進(jìn)行單獨(dú)的直線擬合,然后分別求取每個(gè)點(diǎn)到擬合直線的平均距離作為偏差進(jìn)行驗(yàn)證。最終得到的擬合像素偏差結(jié)果如表1所示。
從表1 可以看出,本文方法較其他2 種方法像素偏差更小,證明了激光線呈傾斜狀態(tài)時(shí),能更好地提取橫截面的有效像素,充分發(fā)揮灰度重心法的提取效果,使結(jié)果更加逼近真實(shí)的結(jié)構(gòu)光形狀。Steger 算法在本文的像素偏差較大,是因?yàn)镾teger 算法的連接性更強(qiáng),平滑性更好,但很難保證提取的激光線分布在能量大的中心線上。
表1 光條中心提取結(jié)果及擬合直線偏離誤差Table 1 Extraction results of light strip center and deviation error of fitting straight line
由于激光線變化能將物體表面形狀細(xì)小的變化表現(xiàn)出來(lái),因此提取中心線時(shí)能保留激光線變化的細(xì)節(jié)也是高精度激光線三維重建的關(guān)鍵。為了驗(yàn)證本文算法保留細(xì)節(jié)的有效性,選取物體表面有較小凹陷的光條圖像作為對(duì)比實(shí)驗(yàn)的源圖像。原始光條如圖8(a)所示,圖8(b)~圖8(f)為圖8(a)實(shí)框內(nèi)分別使用Steger 算法、方向模板法、灰度重心法、文獻(xiàn)[13]以及本文算法提取效果圖,其上排是原圖中提取激光中心線的位置圖,下排則是激光中心線的單獨(dú)效果圖。
圖8 各種算法提取效果圖Fig. 8 Effect diagram extracted by various algorithms
從圖8(b)可以看出,Steger 算法提取的激光中心線有較好的連通性,但其中心分布并不在能量真正集中的像素點(diǎn)上,在激光條紋曲率較大時(shí)并不適用,反被其算法性平滑掉,這在精度需求極高時(shí)不適用;圖8(c)中,方向模板法得出效果圖有一部分中心線并沒(méi)有分布在能量集中的點(diǎn)上,凹陷處也沒(méi)能很好地反映出物體表面形狀,在工業(yè)測(cè)量中是一種致命缺陷;圖8(d)效果則是用灰度重心法提取的激光線,雖能將細(xì)節(jié)粗略反映出來(lái),但是其他地方出現(xiàn)許多雜點(diǎn),并且模糊不清,很難與真正的缺陷識(shí)別開;圖8(e)為文獻(xiàn)[13]效果圖,可以看出,在激光線邊緣較穩(wěn)定時(shí),能夠較好地提取激光線中心點(diǎn),當(dāng)邊緣出現(xiàn)抖動(dòng)時(shí),所參與的計(jì)算點(diǎn)少而不穩(wěn)定,產(chǎn)生很大的中心點(diǎn)波動(dòng),對(duì)邊緣梯度幅值較大的點(diǎn)依賴性強(qiáng);而圖8(f)則是用本文方法提取中心線,提取的中心線不僅分布在能量集中的點(diǎn)上,還能較好地反映出物體表面的形變情況,其他地方則是比灰度重心法更加平滑,并且只在幾何中心點(diǎn)兩側(cè)沿法線尋找有效點(diǎn)集,不易受邊界點(diǎn)影響,客觀地將凹陷處與其他地方區(qū)分開。
為了客觀評(píng)價(jià)本文算法的穩(wěn)定性,將各種算法提取的中心點(diǎn)進(jìn)行曲線擬合,求取點(diǎn)到擬合曲線之間的均方根誤差(root mean square error,RMSE)eRMSE,其數(shù)學(xué)表達(dá)式為
式中:(xi,yi) 表示真實(shí)中心線上像素點(diǎn)坐標(biāo);(Xi,Yi)表示提取到中心線上像素點(diǎn)坐標(biāo);Ω 表示中心線各像素點(diǎn)的橫坐標(biāo)集合;n則表示提取中心點(diǎn)的個(gè)數(shù)。根據(jù)表2 各算法的RSME 數(shù)據(jù)可知,本文算法比傳統(tǒng)的灰度重心法提高了0.233 9 像素,與Steger算法、方向模板法和文獻(xiàn)[13]的誤差接近。說(shuō)明本文算法在提取激光線時(shí)既保證了精度也保證了細(xì)節(jié),具有較好的實(shí)用性。
表2 各種算法的均方根誤差Table 2 Root mean square error of various algorithms
為了驗(yàn)證本文算法的適用性,還測(cè)試了其他表面粗糙或者具有階梯式的物體,激光投射在其表面會(huì)相應(yīng)產(chǎn)生形變。圖9(a)、圖9(c)和圖9(e)表示原圖,圖9(b)、圖9(d)及圖9(f)表示利用本文算法得到的效果圖。由圖9 可見(jiàn),提取結(jié)果均與原圖激光分布具有很好的紋路一致性。
圖9 激光線提取示意圖Fig. 9 Schematic diagram of laser line extraction
為了提升激光線的提取精度并保留細(xì)節(jié),本文結(jié)合各算法特點(diǎn)提出了基于法線角度引導(dǎo)的激光線提取方法。該方法首先對(duì)圖像做了一定的預(yù)處理;然后利用幾何中心法初步提取激光中心線;再利用主成分分析法求取中心線的法線方向,對(duì)中心點(diǎn)劃分角度,根據(jù)角度提取八鄰域中的有效像素;最后對(duì)每個(gè)中心點(diǎn)的有效點(diǎn)集使用灰度重心法。該方法能充分發(fā)揮提取能量集中且為亞像素中心點(diǎn)。實(shí)驗(yàn)結(jié)果表明本文算法表現(xiàn)突出,比傳統(tǒng)的灰度重心法提升了0.2339 像素,能夠很好地反映出物體表面起伏情況,在激光條紋曲率較大的地方能有效提取細(xì)節(jié),為后續(xù)高精度三維重建奠定了良好的基礎(chǔ)。