陳嘉明,羅亞波
(武漢理工大學(xué) 機(jī)電工程學(xué)院,武漢 430070)
雙目立體視覺近年來在三維重建、視覺導(dǎo)航、醫(yī)療診斷等領(lǐng)域中取得應(yīng)用[1-2]。使用雙目立體視覺[3]將包含更多的三維信息并具有成本低、實(shí)現(xiàn)難度低的優(yōu)點(diǎn)。立體匹配精度是三維重建效果的決定因素,通過設(shè)定規(guī)則獲得稠密視差并轉(zhuǎn)化為深度作為三維重建的基礎(chǔ)?,F(xiàn)有的立體匹配算法仍然存在許多缺陷,如弱紋理區(qū)域以及重復(fù)紋理區(qū)域有大量誤匹配點(diǎn),如遮擋區(qū)域的誤匹配問題,以及在深度不連續(xù)區(qū)域匹配效果不佳等問題。
局部立體匹配算法研究包括根據(jù)鄰域信息選擇合適窗口,如自適應(yīng)窗口算法[4]、多種匹配算法設(shè)定不同權(quán)值獲得具體窗口、對(duì)圖像進(jìn)行分割并將分割所得小區(qū)域[5]作為匹配基元的匹配算法等。
根據(jù)相機(jī)標(biāo)定求得相機(jī)的內(nèi)外參數(shù)并對(duì)左右相機(jī)進(jìn)行立體校正使得左右成像平面符合極線約束。校正完成后以左圖為基準(zhǔn),設(shè)計(jì)步驟從右圖中尋找對(duì)應(yīng)點(diǎn)并計(jì)算列差值,即視差d。立體匹配算法步驟如圖1所示[6]。
圖1 立體匹配算法步驟Fig.1 Steps of stereo matching algorithm
圖像需進(jìn)行濾波處理進(jìn)行噪聲去除,常用的濾波方法有高斯雙邊濾波、中值濾波、直方圖均衡濾波[7]?;谙袼攸c(diǎn)的匹配代價(jià)主要通過灰度值、梯度等信息進(jìn)行計(jì)算,計(jì)算結(jié)果作為相似性的度量。常用的2 種代價(jià)計(jì)算方法分別為AD(absolute differences)變換和Census 變換,AD 變換算法為
式中:CAD(x,y,d)為左圖像選定點(diǎn)和右圖像待匹配點(diǎn)的匹配代價(jià);IL(x,y)為左圖像選定點(diǎn)的灰度值;IR(x,y-d)為右圖像中待匹配點(diǎn)的灰度值。
Census 變換分別通過鄰域像素與中心像素的灰度值比較計(jì)算出左圖像編碼及右圖像視差為d 的編碼,求出漢明距離作為視差d 的匹配代價(jià)。Census變換[8]示例如圖2所示。
圖2 Census 變換示例圖Fig.2 Example of Census transform
AD-Census 立體匹配融合2 種變換結(jié)果作為視差d 對(duì)應(yīng)的初始匹配代價(jià)。代價(jià)聚合環(huán)節(jié)采用十字交叉法構(gòu)造十字交叉域,并以設(shè)定的規(guī)則將窗口內(nèi)代價(jià)值聚合到中心點(diǎn)的初始代價(jià)上,以聚合代價(jià)作為視差d 最終的匹配代價(jià)值。
視差計(jì)算環(huán)節(jié)采用WTA(winners takes all)算法[9],選擇匹配代價(jià)最小的視差值作為結(jié)果。通過左右一致性法剔除錯(cuò)誤匹配點(diǎn),在遮擋區(qū)內(nèi)利用背景信息進(jìn)行錯(cuò)誤點(diǎn)填充,非遮擋區(qū)內(nèi)選擇顏色相近像素的視差值進(jìn)行填充。
實(shí)驗(yàn)所用的標(biāo)準(zhǔn)測試圖像集來自網(wǎng)站(https://vision.middlebury.edu/),本文采用Cones,Cloth,Teddy和Rocks 4 組圖像。以實(shí)驗(yàn)結(jié)果圖與真實(shí)視差圖差值作為評(píng)判標(biāo)準(zhǔn),若同一點(diǎn)視差差值小于1 則判定為匹配正確點(diǎn),反之判定為誤匹配點(diǎn),并將視差圖分為三類區(qū)域:全區(qū)域(all)、深度不連續(xù)區(qū)域(disc)和非遮擋區(qū)域(nonocc)。
實(shí)驗(yàn)測試平臺(tái):3.6 GHz Ryzen 5 3600,16 GB內(nèi)存,系統(tǒng)為Window 10,軟件環(huán)境為Spyder(Anaconda3)+OpenCv 3.4.1。
采用SGM(semi-global matching)立體匹配算法[10]對(duì)測試圖像進(jìn)行實(shí)驗(yàn),增大窗口并記錄算法誤匹配率和運(yùn)行時(shí)間。實(shí)驗(yàn)均采取正方形窗,窗口大小為(2N+1)2,N 為自然數(shù)。誤匹配率和運(yùn)行時(shí)間如圖3和圖4所示。
圖3可以看出隨著窗口增大,在Teddy 和Cones圖像中全區(qū)域誤匹配率均不斷下降,其中當(dāng)窗口大小從3×3 擴(kuò)大到13×13 時(shí)Rocks 圖像中的全區(qū)域誤匹配率從19.63%下降至13.86%。圖4可以看出算法運(yùn)行時(shí)間隨著窗口增大而逐漸增加。對(duì)Teddy圖像集,運(yùn)行時(shí)間從1.42 s 增加到4.03 s。
圖3 SGM 算法誤匹配率Fig.3 Mismatch rate of SGM algorithm
圖4 SGM 算法運(yùn)行時(shí)間Fig.4 Running time of SGM algorithm
通過該實(shí)驗(yàn)可以分析出,窗口過小會(huì)導(dǎo)致誤匹配率上升;窗口過大可以提升算法精度,但會(huì)導(dǎo)致運(yùn)行時(shí)間大幅增加。設(shè)想對(duì)于每一個(gè)像素點(diǎn)都有對(duì)于自身匹配效果最好的窗口大小,進(jìn)而引出根據(jù)領(lǐng)域信息調(diào)節(jié)自身窗口大小的自適應(yīng)算法[11]。
同一物體表面或背景在成像平面上具有顏色相似性,而在邊緣區(qū)域因深度變化而導(dǎo)致視差圖的灰度值會(huì)出現(xiàn)大幅度的變化,因此對(duì)具有不同特點(diǎn)的區(qū)域應(yīng)采用不同大小的窗口[12]。
在代價(jià)計(jì)算前先采用Sobel 算子[13]求出左圖分別在x,y 方向上的梯度值,梯度幅值計(jì)算公式如下:
式中:m(i,j)為點(diǎn)(i,j)的梯度幅值;gx和gy分別為在x,y 方向上的梯度值。同一物體或背景表面上的梯度幅值通常較小;而在邊緣區(qū)域深度變化劇烈而導(dǎo)致梯度值變大。梯度幅值圖直方統(tǒng)計(jì)圖如圖5所示。
圖5 Cones 圖像梯度幅值直方圖Fig.5 Histogram of gradient magnitude
圖5可以發(fā)現(xiàn)Cones 圖像中含有大量梯度幅值為0 的點(diǎn),可以推測該類點(diǎn)為弱紋理區(qū)域。使用Canny 算子提取圖像的邊緣并統(tǒng)計(jì)邊緣點(diǎn)數(shù),當(dāng)大于某個(gè)梯度幅值時(shí)的點(diǎn)個(gè)數(shù)等于邊緣點(diǎn)數(shù)時(shí),選定該梯度幅值為閾值T1。當(dāng)梯度幅值大于T1時(shí),該點(diǎn)為邊緣點(diǎn),因此采用最小的3×3 窗口;當(dāng)梯度幅值大于1 且小于T1時(shí)為邊緣附近區(qū)域,采用窗口大小為5×5;當(dāng)梯度幅值小于1 時(shí)判斷該點(diǎn)為弱紋理區(qū)域點(diǎn),對(duì)于弱紋理區(qū)域由于深度變化不明顯,可以繼續(xù)擴(kuò)大窗口以獲取更多的信息,信息差計(jì)算公式如下:
式中:μ 為均值;N 為當(dāng)前窗口內(nèi)像素總數(shù);m 為當(dāng)前點(diǎn)的梯度幅值大小;(i,j)為當(dāng)前點(diǎn)坐標(biāo);x,y 為窗口內(nèi)點(diǎn)與當(dāng)前點(diǎn)的相對(duì)坐標(biāo);d 為當(dāng)前視差;M 為當(dāng)前窗口。當(dāng)μ 小于閾值T2時(shí),擴(kuò)大窗口以獲取更多的信息,自適應(yīng)窗口算法流程如圖6所示。
圖6 自適應(yīng)窗口算法流程Fig.6 Flow chart of adaptive window algorithm
在SGM 算法的代價(jià)計(jì)算環(huán)節(jié)中加入自適應(yīng)窗口算法后為SGM_Ada,然后采用Middlebury 中的圖像集進(jìn)行對(duì)比實(shí)驗(yàn),現(xiàn)選定最小窗口分別為3×3,5×5。
表1和表2分別是SGM 與SGM_Ada 算法在運(yùn)行時(shí)間及三區(qū)域平均誤匹配率的對(duì)比結(jié)果。實(shí)驗(yàn)結(jié)果表明在含有大量邊緣的標(biāo)準(zhǔn)圖像中全體區(qū)域的誤匹配率平均下降了1.21%,而算法運(yùn)行時(shí)間平均增加0.14 s。實(shí)驗(yàn)結(jié)果表明,SGM_Ada 算法在保持效率的同時(shí)提高了全區(qū)域平均匹配精度。
表1 SGM 與SGM_Ada 算法的運(yùn)行時(shí)間對(duì)比Tab.1 Comparison of running time between SGM and SGM_Ada algorithm單位:s
表2 SGM 與SGM_Ada 算法全區(qū)域誤匹配率對(duì)比Tab.2 Comparison of false matching rate(Disc)between SGM and SGM_Ada algorithm/%
AD-Census 立體匹配算法原理[14]如圖7所示。
圖7 AD-Census 立體匹配算法原理圖Fig.7 Principle of AD-Census stereo matching algorithm
AD-Census 立體匹配算法中AD 變換基于像素點(diǎn)與待匹配點(diǎn)的灰度值信息,并未考慮周圍點(diǎn)的信息;Census 變換窗口固定且未考慮當(dāng)前點(diǎn)及周圍點(diǎn)的梯度信息,匹配效果有限。
為提高AD-Census 立體匹配算法的匹配精度,現(xiàn)提出以下改進(jìn)方案:①AD 變換改為SAD 變換后加入自適應(yīng)窗口算法,將點(diǎn)對(duì)點(diǎn)的搜索模式改為窗口對(duì)窗口,該改進(jìn)步驟加入后算法命名為Ada_1;②在Census 變換中加入融合梯度信息[15]的自適應(yīng)窗口算法,以上兩個(gè)改進(jìn)方案均加入到算法后命名為Ada_2。
表3和表4分別是AD-Census 算法不同窗口大小下的運(yùn)行時(shí)間和誤匹配率。
表3 AD-Census 算法的運(yùn)行時(shí)間Tab.3 Running time of AD-Census algorithm單位:s
表4 AD-Census 算法誤匹配率Tab.4 False matching rate of AD-Census algorithm/%
由表3和表4可以看出隨著窗口增大,運(yùn)行時(shí)間增加且三類區(qū)域的誤匹配精度均有所下滑,改進(jìn)前增大窗口對(duì)算法表現(xiàn)并無提升作用。
圖8為Ada_2 算法在最小窗口為3×3 時(shí)不同的閾值T2在Cones 和Rocks 圖像測試集中的全區(qū)域誤匹配率,與表4中窗口大小為3×3 時(shí)的數(shù)據(jù)進(jìn)行對(duì)比,全區(qū)域誤匹配率分別平均下降了2.06%和2.40%,不同的閾值在一定范圍內(nèi)對(duì)算法精度的提升不大。圖9為Ada_2 算法在相同條件下不同閾值T2下的運(yùn)行時(shí)間,T2從50 到70 的過程,算法運(yùn)行時(shí)間分別下降了13.54 s 和11.26 s??傻肨2取值范圍在65~70 時(shí)既能提高算法精度,也能保持算法效率。
圖8 Ada_2 算法誤匹配率Fig.8 Mismatch rate of Ada_2 algorithm
圖9 Ada_2 算法運(yùn)行時(shí)間Fig.9 Running time of Ada_2 algorithm
為了更清晰地對(duì)改進(jìn)前后的算法的性能進(jìn)行對(duì)比,SGM,AD-Census,Ada_1,Ada_2 在初始窗口為7×7 時(shí)的運(yùn)行時(shí)間、誤匹配率分別如表5和表6所示。
表5 算法運(yùn)行時(shí)間Tab.5 Running time of different algorithms單位:s
通過表5可得改進(jìn)后的Ada_2 算法運(yùn)行時(shí)間與改進(jìn)前的AD-Census 算法相比平均只增加了6.39%。由表6數(shù)據(jù),通過比較改進(jìn)前后的算法在3個(gè)區(qū)域的誤匹配率可以得到在視差非連續(xù)區(qū)域誤匹配率平均下降了7.56%、在全區(qū)域誤匹配率平均下降了3.21%、在非遮擋區(qū)域誤匹配率平均下降了1.35%以及三區(qū)域平均誤匹配率下降了4.05%。Ada_2 算法在Teddy 圖像集中視差非連續(xù)區(qū)域誤匹配率下降14.06%。
表6 算法誤匹配率Tab.6 False matching rate of different algorithm/%
綜合以上結(jié)果,改進(jìn)后的Ada_2 算法與改進(jìn)前相比,算法精度隨著改進(jìn)步驟的加入逐步提高,與改進(jìn)前算法相比,窗口大小根據(jù)當(dāng)前點(diǎn)的梯度信息同步調(diào)整,與固定窗口大小的算法相比準(zhǔn)確性更高。
針對(duì)立體匹配部分區(qū)域匹配精度低的問題,本文提出了一種融合梯度信息的自適應(yīng)窗口算法。在圖像預(yù)處理環(huán)節(jié)提取圖像邊緣,并求出邊緣梯度幅值,根據(jù)邊緣點(diǎn)的統(tǒng)計(jì)結(jié)果和梯度幅值求出分類閾值T1,依據(jù)T1在匹配代價(jià)環(huán)節(jié)分配不同的窗口,同時(shí)設(shè)置閾值T2以適配弱紋理區(qū)域適當(dāng)擴(kuò)大窗口。實(shí)驗(yàn)結(jié)果表面,在AD-Census 算法中加入自適應(yīng)窗口算法可以提高算法性能,在Middlebury 的4 個(gè)場景中均能在保持算法效率的同時(shí)降低算法誤匹配率。