田婷婷,高瑞貞,張京軍
河北工程大學(xué)機(jī)械與裝備工程學(xué)院,河北 邯鄲 056038
三維重建在移動(dòng)機(jī)器人自主導(dǎo)航系統(tǒng)、航空及遙感測(cè)量、工業(yè)自動(dòng)化系統(tǒng)、虛擬現(xiàn)實(shí)以及醫(yī)療診斷等各個(gè)領(lǐng)域有著廣闊的應(yīng)用前景[1]。目前,三維重建方法主要有三種。(1)利用建模軟件進(jìn)行手工重建。通過(guò)三維CAD、3DMax 等軟件進(jìn)行三維重建,需要預(yù)先確定建模對(duì)象在重建場(chǎng)景中的位置姿態(tài)、尺寸大小和紋理特征等信息[2]。(2)利用深度掃描儀、激光器、雷達(dá)等設(shè)備來(lái)進(jìn)行三維重建。這種方法自動(dòng)獲取對(duì)象建模信息,數(shù)據(jù)比較精確,但相關(guān)設(shè)備昂貴,不易攜帶。(3)利用圖像進(jìn)行三維重建。通過(guò)對(duì)單張圖像(單目立體視覺(jué))或多張圖像(雙目立體視覺(jué)或者多目立體視覺(jué))進(jìn)行特征檢測(cè)與匹配,獲得深度信息進(jìn)行三維重建。單目立體視覺(jué)需要提取特征數(shù)據(jù),因而過(guò)程繁瑣。雙目立體視覺(jué)通過(guò)立體匹配獲得視差圖,根據(jù)視差圖計(jì)算出物體的三維坐標(biāo),進(jìn)而實(shí)現(xiàn)三維重建[3,4]。
立體匹配是雙目立體視覺(jué)的關(guān)鍵步驟,易受遮擋、視差間斷等因素影響,導(dǎo)致在視差圖中存在較多的誤匹配區(qū)域[5]。改善視差圖的方法主要有兩種:一種是優(yōu)化立體匹配算法,能獲得較好的視差圖[6]。Hoc DK,et al.[7]通過(guò)修改SAD(Sum of Absolute Differences)算法,利用感興趣像素的邊緣像素估計(jì)視差值的差異,計(jì)算深度圖信息,具有減少像素的搜索數(shù)量、節(jié)省匹配時(shí)間和提高匹配效率等優(yōu)點(diǎn)。Hamzah RA,et al.[8]提出了高精度三維表面重建立體匹配算法,獲得了較高的匹配效率,同時(shí)有效抵抗了輻射度差異和邊緣失真。另一種方法是對(duì)視差圖進(jìn)行后處理,直觀反映立體匹配效果。Chao Z,et al.[9]利用灰度直方圖對(duì)左右視圖處理,使左右視圖灰度值近似,提高立體匹配的準(zhǔn)確性,獲得比較連續(xù)的視差圖。Nieradka G,et al.[10]首先對(duì)視差圖進(jìn)行邊緣檢測(cè)獲得邊緣圖像,其次進(jìn)行均勻性計(jì)算確定均勻性圖像,再次根據(jù)邊緣圖像和均勻性圖像采用形態(tài)學(xué)操作確定誤匹配區(qū)域,然后使用模糊中值算法去除誤匹配區(qū)域,最后利用拉普拉斯插值算法對(duì)視差圖增強(qiáng)。為了有效地進(jìn)行誤匹配區(qū)域的判別和消除,李從利等[11]結(jié)合序列圖像拼接的匹配算法,給出了基于同名區(qū)域面積差、區(qū)域重心同位、區(qū)域重心距離比及配準(zhǔn)參數(shù)復(fù)用四種誤匹配區(qū)域的消除方法。趙春暉等[12]利用基于特征點(diǎn)主方向的尺度信息的統(tǒng)計(jì)優(yōu)化方法來(lái)消除誤匹配,該算法對(duì)圖像的旋轉(zhuǎn)和縮放變換具有良好的魯棒性,對(duì)于具有重復(fù)結(jié)構(gòu)的圖像匹配效果也較好。
綜上所述,視差圖中的誤匹配區(qū)域直接影響三維重建效果,本文提出一種視差圖后處理優(yōu)化算法,用于消除誤匹配區(qū)域獲得平滑的視差圖,進(jìn)而實(shí)現(xiàn)良好的三維重建。文中首先采用標(biāo)準(zhǔn)數(shù)據(jù)集中的圖像對(duì)進(jìn)行立體匹配得到視差圖;其次采用基于區(qū)域的插值算法去除誤匹配;然后采用三角網(wǎng)格線性插值算法對(duì)視差圖進(jìn)行填補(bǔ);最后根據(jù)三角測(cè)量原理進(jìn)行三維重建,實(shí)驗(yàn)結(jié)果表明本文所提算法能夠較好地實(shí)現(xiàn)三維重建。
根據(jù)視差圖中匹配點(diǎn)對(duì)的數(shù)量劃分,主要分為稠密匹配和稀疏匹配[13]。稀疏匹配是特征匹配的自然延伸,針對(duì)一些特征點(diǎn)恢復(fù)其三維空間坐標(biāo),獲得的視差圖比較稀疏,有效信息較少,不利于重建三維結(jié)構(gòu)。而稠密匹配則恢復(fù)圖像中每一個(gè)像素點(diǎn)的空間坐標(biāo),與稀疏匹配方法相比可獲得較好的視差圖[14]。
立體匹配過(guò)程如圖1 所示。在左側(cè)圖像中,(Lu,Lv)處的像素對(duì)應(yīng)于右側(cè)圖像中(Lu-d,Lv)處的像素,其中d∈[dmin,dmax]表示匹配像素的搜索范圍,為了可靠獲得左側(cè)圖像中選定像素在右側(cè)圖像中的對(duì)應(yīng)點(diǎn),需要?jiǎng)?chuàng)建一個(gè)關(guān)于選定像素的模板匹配區(qū)域T,其大小設(shè)置為W×W。水平移動(dòng)模板匹配區(qū)域T穿過(guò)右側(cè)圖像。與模板匹配區(qū)域T最為相似的那個(gè)位置就是對(duì)應(yīng)點(diǎn),從而計(jì)算出視差值。由于圖像對(duì)之間的尺度和姿態(tài)固定不變,采用此方法可以減小搜索范圍,提高匹配效率。
圖1 立體匹配Fig.1 Stereo matching
在模板匹配過(guò)程中,常用零均值歸一化互相關(guān)算法(Zero-mean normalized cross-correlation,ZNCC),進(jìn)行相似性判斷。ZNCC 計(jì)算式如下:
其中,I1[u,v]和I2[u,v]分別為左右圖像對(duì)應(yīng)匹配區(qū)域的中心點(diǎn)像素,I-1和I-2分別是左右圖像對(duì)應(yīng)匹配區(qū)域的像素平均值。
ZNCC 取值在[-1,1]之間,1 表示左右圖像匹配區(qū)域完全相同,-1 表示左右圖像匹配區(qū)域完全不同,通常認(rèn)為,ZNCC 值大于0.8 的區(qū)域匹配是良好匹配[15]。以標(biāo)準(zhǔn)數(shù)據(jù)集Middlebury[16]中的Bowling1圖像對(duì)和Rocks1 圖像對(duì)如圖2 所示為例,進(jìn)行立體匹配,剔除ZNCC 值小于0.8 的不良匹配區(qū)域,獲得視差圖如圖3 所示。
圖3 視差圖顯示,物體的連接處有明顯的不連續(xù)現(xiàn)象,并且伴有較多明亮點(diǎn)。這些亮點(diǎn)一般是誤匹配區(qū)域,導(dǎo)致三維重建效果較差。
圖2 標(biāo)準(zhǔn)圖像對(duì)Fig.2 Standard image pair
圖3 視差圖Fig.3 Disparity map
插值方法能夠?qū)σ暡顖D像素值進(jìn)行插補(bǔ)[17],預(yù)估視差圖特定區(qū)域的像素值,平滑視差圖,消除誤匹配區(qū)域。本節(jié)采用基于區(qū)域的插值算法和三角網(wǎng)格線性插值算法對(duì)視差圖進(jìn)行后處理。
在圖像處理中,插值算法主要有雙線性插值和雙三次插值[18]。雙線性插值對(duì)待插值點(diǎn)周圍相鄰的4 個(gè)像素點(diǎn)進(jìn)行插值計(jì)算,得出待插值點(diǎn)的像素值,插值公式如下:
其中,i、j均為非負(fù)整數(shù);f(i+u,j+v)表示待插值點(diǎn)像素;f(i,j)表示在原圖像中(i,j)位置像素點(diǎn)的像素值;u、v均為[0,1)區(qū)間的浮點(diǎn)數(shù),分別表示待插值點(diǎn)與最鄰近像素點(diǎn)在水平和豎直方向的距離。雙三次插值又稱立方卷積插值,插值函數(shù)計(jì)算公式為:
其中,I(X,Y)表示待插值點(diǎn)像素;aij(i,j=0,1,2,3)表示距離I 最近的16 個(gè)像素位置;W(i),W(j)分別表示橫縱坐標(biāo)的權(quán)重。
與雙線性插值相比,雙三次插值利用采樣點(diǎn)周圍16 個(gè)點(diǎn)的灰度值做三次插值,不僅考慮到4 個(gè)直接相鄰點(diǎn)的灰度影響,而且還考慮到各個(gè)鄰點(diǎn)間的灰度值變化率的影響。
由于雙三次插值要對(duì)周圍16 個(gè)相鄰的插值點(diǎn)做插值,如果要對(duì)整幅圖像的像素均采用同樣的算法,計(jì)算量會(huì)很大。為了減少計(jì)算量,考慮到圖像在比較平坦的區(qū)域像素值變化較小,在這部分區(qū)域可以采用雙線性插值算法,在像素變化明顯的區(qū)域采用雙三次插值算法,這樣可以在減小計(jì)算量的同時(shí)得到較好的視差圖。鑒于此,本節(jié)采用基于區(qū)域的插值算法,即定義一個(gè)閾值T,利用閾值T對(duì)圖像進(jìn)行區(qū)域劃分。首先計(jì)算待插值點(diǎn)周圍4 個(gè)領(lǐng)域點(diǎn)的方差D,方差D的計(jì)算公式為:
其中,d11、d12、d21、d22分別為待插值點(diǎn)在原圖像中對(duì)應(yīng)點(diǎn)的領(lǐng)域4 點(diǎn)的視差值;E表示該4 個(gè)點(diǎn)視差值的均值。
如果計(jì)算所得方差D小于設(shè)定的閾值T(本文選取T=20),則采用雙線性插值算法,反之則用雙三次插值計(jì)算。
經(jīng)過(guò)ZNCC 算法和基于區(qū)域的插值算法處理后,視差圖中產(chǎn)生空值(NaN)區(qū)域,即視差圖中的黑色區(qū)域。三角網(wǎng)格線性插值算法能夠根據(jù)空值區(qū)域周圍的視差值估計(jì)空值區(qū)域的視差值。三角網(wǎng)格線性插值算法主要根據(jù)數(shù)據(jù)點(diǎn)來(lái)產(chǎn)生三角網(wǎng)格,然后再使用“Linear”、“Cubic”、“Nearst”等方法來(lái)進(jìn)行插值,只要NaN 點(diǎn)附近有數(shù)據(jù),那么就可以利用附近的數(shù)據(jù)插值計(jì)算得到NaN 點(diǎn)的值。
雙目立體視覺(jué)[19]是由攝像機(jī)從不同角度同時(shí)獲得被測(cè)物體的兩幅圖像,采用視差原理和三角測(cè)量原理,根據(jù)相機(jī)的內(nèi)外參數(shù)以及圖像各個(gè)特征點(diǎn)的對(duì)應(yīng)關(guān)系恢復(fù)其三維空間坐標(biāo)值(圖4)。
圖4 雙目立體視覺(jué)成像原理Fig.4 Binocular stereo vision imaging principle
在該成像原理中,X,Y,Z為相機(jī)坐標(biāo)系,通常將左相機(jī)坐標(biāo)系當(dāng)作世界坐標(biāo)系,x-y為圖像坐標(biāo)系,u-v為像素坐標(biāo)系。設(shè)空間點(diǎn)P=(X,Y,Z)在左右兩個(gè)成像平面上形成的投影點(diǎn)分別為P′和P?,其在像素坐標(biāo)系下的坐標(biāo)分別為P′=(u1,v1),P?=(u2,v2);在圖像坐標(biāo)系下的坐標(biāo)分別為P′=(x1,y1),P?=(x2,y2);兩點(diǎn)在平面X-Z的投影點(diǎn)分別為P′1和P?1。左、右相機(jī)中心OL和OR之間的距離為基線B,在圖像平面的投影點(diǎn)分別為O1和O2。圖像平面與相機(jī)中心的距離為f,因此OLO1=ORO2=f。經(jīng)過(guò)立體校正后,P′與P?的縱坐標(biāo)相同,即v1=v2,y1=y2。
根據(jù)相機(jī)投影成像模型[20]有
圖中P1為空間點(diǎn)P 在OLXZ平面的投影,因?yàn)槿切蜳1P′1P?1與三角形P1OLOR相似,根據(jù)相似三角形原理[21],可得:
上式u1-u2=d,為對(duì)應(yīng)點(diǎn)的視差值,其值即為上部分所求的視差圖上每點(diǎn)的像素值。
點(diǎn)O1的像素坐標(biāo)為O1=(u0,v0),可得x1=u1-u0,y1=v1-v0。根據(jù)式(5)(6)可得空間點(diǎn)P的三維坐標(biāo):
根據(jù)雙目立體視覺(jué)的成像原理,再結(jié)合攝像機(jī)的內(nèi)外參數(shù)[22]以及視差圖可以得到物體的三維坐標(biāo),恢復(fù)物體的三維結(jié)構(gòu)。
分別用雙線性插值和雙三次插值以及基于區(qū)域的插值算法對(duì)原視差圖進(jìn)行處理,處理后的視差圖如表1 所示,算法的運(yùn)行時(shí)間如表2 所示。
表1 各種算法處理后的視差圖Table 1 Disparity diagram after processing by various algorithms
表2 各個(gè)算法運(yùn)行時(shí)間對(duì)比Table 2 Comparison of running time of each algorithm
對(duì)比表1 中的橢圓區(qū)域發(fā)現(xiàn),雙三次插值算法處理后的視差圖明亮區(qū)域明顯減少。根據(jù)表2,對(duì)比基于區(qū)域的插值算法與雙三次插值處理后的視差圖發(fā)現(xiàn),基于區(qū)域的插值算法在不影響視差圖質(zhì)量的情況下,運(yùn)算時(shí)間還少于雙三次插值運(yùn)行時(shí)間,這樣降低了對(duì)這個(gè)視差圖插值處理的計(jì)算量。
對(duì)基于區(qū)域的插值算法處理后的視差圖施加三角網(wǎng)格線性插值算法獲得視差圖如圖5 所示。圖5 中視差圖的黑色區(qū)域明顯比基于區(qū)域的插值算法處理后的視差圖中黑色區(qū)域減少,得到的視差圖比較稠密并且比原來(lái)平滑。
表3 為視差圖中NaN 值像素點(diǎn)所占比例,由表中數(shù)據(jù)可以得出經(jīng)過(guò)本文算法處理后的NaN 值數(shù)量減少,因此得到的視差圖比原來(lái)稠密且平滑。
圖5 三角網(wǎng)格線性插值算法處理后的視差圖Fig.5 Parallax diagram after processing by triangular mesh linear interpolation algorithm
表3 NaN 值所占比例Table 3 Proportion of NaN values
重建效果如圖6 所示,對(duì)比圖6 中的重建效果發(fā)現(xiàn),經(jīng)過(guò)視差圖平滑處理后,三維重建模型片狀點(diǎn)云現(xiàn)象減少,點(diǎn)云之間不再孤立,重建模型整體拼接更加自然,從而驗(yàn)證了本文算法的有效性。
圖6 三維重建效果Fig.6 3D reconstruction effect
利用雙目立體視覺(jué)進(jìn)行三維重建具有廣闊的應(yīng)用前景。立體匹配是雙目立體視覺(jué)的關(guān)鍵步驟,易受遮擋、視差間斷等因素影響,導(dǎo)致在視差圖中存在較多的誤匹配區(qū)域,直接影響三維重建效果。為了消除誤匹配區(qū)域、獲得平滑的視差圖,進(jìn)而實(shí)現(xiàn)良好的三維重建,本文主要從四個(gè)方面展開了研究:(1)分析立體匹配原理和過(guò)程,以標(biāo)準(zhǔn)數(shù)據(jù)集中的Bowling1 和Rocks1 圖像對(duì)為示例,立體匹配獲得視差圖,并指出誤匹配區(qū)域;(2)為了保證視差圖質(zhì)量,同時(shí)提高算法的處理效率,采用基于區(qū)域的插值算法,引入閾值:在像素變化較小的平坦區(qū)域,采用雙線性插值算法;在像素變化明顯的區(qū)域,采用雙三次插值算法;(3)經(jīng)過(guò)ZNCC 匹配算法和基于區(qū)域的插值算法處理后,視差圖中產(chǎn)生空值(NaN)區(qū)域,采用三角網(wǎng)格線性插值算法由空值區(qū)域周圍的視差值估計(jì)空值區(qū)域,實(shí)現(xiàn)視差圖填補(bǔ);(4)利用視差圖和三角測(cè)量原理進(jìn)行三維重建。通過(guò)實(shí)驗(yàn)驗(yàn)證本文算法,實(shí)驗(yàn)結(jié)果表明本文所提算法能夠很好的實(shí)現(xiàn)三維重建。
本文所提方法能夠較好地恢復(fù)物體的三維結(jié)構(gòu),同時(shí)減少了計(jì)算量、提高了處理效率。