劉博存,常思杰,林浩田,江 靜
(北京聯(lián)合大學(xué),北京 100020)
結(jié)構(gòu)光測量(SLI)技術(shù)作為一種主動光學(xué)三維測量技術(shù)[1],廣泛應(yīng)用于缺陷檢測等領(lǐng)域。隨著國內(nèi)外各種雙目立體視覺與結(jié)構(gòu)光方案在制造業(yè)的普及,針對結(jié)構(gòu)和紋理越來越復(fù)雜對象的三維重建精度與完整性需求也逐漸變高,學(xué)者們開始運用雙目結(jié)構(gòu)光技術(shù)進(jìn)行研究。陶俊[2]提出一種全自動三維曲面重建及繪制其紋理的方法,利用投影設(shè)備人為給三維曲面加上紋理特征,攝取帶有紋理特征的序列影像和不帶有投影紋理的曲面真實紋理;趙磊[3]提出一種基于格雷碼的立體匹配方法,通過向被測物投射格雷碼增加其表面特征,提高特征提取的精度。鑒于此類,本文提出一種紋理與空間編碼結(jié)構(gòu)光疊加情況下的立體視覺改進(jìn)算法,以解決疊加導(dǎo)致雙目立體視覺無法計算出真實視差的問題。該算法對比引入結(jié)構(gòu)光前后兩次拍照視差結(jié)果,根據(jù)紋理復(fù)雜區(qū)域進(jìn)行視差優(yōu)選,用加入結(jié)構(gòu)光之前視差替換加入結(jié)構(gòu)光后壞點視差,來實時提高雙目立體視覺算法視差重建完整性。利用改進(jìn)算法對單一平面、電木工件進(jìn)行三維重建,觀察視差和平面深度結(jié)果衡量改進(jìn)算法對OPENCV中SGBM算法[4]、BM算法[5]、HALCON中NCC算法[6]的效果。
立體匹配算法基本原理如圖1所示:首先以左視圖中某個像素點為中心,選取一個母窗口。取能量代價函數(shù)E(d)(如式(1)所示)的最小值,在對應(yīng)右視圖中的掃描路徑(如圖1中箭頭)上尋找最相似的窗口。其中,匹配代價C(p,d)反映了母窗口p在滑動距離d時與匹配窗口的相似程度,平滑束縛P(dq-dp)反映了在距離d內(nèi)母窗口p和相鄰窗口q之間的像素差異與梯度,一些局部匹配算法取消了平滑束縛。
圖1 立體匹配算法基本原理Fig.1 Basic principle of stereo matching algorithm
(1)
式中,根據(jù)E(d)最小值求出的左右視圖中母窗口與最佳匹配窗口間的距離d,即母窗口中心坐標(biāo)視差。重復(fù)以上過程生成以左圖坐標(biāo)為準(zhǔn)的視差圖,得到深度信息。學(xué)者們對不同預(yù)處理方法、代價函數(shù)和掃描路徑等研究,形成了目前各種立體匹配算法。
立體匹配算法通過對比匹配窗口滑動過程中的匹配代價,確定匹配的最佳窗口。一旦當(dāng)匹配窗口所在的圖像區(qū)域像素紋理特征匱乏(圖2中的白色框)或者相同紋理重復(fù)出現(xiàn)(圖2中的黑色框)時,會導(dǎo)致匹配算法中能量代價函數(shù)E(d)最小值失去唯一性,繼而無法找出匹配窗口[7]。出于視差唯一化[8]的要求,這些窗口的核心視差會被置0。在視差值被歸一到灰度0~255之后,會在視差圖中直觀體現(xiàn)為多個“洞”,文中將其認(rèn)定為視差壞點。主動立體視覺借助向該區(qū)域投射結(jié)構(gòu)光以豐富紋理,幫助匹配算法求出視差,圖3為結(jié)構(gòu)光立體視覺示意圖。
圖2 紋理特征匱乏對立體匹配的影響:視差圖(a)與實際圖像(b)Fig.2 The influence of texture feature deficiency on stereo matching:parallax image (a) and actual image (b)
圖3 結(jié)構(gòu)光立體視覺示意圖Fig.3 Schematic diagram of structure light stereovision
在紋理特征匱乏區(qū)域的滑動窗口匹配過程中,為保證不同滑動窗口間的差異盡可能地大,就要求結(jié)構(gòu)光本身在不同位置的像素特征盡可能的不同[9],且互異性越大越好。為了提高結(jié)構(gòu)光的內(nèi)部互異性引入兩個指標(biāo):漢明距離HD(如公式(2)所示)(即結(jié)構(gòu)光序列中所有滑動窗口間像素不同個數(shù))[10],結(jié)構(gòu)光序列中漢明距離最小值MHD(如公式(3)所示)[11]。
(2)
MHD=Min(HD1,HD2…)
(3)
HD(2)式中x、y表示任意兩個窗口中例如圖4的070、702、025。R表示窗口內(nèi)所有像素的位置,x[i]和y[i]表示兩個滑動窗口中i位置像素值。MHD中HD1,HD2……是序列中所有窗口間的漢明距離。
圖4 3×3窗口結(jié)構(gòu)光的滑動窗口Fig.4 The matching window of 3×3 window structure light
確定結(jié)構(gòu)光生成所需的性能指標(biāo)MHD后,將其作為約束條件來控制結(jié)構(gòu)光的內(nèi)部互異性,為得到所需性能結(jié)構(gòu)光序列,本文提出一種隨機遞歸的結(jié)構(gòu)光序列生成算法,流程如圖5所示。
圖5 結(jié)構(gòu)光序列生成過程Fig.5 Structure light sequence generation process
利用MHD生成的4種結(jié)構(gòu)光序列,從上到下縱向重復(fù)投影生成最終結(jié)構(gòu)光的序列見圖6。
圖6 四種序列的結(jié)構(gòu)光Fig.6 Four sequences of structure light
通過實驗發(fā)現(xiàn),在視場中加入空間編碼結(jié)構(gòu)光確實提升了紋理特征不明顯區(qū)域的匹配效果,但同時也影響了某些紋理豐富區(qū)域的匹配結(jié)果。因為視場本身的紋理與結(jié)構(gòu)光兩者疊加使得同一掃描線上視差搜索范圍內(nèi)出現(xiàn)多個像素相同的窗口(見圖7)降低了部分窗口的唯一性。觀察發(fā)現(xiàn)加入結(jié)構(gòu)光后,本來紋理豐富區(qū)域(框體)反而出現(xiàn)了比無紋理區(qū)域更多的視差壞點,見圖8。
圖7 紋理與結(jié)構(gòu)光重疊后出現(xiàn)多個像素相同的窗口Fig.7 When the texture and structure lights overlap, multiple windows of the same pixel appear
圖8 結(jié)構(gòu)光對紋理復(fù)雜區(qū)域的效果Fig.8 The effect of structure light on complex textured areas
為了驗證該現(xiàn)象是否具有普遍性,本文用Jongwoo Lim[12]、Federico Tombari[13]、T.Molinier[14]和Kurt Konolige[15]四位學(xué)著的空間編碼結(jié)構(gòu)光(見圖9),配合SGBM、BM、NCC三種立體匹配算法。利用實驗設(shè)備(圖10(a)),對單一平面(圖10(b))、電木壓模工件(圖10(c))進(jìn)行視差重建。并對有紋理和沒有紋理兩種情況下的平面和工件進(jìn)行對照實驗,觀察兩種情況視差圖來推斷疊加是否對四種結(jié)構(gòu)光下立體匹配有影響。實驗結(jié)果分兩組,圖11~14是對測試平面的測試結(jié)果、圖15~18是對工件的測試結(jié)果。圖中,“…”框是結(jié)構(gòu)光下紋理豐富情況的實驗結(jié)果;虛線框是結(jié)構(gòu)光下紋理匱乏情況的實驗結(jié)果;實線框體內(nèi)為結(jié)構(gòu)光與紋理疊加的區(qū)域。
圖9 四個研究團隊的結(jié)構(gòu)光Fig.9 The structure light of four research teams
圖10 實驗設(shè)備和素材Fig.10 Experimental equipment and materials
圖11 Jongwoo Lim結(jié)構(gòu)光下測試平面的結(jié)果Fig.11 Test results under Jongwoo Lim structure light
圖12 Federico Tombari結(jié)構(gòu)光下測試平面的結(jié)果Fig.12 Test results under Federico Tombari structure light
圖13 T.Molinier結(jié)構(gòu)光下測試平面的結(jié)果Fig.13 Test results under T.Molinier structure light
圖14 Kurt Konolige結(jié)構(gòu)光下測試平面的結(jié)果Fig.14 Test results under Kurt Konolige structure light
圖15 Jongwoo Lim結(jié)構(gòu)光下工件的結(jié)果Fig.15 Test results of workpiece under Jongwoo Lim structure light
圖16 Federico Tombari結(jié)構(gòu)光下工件的結(jié)果Fig.16 Test results of workpiece under Federico Tombari structure light
圖17 T.Molinier結(jié)構(gòu)光下工件的結(jié)果Fig.17 Test results of workpiece under T.Molinier structure light
圖18 Kurt Konolige結(jié)構(gòu)光下工件的結(jié)果Fig.18 Test results of workpiece under Kurt Konolige structure light
兩組實驗結(jié)果直接表明,紋理與結(jié)構(gòu)光疊加對立體匹配算法的影響并非個例,無論是單一平面還是工件在四種結(jié)構(gòu)光下生成的視差圖都會受紋理和結(jié)構(gòu)光疊加的影響。這至少說明以圖像特征為匹配索引的BM算法、SGBM算法、NCC算法在結(jié)構(gòu)光下對紋理的適應(yīng)性都有著不同程度的不足,以不足為出發(fā)點,本文著手于針對紋理與空間編碼結(jié)構(gòu)光疊加情況下的立體視覺改進(jìn)算法。
加入結(jié)構(gòu)光后會造成紋理與結(jié)構(gòu)光的疊加,若不加入結(jié)構(gòu)光又會讓紋理匱乏區(qū)域視差效果陡降。改進(jìn)思路為在加入結(jié)構(gòu)光之前就計算一次視差,然后用這些視差替換加入結(jié)構(gòu)光后紋理復(fù)雜區(qū)域內(nèi)的壞點。這樣既保證了紋理匱乏區(qū)域視差,還優(yōu)化了豐富區(qū)域視差。改進(jìn)算法總體流程如圖19。
圖19 改進(jìn)算法的思路Fig.19 The overall flow of the improved algorithm
改進(jìn)算法的實施步驟:
第1步:兩次拍攝,一次加結(jié)構(gòu)光和一次不加結(jié)構(gòu)光,生成對應(yīng)的立體校正圖像作為測試圖像。
第2步:對沒有加入結(jié)構(gòu)光的校正圖片求出紋理豐富區(qū)域,并求出該區(qū)域的視差,其過程為:首先對校正過的左右圖像(圖21(a)、圖21(b))進(jìn)行銳化和二值化得到如圖21(c)、圖21(d)后,進(jìn)行匹配得出紋理豐富區(qū)域(例如圖21(e)、(f)、(g))。定義滑動窗口與母窗口間匹配代價為bz(如公式(4)所示)。bz中w1為母窗口,w2為滑動窗口,HD(w1,w2)為窗口w1與w2的漢明距離,L為窗口的像素邊長。定義滑動過程中所有窗口bz最大值定義為max1,第二大值為max2。在匹配過程(圖20)中求出的紋理復(fù)雜窗口必須滿足約束條件:max1≥窗口像素總數(shù)L×L的60%且max1×85%≥max2。
圖20 計算紋理豐富區(qū)域的匹配過程Fig.20 Calculates the matching process for texture-rich regions
圖21 紋理豐富區(qū)域Fig.21 Image texture rich area
bz(w1,w2)=L×L-HD(w1,w2)
(4)
第3步:根據(jù)加入結(jié)構(gòu)光的圖片生成視差圖,在紋理豐富區(qū)域內(nèi)與第2步的視差結(jié)果進(jìn)行優(yōu)選。視差優(yōu)選是用加入結(jié)構(gòu)光之前視差替換加入結(jié)構(gòu)光后壞點視差,算法返回優(yōu)選后的值加入結(jié)構(gòu)光視差圖,以達(dá)到實時提高雙目立體視覺算法視差重建完整性的目的。優(yōu)選的過程本質(zhì)是只要在紋理豐富區(qū)域內(nèi)加入結(jié)構(gòu)光的視差不在匹配算法的設(shè)定范圍內(nèi),且未加入結(jié)構(gòu)光的視差在匹配算法的設(shè)定范圍內(nèi),就用未加入結(jié)構(gòu)光的視差進(jìn)行替換。
為了論證紋理明顯區(qū)域約束條件的合理性,在同一疊加區(qū)域內(nèi)使用不同約束條件來觀察優(yōu)選點個數(shù)和紋理豐富窗口個數(shù)來(表1)衡量不同約束條件的性能。結(jié)果表示max1≥L×L×60%且max1×85%≥max2優(yōu)選點數(shù)足夠多且紋理豐富區(qū)域足夠少,從而同時提高視差重建完整度和視差唯一性。
表1 在不同約束條件下的優(yōu)選點數(shù)和紋理豐富窗口數(shù)Tab.1 Improvement points and texture rich windows under different constraints
改進(jìn)算法把在視場中加入結(jié)構(gòu)光的視差圖(圖22(e))在紋理豐富區(qū)域(圖22(b))內(nèi)壞點的視差替換為未加入結(jié)構(gòu)光的視差(圖22(c)),得到最終的視差圖(圖22(d))。以上視差圖都與左圖像(圖22(a))坐標(biāo)相互對應(yīng)。進(jìn)行對比發(fā)現(xiàn)通過改進(jìn)算法得到的視差圖(圖22(d))相比沒有進(jìn)行改進(jìn)而生成的視差圖(圖22(e))在紋理豐富區(qū)域的視差效果有著顯著的改善。
圖22 改進(jìn)算法的視差效果Fig.22 Improved parallax effect of the scheme
在不同距離上對紋理復(fù)雜平面與紋理匱乏平面投射3×3MHD=2的結(jié)構(gòu)光進(jìn)行深度檢測。計算出改進(jìn)前后的深度圖像。對劃定區(qū)域(圖23中框體)求出檢測距離的平均值(如公式(5)所示),判斷改進(jìn)算法對深度檢測的有效性。通過SGBM、BM、NCC算法計算的距離平均值結(jié)果如表2~4所示。
圖23 劃定區(qū)域分布Fig.23 Distribution of designated area
表2 BM算法在不同情況下的距離計算結(jié)果Tab.2 Distance calculation results of BM algorithm under different conditions
表3 SGBM算法在不同情況下的距離計算結(jié)果Tab.3 Distance calculation results of SGBM algorithm under different conditions
表4 NCC算法在不同情況下的距離計算結(jié)果Tab.4 Distance calculation results of NCC algorithm under different conditions
(5)
式中,D(x,y)為坐標(biāo)(x,y)處的深度,n、n0和m、m0分別為劃定區(qū)域內(nèi)坐標(biāo)y和x的上下限。
結(jié)合3組距離計算結(jié)果,發(fā)現(xiàn)紋理匱乏平面在結(jié)構(gòu)光投射下的結(jié)果比紋理復(fù)雜的結(jié)果更接近實際距離,說明紋理和結(jié)構(gòu)光的疊加對深度檢測確有影響。我們進(jìn)一步對比紋理復(fù)雜平面在改進(jìn)前后的深度檢測結(jié)果與實際距離間的差(圖24),發(fā)現(xiàn)算法提升了平面區(qū)域平均深度檢測精度的1%、同時隨著實際距離的線性增加改進(jìn)結(jié)果增加趨勢也更顯著,這證明該算法普遍有效。
為了驗證改進(jìn)算法對立體工件的3D檢測、建模、點云重建是否有提升效果,本文選取一個電木壓模工件,在4種結(jié)構(gòu)光下完成立體匹配算法改進(jìn)前后的視差重建(如圖25所示)。
圖25 改進(jìn)前后的視差結(jié)果Fig.25 Parallax results before and after improvement
通過對比工件改進(jìn)前后的視差結(jié)果,發(fā)現(xiàn)改進(jìn)算法對不同結(jié)構(gòu)光下立體工件的三維重建確有效果,而且通過對比不同MHD結(jié)構(gòu)光結(jié)果發(fā)現(xiàn)視差效果會隨著結(jié)構(gòu)光的MHD增大而提升。為判斷改進(jìn)算法是否會對工件的深度結(jié)果造成失真,將算法改進(jìn)前后的深度結(jié)果分別進(jìn)行點云重建,在重建時會對優(yōu)選過的點進(jìn)行染色,觀察染色點(圖26)是否出現(xiàn)塌陷、凸出等噪音。觀察發(fā)現(xiàn)3組點云均未出現(xiàn)失真現(xiàn)象。
圖26 染色后的點云Fig.26 The point cloud after staining
為應(yīng)對制造業(yè)中經(jīng)過打碼、噴漆、貼標(biāo)、刻蝕等添加特定紋理的三維檢測對象,在2D視覺無法滿足的分揀、定位、逆向工程、缺陷檢測等工業(yè)環(huán)節(jié)中的三維檢測。本文以電木壓模工件為實驗對象,針對立體匹配算法在結(jié)構(gòu)光下對紋理豐富區(qū)域的適應(yīng)性問題,提出了一種針對紋理與空間編碼結(jié)構(gòu)光重疊情況下的立體視覺改進(jìn)算法。該算法通過算出圖像紋理復(fù)雜區(qū)域,并在這些區(qū)域通過加入結(jié)構(gòu)光前后的兩種視差進(jìn)行優(yōu)選來提高深度檢測精度。實驗結(jié)果表明,算法實現(xiàn)了在結(jié)構(gòu)光下對紋理復(fù)雜區(qū)域深度檢測精度1%的提高和對工件點云重建完整性的提高。該算法只需要在投射結(jié)構(gòu)光前多進(jìn)行一次拍照無需添加其他設(shè)備,可實施性高。但算法也有缺點:耗費了更多的內(nèi)存,在未來的應(yīng)用中應(yīng)根據(jù)平臺性能優(yōu)化。