周思達,談海浪,唐嘉寧,蔣聰成
(云南民族大學 電氣信息工程學院,昆明 650500)
在即時定位與即時建圖(SLAM)中,三維重建是地圖構建的重要組成部分,即時地圖構建是實現移動機器人自主化的核心技術之一.目前,有關即時三維地圖構建技術的應用逐步由室內小規(guī)模環(huán)境向室外大規(guī)模環(huán)境發(fā)展.相比之下,室外大規(guī)模環(huán)境由于所需傳感器作用距離遠,環(huán)境非結構特征顯著,因此更加復雜,實時構建的難度更大.為此,將立體視覺傳感器用于室外三維重建具有重要的研究意義,而通過雙目立體匹配得到精確視差圖成為了三維重建的主要研究內容.
近年來,三維重建研究領域產生了不少新方法[1],如基于深度相機的三維重建方法[2],基于深度學習的三維重建方法[3]等.在視覺測量、工業(yè)生產、人工智能、大規(guī)模SLAM等各個領域有著廣泛的應用.基于雙目視覺的三維重建大致可按照如圖1的工作步驟進行.
一般來說,基于雙目視覺的三維重建的效果仍要受到立體匹配方法[4]所得到視差圖以及視覺傳感器的影響,而有關視覺傳感器的工業(yè)制造技術和相機標定方法[5]相對成熟,因此獲取精確的視差圖是實現室外三維環(huán)境重建亟需解決的問題.對于獲取視差圖的匹配方法,存在幾類經典的匹配方法, 如半全局立體匹配(SGBM)算法、塊匹配(BM)算法以及絕對差之和(SAD)算法[6].利用立體匹配得到的視差圖或多或少都會受到光照等環(huán)境因素影響,出現失真、空洞等誤差.因此,進一步優(yōu)化立體匹配得到的視差圖必不可少.視差圖優(yōu)化的方法可大致分為3類,基于深度卷積網絡的方法、基于最優(yōu)化理論的方法、基于濾波器的方法.如Song等[7]提出一種基于卷積神經網絡的立體匹配視差優(yōu)化訓練的方法,利用視差不連續(xù)信息來優(yōu)化視差圖,在一定程度上提高了視差的精度;Yang等[8]在基于深度學習的基礎上提出了傳統(tǒng)的圖像處理 技術與深度學習相結合的立體匹配方法.基于深度網絡的方法往往需進行大量數據訓練,且與視差匹配一體而不再已有視差圖的基礎上優(yōu)化.Wang等[9]提出一種基于區(qū)域協同優(yōu)化的匹配算法,該方法得到的視差圖精度較高;Reynosa[10]等通過利用進化優(yōu)化算法估計視差圖,并將全局圖像特征作為描述符,可估計出精度較高的視差圖.基于最優(yōu)化理論的方法需不斷迭代優(yōu)化,計算代價較高.基于濾波器的方法計算代價較小,可直接應用,但效果依賴于濾波器的設計,如Xu等[11]提出一種基于改進引導濾波器的視差優(yōu)化算法來平滑視差圖像,提高了視差圖在梯度區(qū)域的平滑性并有效的保留了圖像的邊緣信息,但該方法在視差精度上提高的并不明顯;汪神岳[12]等提出了一種雙線性插值修復視差失真點,并結合了數學形態(tài)學[13]平滑方法完成進一步的細化處理,該方法在修復視差變化較大區(qū)域的失真點部分,存在誤修復問題;張一飛等[14]通過搜尋距離最近的非遮擋點中較小的值填充奇異點,并采用中值濾波的方法平滑、檢測和恢復視差圖,該方法能恢復視差圖中誤匹配導致小黑洞區(qū)域,但無法解決空洞失真點所形成的較大黑洞區(qū)域且易因中值濾波過度平滑而導致視差值失真.
圖1 結構圖Fig.1 Structure diagram
本文將在立體匹配的基礎上,對視差圖進行優(yōu)化,提出一種基于自適應窗的視差優(yōu)化方法.通過對匹配方法得到的左右視差圖進行左右一致性檢測,篩選出左視差圖的失真點,以失真點周圍像素點為代價,比較并優(yōu)化該點;對于誤匹配造成的黑洞區(qū)域,分別從水平和垂直方向找到最近非零視差值的像素點,從而根據該失真點坐標以及找到的像素點坐標形成自適應的矩陣窗口并以其均值填充黑洞區(qū)域,完成對視差圖的優(yōu)化.由實驗結果表明:本文提出的視差圖優(yōu)化方法,優(yōu)化后得到的視差圖相比優(yōu)化前呈現效果有所提升且降低了誤匹配率,以此重建出八叉樹數據結構的三維地圖準確度更高,效果更好.
本文是基于SGBM的立體匹配方法,采用校準后的圖像對匹配得到原始左右視差圖,通過左右一致性檢測左視差圖失真點,完成對視差圖的優(yōu)化并得到深度信息,以實現三維地圖重建.
實際情況下,相機得到原始圖像往往都會出現畸變,獲取的雙目圖像對的共軛極線并不是在同一水平上,通過加入極線約束[15]條件,使得左右圖像的對極線在同一水平線上,再經過一定的變換進行校準[16],糾正相機引入的誤差.因此,根據相機標定后得到的相機內參矩陣、畸變參數以及相機外參(旋轉矩陣和平移向量)對左右圖像進行校準.具體步驟為:首先對原彩色圖像進行灰度處理,得到單通道的灰色圖像,然后通過調用基于OpenCV[17]的stereoRectify(1)https://docs.opencv.org/master/d9/d0c/group__calib3d.html#ga617b1685d4059c6040827800e72ad2b6立體校準函數得到校正后的旋轉矩陣和投影矩陣,接著調用initUndistortRectifyMap(2)https://docs.opencv.org/master/d9/d0c/group__calib3d.html#ga7dfb72c9cf9780a347fbe3d1c47e5d5a映射變換計算函數得到X、Y方向上映射變換矩陣,最后調用remap(3)https://docs.opencv.org/master/da/d54/group__imgproc__transform.html#gab75ef31ce5cdfb5c44b6da5f3b908ea4幾何變換函數得到校準后的左右圖像.
本文采用基于SGBM的方法,以校準后圖像對作為立體匹配原圖輸入,得到相對應的視差圖,并獲取正確的環(huán)境深度信息.
1)立體匹配原理.立體匹配是根據左右圖像重疊區(qū)域所提取的特征點來建立圖像對之間的一種對應關系,從而找到三維物理空間點位置,并根據左右圖像所對應的二維成像點,最終得到物理空間點對應的二維視差圖.
2)基于SGBM的視差計算方法原理.半全局立體匹配方法SGBM[18]主要源于SGM(semi-global matching)算法,是由Hirschmuller[19]于2005年提出的一種立體匹配方法,SGM算法是計算像素匹配點的成本,合計來自8個或者16個方向的匹配代價,根據相鄰點進行計算視差,視差圖更真實.方法核心步驟:匹配成本計算、成本合計、視差計算、優(yōu)化及校正.SGM算法核心思想是基于最優(yōu)化能量函數估計視差值,采用的能量函數如下:
(1)
式中,E(D)是半全局能量函數,p為匹配目標像素點,q是點p的鄰域像素點,C(p,Dp)是像素點p與匹配點視差Dp的匹配代價函數,Dp為目標像素點對應的視差值,Dq是鄰域點對應的視差值,P1是對相鄰像素點視差等于1的懲罰因子,P2是對相鄰像素點視差大于1的懲罰因子,P2大于P1.
根據式(1)的能量函數可知,在本質上,SGBM算法屬于全局算法的一種擴展,它結合了局部和全局算法的優(yōu)勢,采用多條路徑下的一維代價聚合問題來解決全局能量函數的最優(yōu)問題,即將全局算法中的視差計算步驟簡化并作為代價聚合步驟,算法既保證了精度又降低了計算復雜度.
相比SGM算法,SGBM算法是半全局塊匹配方法,在計算匹配代價函數時,根據圖像對中相匹配的同名像素點進行匹配成本函數計算,并通過采用塊匹配算法(SAD).SGBM算法沒有采用基于互熵信息的匹配代價的方法,增加了預處理方法,且SGBM算法采用SAD(sum of absolute differences)方法完成匹配代價聚合,其表達式如下:
SAD(u,v)=Sum{|left(u,v)-right(u,v)|}
(2)
其中SAD窗口的大小決定了視差圖的匹配的效率和誤匹配的大小,并在選定區(qū)域內通過選擇匹配代價聚合的最小值的點作為與之對應的匹配點.
在雙目立體匹配過程中,由于多種因素導致獲取的原圖 像對存在不同的遮擋區(qū)域和紋理平滑區(qū)域,可能無法計算得到準確視差,從而會造成部分視差失真或在孔洞點形成的黑洞區(qū)域,如圖2所示(黑色是視差為零的黑洞區(qū)域,且顏色越接近黑色視差越小).
為了消除失真點和孔洞點,首先通過左右一致性從左右視差圖檢測出誤匹配導致的失真點,然后根據周圍像素點的視差值來填充該失真點,并提出一種均值自適應窗口的方法來修復視差圖黑洞區(qū)域,平滑濾波過程采用中值濾波的方法.
圖2 原始視差圖Fig.2 Original parallax map
首先,遍歷檢測像素點w(x,y),通過左右一致性[20]檢測出失真點,如公式(3)所示,若公式不成立且檢測點視差不為零則為非零失真點;若公式不成立且檢測點視差為零,則為孔洞點;
DL(x,y)=DR(x-DL(x,y),y)
(3)
其中,DL(x,y)表示左視差圖對應像素點視差值,DR(x,y)表示右視差圖對應坐標點視差值.
圖3 失真點修復模型Fig.3 Distortion point repair model
第二,根據圖3失真點修復模型,若式(3)不成立且不為零,則檢測點w非零失真點,以該點為中心取周圍鄰域8個點對應的視差值,比較大小,標記出該鄰域所在的最大值Nmax和最小值Nmin,并計算出最大最小平均值Nmean,表達式如下:
(4)
(5)
其中,數集A表示失真點w鄰域視差值的集合.
此時有關非零失真點填充,可由式(4)、式(5)得到如下表達式:
(6)
根據式(6)可知,若DL(w)
圖4 孔洞點填充模型Fig.4 Hole point filling model
第三,由圖4的孔洞點填充模型可知,若檢測點w的視差值為0,則標記該點為孔洞點,并分別從x,y方向遍歷,直到找到視差值不為0的點wx和wy,其坐標值分別wx(x,y′)、wx(x′,y)和下角點wxy(x′,y′).令dx=(x′-x),dy=(y′-y),構造一個以孔洞點w(x,y)的坐標為起點,dx為寬,dy為高的矩陣Mdx×dy,從而形成一個可變的自適應的窗口矩陣M,于是有:
(7)
第四,根據式(7)得到矩陣M的非零元素個數n,以及矩陣M對應元素數值總和S,并求出平均值smean,表達式如下:
(8)
最后,根據上述方法步驟及公式,直到檢測完所有像素點并修復好所有的視差后,進一步采用中值濾波[21]平滑去除椒鹽噪聲,并調用基于OpenCV庫中的copyMakeBorder[注]https://docs.opencv.org/master/d2/de8/group__core__array.html#ga2ac1049c2c3dd25c2b41bffe17658a36函數進行邊界處理,得到優(yōu)化后的左視差圖.
根據本文方法優(yōu)化后的左視差圖,結合標定參數和雙目測距原理[22]以獲取深度信息[23]并用于三維重建,而重建出的三維非結構化的點云數據是不規(guī)則、無序的,為此采用一種用于三維空間細化分層的八叉樹數據結構來壓縮存儲點云數據.八叉樹[24,25]是一種遞歸,軸對稱且空間分開的數據結構,通過將三維地圖的整體環(huán)境場景作為一個樹狀模型根節(jié)點,依次將每個節(jié)點分為8份,直到滿足停止條件讓所有節(jié)點都細分成葉子節(jié)點或達到設定的劃分樹枝個數,最后可達到加速分解運算且節(jié)省空間的效果,并實現八叉樹數據結構的三維重建.
下面通過4個算例對本文提出的視差圖優(yōu)化方法進行分析.實驗數據采用的是Middlebury[26]提供的4組標準圖像對Venus、Bull、Teddy、Cones,以及目前國際上最大的室外自動駕駛場景下的計算機視覺方法評測數據集—KITTI的部分數據集,其中實驗結果都是在相同的參數設定下完成的,4個算例實驗中的灰度圖,顏色越接近黑色視差越小,黑色的表示視差為零或者接近零的視差區(qū)域.
本算例通過以校準后圖像對作為立體匹配原圖輸入,按照第3節(jié)的步驟進行失真檢測和視差圖優(yōu)化,說明本文所提出方法的思路和工作流程:
1)通過左右視差一致性,檢測出失真點;
2)若該失真點視差值不為0,則根據該非零失真點周圍8像素點坐標對應的視差值,通過與該失真點的視差值作代價比較,進而優(yōu)化失真點的視差,如圖5(c)和圖5(d)所示;
3)若篩選出的失真點視差值為0,則該點為孔洞點,且多個空洞點會形成黑洞區(qū)域,如圖5中(e)所示;
4)以孔洞點坐標位起點,以X、Y方向分別遍歷并找到一個非零的視差值的像素點坐標,并將X方向所找到的非零視差點的x′坐標減去起點x坐標的值記為w,將Y方向所找到的非零視差點的y′坐標減去起點y坐標的值記為h,最后在所在視差圖像上形成一個以孔洞點為起點,w為寬,h為高的自適應窗的矩陣;
5)根據步驟4得到自適應矩陣,并以矩陣內元素對應的視差值與非零視差值個數的比值用于優(yōu)化孔洞點,如圖5(f)所示;
6)最后采用中值濾波和copyMakeBorder函數完成對上述結果的濾波和邊界處理,優(yōu)化后的視差圖如圖5(g)所示.
圖5 視差圖優(yōu)化過程Fig.5 Disparity map optimization process
本算例采用的實驗數據是Middlebury[26]提供的4組標準圖像對Venus、Bull、Teddy、Cones,對其利用傳統(tǒng)方法得到的視差圖作了優(yōu)化處理并與未處理前和文獻[11,12,14]的視差優(yōu)化結果作了對比.同時為了客觀評價本文算法的處理效果,表1中數據是計算的視差結果與真實視差誤差大于1的統(tǒng)計結果[27],其結果可用誤匹配率E進行表示,如公式(9)所示.
(9)
式中:dc(x,y)表示像素點坐標(x,y)的視差值,dT(x,y)為實際視差值,δ為設定的閾值,一般為1.
實驗結果如圖6和表1所示,通過對實驗結果分析可知,圖6(a)是原始圖像,圖6(b)是真實視差圖,圖6(c)是SGBM算法得到原始視差圖,圖6(d)是文獻[11]的視差圖優(yōu)化結果,圖6(e)是文獻[12]的視差圖優(yōu)化結果,圖6(f)是文獻[14] 的視差圖優(yōu)化結果,圖6(g)是本文方法優(yōu)化結果,根據視差圖優(yōu)化的圖像顯示以及表1中數據對比可知:本文方法對基于SGBM算法得到的原始視差圖完成了優(yōu)化,并降低了誤匹配率;從誤匹配率比較分析,本文方法相比文獻[11,12,14]的方法,對于標準圖像中絕大多數數據,誤匹配率是最小的.
表1 Middlebury標準數據集實驗結果(誤匹配率%)
Table 1 Experimental results of Middlebury standard dataset(Mismatch rate %)
方法圖像對名稱VenusBullTeddyConesSGBM10.2210.2622.4314.00文獻[11]7.834.3518.1815.08文獻[12]7.586.9217.9417.18文獻[14]10.4410.1616.9313.95本文7.384.6316.9114.52
圖6 標準數據集視差優(yōu)化結果Fig.6 Disparity optimization results of standard dataset
為說明方法對室外場景的適應情況,本節(jié)算例采用的實驗數據是目前國際上最大的室外自動駕駛場景下的計算機視覺方法評測數據集—KITTI數據集.圖7(a)是KITTI原始圖像,圖7(b)是SGBM算法得到原始視差圖,圖7(c)、圖7(d)和圖7(e)分別是文獻[11,12,14]得到優(yōu)化后的視差圖,圖7(f)本文方法優(yōu)化后的視差圖.實驗結果表明,優(yōu)化后的視差圖(f)視差更密集,相比SGBM算法得到原始視差圖(b)優(yōu)化后的得到的視差圖效果更好.其中,優(yōu)化后的視差圖(f)與圖 7(d)相比,后者最上面出現了明顯的矩形區(qū)域誤差,因此,本文方法能得到較好的結果(采用的KITTI數據集沒有相對應的真實視差圖,因此本算法不作誤匹配率分析).
圖7 KITTI數據集實驗結果Fig.7 Experimental results of KITTI dataset
為說明以本文方法得到的優(yōu)化視差圖優(yōu)點,并以視差圖為基礎建立三維地圖的情況,本節(jié)算例中通過分析由原始視差圖和本文優(yōu)化方法得到視差圖分別完成對環(huán)境的三維重建并進行對比.圖8(a)是KITTI原始左圖像,圖8(b)是SGBM算法得到原始左視差圖,圖8(c)是本方法優(yōu)化后的左視差圖,圖8(d)是由原始左視差圖重建的八叉樹圖,圖8(e)是由本文方法優(yōu)化后的左視差圖重建的八叉樹圖.由實驗結果對比分析可知,利用本文方法優(yōu)化后的視差圖重建的八叉樹效果更好.
圖8 三維八叉樹地圖重建比較Fig.8 Comparison of 3D octree map reconstruction
本文以雙目立體視覺理論為基礎,提出一種基于自適應窗口的視差圖優(yōu)化方法,結合KITTI數據集圖像對的標定參數計算得到室外場景下的三維坐標,完成了基于八叉樹的三維重建.本文方法對SGBM方法得到原始視差圖進行了優(yōu)化,并通過對比實驗結果分析,結果表明本文方法在原本的立體匹配方法上完成了進一步優(yōu)化,能有效的保證原始圖像在視差圖的紋理性并進一步完善了誤匹配導致的黑洞區(qū)域,提高了室外環(huán)境下三維重建的真實性,以此建立的三維八叉樹地圖更完整、效果更好.未來將對低或無紋理區(qū)域的視差圖優(yōu)化開展進一步的工作.