陳嘉明,羅亞波
(武漢理工大學 機電工程學院,武漢 430070)
雙目立體視覺近年來在三維重建、視覺導航、醫療診斷等領域中取得應用[1-2]。使用雙目立體視覺[3]將包含更多的三維信息并具有成本低、實現難度低的優點。立體匹配精度是三維重建效果的決定因素,通過設定規則獲得稠密視差并轉化為深度作為三維重建的基礎?,F有的立體匹配算法仍然存在許多缺陷,如弱紋理區域以及重復紋理區域有大量誤匹配點,如遮擋區域的誤匹配問題,以及在深度不連續區域匹配效果不佳等問題。
局部立體匹配算法研究包括根據鄰域信息選擇合適窗口,如自適應窗口算法[4]、多種匹配算法設定不同權值獲得具體窗口、對圖像進行分割并將分割所得小區域[5]作為匹配基元的匹配算法等。
根據相機標定求得相機的內外參數并對左右相機進行立體校正使得左右成像平面符合極線約束。校正完成后以左圖為基準,設計步驟從右圖中尋找對應點并計算列差值,即視差d。立體匹配算法步驟如圖1所示[6]。

圖1 立體匹配算法步驟Fig.1 Steps of stereo matching algorithm
圖像需進行濾波處理進行噪聲去除,常用的濾波方法有高斯雙邊濾波、中值濾波、直方圖均衡濾波[7]。基于像素點的匹配代價主要通過灰度值、梯度等信息進行計算,計算結果作為相似性的度量。常用的2 種代價計算方法分別為AD(absolute differences)變換和Census 變換,AD 變換算法為
式中:CAD(x,y,d)為左圖像選定點和右圖像待匹配點的匹配代價;IL(x,y)為左圖像選定點的灰度值;IR(x,y-d)為右圖像中待匹配點的灰度值。
Census 變換分別通過鄰域像素與中心像素的灰度值比較計算出左圖像編碼及右圖像視差為d 的編碼,求出漢明距離作為視差d 的匹配代價。Census變換[8]示例如圖2所示。

圖2 Census 變換示例圖Fig.2 Example of Census transform
AD-Census 立體匹配融合2 種變換結果作為視差d 對應的初始匹配代價。代價聚合環節采用十字交叉法構造十字交叉域,并以設定的規則將窗口內代價值聚合到中心點的初始代價上,以聚合代價作為視差d 最終的匹配代價值。
視差計算環節采用WTA(winners takes all)算法[9],選擇匹配代價最小的視差值作為結果。通過左右一致性法剔除錯誤匹配點,在遮擋區內利用背景信息進行錯誤點填充,非遮擋區內選擇顏色相近像素的視差值進行填充。
實驗所用的標準測試圖像集來自網站(https://vision.middlebury.edu/),本文采用Cones,Cloth,Teddy和Rocks 4 組圖像。以實驗結果圖與真實視差圖差值作為評判標準,若同一點視差差值小于1 則判定為匹配正確點,反之判定為誤匹配點,并將視差圖分為三類區域:全區域(all)、深度不連續區域(disc)和非遮擋區域(nonocc)。
實驗測試平臺:3.6 GHz Ryzen 5 3600,16 GB內存,系統為Window 10,軟件環境為Spyder(Anaconda3)+OpenCv 3.4.1。
采用SGM(semi-global matching)立體匹配算法[10]對測試圖像進行實驗,增大窗口并記錄算法誤匹配率和運行時間。實驗均采取正方形窗,窗口大小為(2N+1)2,N 為自然數。誤匹配率和運行時間如圖3和圖4所示。
圖3可以看出隨著窗口增大,在Teddy 和Cones圖像中全區域誤匹配率均不斷下降,其中當窗口大小從3×3 擴大到13×13 時Rocks 圖像中的全區域誤匹配率從19.63%下降至13.86%。圖4可以看出算法運行時間隨著窗口增大而逐漸增加。對Teddy圖像集,運行時間從1.42 s 增加到4.03 s。

圖3 SGM 算法誤匹配率Fig.3 Mismatch rate of SGM algorithm

圖4 SGM 算法運行時間Fig.4 Running time of SGM algorithm
通過該實驗可以分析出,窗口過小會導致誤匹配率上升;窗口過大可以提升算法精度,但會導致運行時間大幅增加。設想對于每一個像素點都有對于自身匹配效果最好的窗口大小,進而引出根據領域信息調節自身窗口大小的自適應算法[11]。
同一物體表面或背景在成像平面上具有顏色相似性,而在邊緣區域因深度變化而導致視差圖的灰度值會出現大幅度的變化,因此對具有不同特點的區域應采用不同大小的窗口[12]。
在代價計算前先采用Sobel 算子[13]求出左圖分別在x,y 方向上的梯度值,梯度幅值計算公式如下:
式中:m(i,j)為點(i,j)的梯度幅值;gx和gy分別為在x,y 方向上的梯度值。同一物體或背景表面上的梯度幅值通常較??;而在邊緣區域深度變化劇烈而導致梯度值變大。梯度幅值圖直方統計圖如圖5所示。

圖5 Cones 圖像梯度幅值直方圖Fig.5 Histogram of gradient magnitude
圖5可以發現Cones 圖像中含有大量梯度幅值為0 的點,可以推測該類點為弱紋理區域。使用Canny 算子提取圖像的邊緣并統計邊緣點數,當大于某個梯度幅值時的點個數等于邊緣點數時,選定該梯度幅值為閾值T1。當梯度幅值大于T1時,該點為邊緣點,因此采用最小的3×3 窗口;當梯度幅值大于1 且小于T1時為邊緣附近區域,采用窗口大小為5×5;當梯度幅值小于1 時判斷該點為弱紋理區域點,對于弱紋理區域由于深度變化不明顯,可以繼續擴大窗口以獲取更多的信息,信息差計算公式如下:
式中:μ 為均值;N 為當前窗口內像素總數;m 為當前點的梯度幅值大小;(i,j)為當前點坐標;x,y 為窗口內點與當前點的相對坐標;d 為當前視差;M 為當前窗口。當μ 小于閾值T2時,擴大窗口以獲取更多的信息,自適應窗口算法流程如圖6所示。

圖6 自適應窗口算法流程Fig.6 Flow chart of adaptive window algorithm
在SGM 算法的代價計算環節中加入自適應窗口算法后為SGM_Ada,然后采用Middlebury 中的圖像集進行對比實驗,現選定最小窗口分別為3×3,5×5。
表1和表2分別是SGM 與SGM_Ada 算法在運行時間及三區域平均誤匹配率的對比結果。實驗結果表明在含有大量邊緣的標準圖像中全體區域的誤匹配率平均下降了1.21%,而算法運行時間平均增加0.14 s。實驗結果表明,SGM_Ada 算法在保持效率的同時提高了全區域平均匹配精度。

表1 SGM 與SGM_Ada 算法的運行時間對比Tab.1 Comparison of running time between SGM and SGM_Ada algorithm單位:s

表2 SGM 與SGM_Ada 算法全區域誤匹配率對比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 變換基于像素點與待匹配點的灰度值信息,并未考慮周圍點的信息;Census 變換窗口固定且未考慮當前點及周圍點的梯度信息,匹配效果有限。
為提高AD-Census 立體匹配算法的匹配精度,現提出以下改進方案:①AD 變換改為SAD 變換后加入自適應窗口算法,將點對點的搜索模式改為窗口對窗口,該改進步驟加入后算法命名為Ada_1;②在Census 變換中加入融合梯度信息[15]的自適應窗口算法,以上兩個改進方案均加入到算法后命名為Ada_2。
表3和表4分別是AD-Census 算法不同窗口大小下的運行時間和誤匹配率。

表3 AD-Census 算法的運行時間Tab.3 Running time of AD-Census algorithm單位:s

表4 AD-Census 算法誤匹配率Tab.4 False matching rate of AD-Census algorithm/%
由表3和表4可以看出隨著窗口增大,運行時間增加且三類區域的誤匹配精度均有所下滑,改進前增大窗口對算法表現并無提升作用。
圖8為Ada_2 算法在最小窗口為3×3 時不同的閾值T2在Cones 和Rocks 圖像測試集中的全區域誤匹配率,與表4中窗口大小為3×3 時的數據進行對比,全區域誤匹配率分別平均下降了2.06%和2.40%,不同的閾值在一定范圍內對算法精度的提升不大。圖9為Ada_2 算法在相同條件下不同閾值T2下的運行時間,T2從50 到70 的過程,算法運行時間分別下降了13.54 s 和11.26 s??傻肨2取值范圍在65~70 時既能提高算法精度,也能保持算法效率。

圖8 Ada_2 算法誤匹配率Fig.8 Mismatch rate of Ada_2 algorithm

圖9 Ada_2 算法運行時間Fig.9 Running time of Ada_2 algorithm
為了更清晰地對改進前后的算法的性能進行對比,SGM,AD-Census,Ada_1,Ada_2 在初始窗口為7×7 時的運行時間、誤匹配率分別如表5和表6所示。

表5 算法運行時間Tab.5 Running time of different algorithms單位:s
通過表5可得改進后的Ada_2 算法運行時間與改進前的AD-Census 算法相比平均只增加了6.39%。由表6數據,通過比較改進前后的算法在3個區域的誤匹配率可以得到在視差非連續區域誤匹配率平均下降了7.56%、在全區域誤匹配率平均下降了3.21%、在非遮擋區域誤匹配率平均下降了1.35%以及三區域平均誤匹配率下降了4.05%。Ada_2 算法在Teddy 圖像集中視差非連續區域誤匹配率下降14.06%。

表6 算法誤匹配率Tab.6 False matching rate of different algorithm/%
綜合以上結果,改進后的Ada_2 算法與改進前相比,算法精度隨著改進步驟的加入逐步提高,與改進前算法相比,窗口大小根據當前點的梯度信息同步調整,與固定窗口大小的算法相比準確性更高。
針對立體匹配部分區域匹配精度低的問題,本文提出了一種融合梯度信息的自適應窗口算法。在圖像預處理環節提取圖像邊緣,并求出邊緣梯度幅值,根據邊緣點的統計結果和梯度幅值求出分類閾值T1,依據T1在匹配代價環節分配不同的窗口,同時設置閾值T2以適配弱紋理區域適當擴大窗口。實驗結果表面,在AD-Census 算法中加入自適應窗口算法可以提高算法性能,在Middlebury 的4 個場景中均能在保持算法效率的同時降低算法誤匹配率。