陳 藝,于紀言,于洪森
南京理工大學機械工程學院,南京210094
近年來,隨著雙目立體視覺在3D地圖重建、目標檢測、無人駕駛和虛擬現實等領域的廣泛應用,雙目立體視覺已經成為計算機視覺領域研究的熱點。立體匹配是在同一時間點拍攝的不同視角的兩幅或者多幅圖像中尋找同一場景的像素匹配點,再通過逐像素點計算匹配代價,找到最優匹配像素點,計算出視差,進而得到真實空間的三維深度信息。Scharstein等人在總結已有的立體匹配算法后,提出了立體匹配的基本流程:匹配代價計算、代價聚合、視差計算和視差優化四個步驟。在采集雙目匹配圖像前,需要進行相機標定,主要可分為經典相機標定法、自標定法、主動標定法和基于深度學習標定法[1]。根據代價計算的方式不同,可以將傳統匹配算法分為全局、半全局和局部三大類算法。其中全局匹配算法是通過建立全局能量函數,由優化理論求解最優化全局能量函數,常見的全局匹配算法有圖割(graph cuts,GC)[2]、置信傳播(belief propagation,BP)[3]和動態規劃(dynamic programming)[4]等;半全局匹配算法(SGM)[5]雖然依然采用全局框架,但其在計算能量函數最小化的步驟時使用高效的一維路徑聚合方法來取代全局算法中的二維最小化算法(即用一維來近似二維最優),相較于全局匹配算法,在得到的視差圖誤匹配率相差不大的前提下,其計算效率明顯提升,但是其互信息法代價計算原理較為復雜,并且需要迭代計算,效率不高;局部匹配算法是依據一定大小的窗口內像素點,并計算尋找另外圖像中像匹配像素點窗口,從而獲得視差圖,其有著匹配速度快,匹配精度較高,能夠很好地應用于圖像實時處理的過程中,常見的此類算法有灰度差絕對值(AD)、灰度差絕對值之和(SAD)、灰度差絕對值之和平方(SSD)和Census等。Mei等人[6]將AD和Census結合作為代價計算函數,相較于單一的代價函數計算函數,其能夠很好地適應重復紋理和光照變化,閆利等人[7]將梯度與Census 結合起來作為代價函數,能夠適應弱紋理區域,魯棒性較好,Zhu等人[8]將顏色、梯度和Census變換相結合,將多尺度的變化量相結合,Nguyen和Ahn[9]將AD和SSD 代價函數加以改進,不僅可估計相應視差值,而且還利用擴展值r確定目標圖像中的對應像素點,同時還改進了歸一化函數NCC,并取得不錯的匹配精度,馮彬彬等人[10]將SGM(半全局匹配算法)部署在FPGA上,實現了算法硬件加速,實時性大幅提升,Zhang等人[11]提出一種改進的最小生成樹(MST)的代價聚合算法,取得了較高的匹配精度和匹配速度,Yao 等人[12]提出了一種混合代價聚合方法,可以評估像素之間的對應關系,在深度-不連續性區域中獲得了較好的精度,宋嘉菲等人[13]對立體匹配深度學習模型中的采樣方式進行改進,對于傳統線性插值采樣方式無法利用領域信息的缺點,其利用權重卷積窗口實現低分辨率采用高分辨率輸出,Xu等人[14]提出自適應形狀支持窗口的成本聚合方法,通過構建一個四方向的局部支持聚合骨架,同時擴展引導濾波來聚合成本量,其在深度不連續性和分段平滑區域方面取得了較好的匹配性能,暢雅雯等人[15]將HSV引入立體匹配的過程中,用Census 和梯度作為匹配代價函數,有效降低了對光照的敏感性。
針對傳統單一算法的適應性不強,同時提高算法的強健性,能夠應用在不同的場合,提出一種自適應紋理區域的多尺度融合立體匹配算法,在代價計算階段,首先計算并劃分出強紋理區域、弱紋理和無紋理區域,針對強紋理區域,使用AD 和Census 相結合計算代價,對于弱紋理和無紋理區域,考慮到梯度算子更能夠反應微小像素值的變換,故采用AD和梯度相結合的算法計算代價;在代價聚合階段,在強紋理區域,采用像素點距離和像素值之差作為十字交叉臂區域的構建約束條件,在弱紋理和無紋理區域,采用像素點距離和梯度值之差作為構建約束條件;最后,采用Winner-Take-All(WTA)策略進行視差計算,并利用掃描線優化和多步驟視差優化進行優化后處理,得到最終的視差圖。
所提算法的輸入為經過矯正的雙目攝像機立體圖片,對輸入左右圖像進行代價計算、代價聚合、視差計算和視差優化后處理,整體流程圖見圖1所示。匹配代價計算時,針對強紋理區域、弱紋理和無紋理區域,分別選擇AD+Census 和AD+梯度的代價計算函數,同時在劃分區域過程中自適應調整閾值;代價聚合時,選用動態十字交叉域構造方法,在不同紋理區域分別選擇不同的構建約束條件;視差計算采用WAT 策略計算每個像素點的最小代價值,進而得到視差圖;最終對得到的視差圖進行一系列后處理步驟,并輸出視差圖。

圖1 整體算法流程圖Fig.1 Overall algorithm flow chart
匹配代價計算是比較待匹配像素點和候選像素點之間的相關性,兩像素點之間的代價越小,則說明兩點的相關性越大(即兩點為同名點的概率也越大)。通常用一個三維矩陣DSI(disparity space image)儲存代價計算的結果,DSI的大小為H×W×D,其中H和W分別為圖像的高和寬,D為視差范圍。AD函數能適應重復區域匹配計算,且計算速度快,但是其對光照和噪聲敏感,在弱紋理和無紋理區域的匹配精度很低[15];Census變換具有良好的魯棒性,能夠適應不同的光照和噪聲,且弱紋理區域的匹配精度高,但其對于重復區域匹配精度很低[16];梯度算子能夠顯著提升弱紋理區域和無紋理區域的匹配精度,同時能夠提高視差不連續區域和遮擋區域的匹配效果[17]。為了在所有可能出現的場景中都獲得較高的匹配精度,例如重復區域、弱紋理區域、無紋理區域以及光照等外界因素,同時考慮到上述代價函數的特點,提出基于紋理區域的多尺度融合代價計算函數,在圖像上不同的區域運用不同的代價計算函數,并自適應調節相應閾值,從而獲得較高的匹配精度。同時由于沒有預先實驗,所以代價函數部分參數參考Liu等人所提出算法[18]中的實驗結果。
首先需要區分開圖像中的強紋理、弱紋理和無紋理區域,分別表示為Us、Uw、Un,將任意像素點周圍n個像素點值進行相加并取平均值,常見的n可設置為四方向或者八方向,設置判斷閾值τ,計算公式如下:
式(1)為利用周圍像素點灰度值均值與閾值進行比較判斷,式(2)為利用周圍像素點三通道顏色值均值與閾值τ進行比較判斷,Gi為像素點i的灰度值,flag為判斷標志位,若為1,則此像素點屬于Us;反之,則屬于Uw和Un。
經過上式計算后,在強紋理區域使用AD 和Census相結合的代價計算函數,在弱紋理和無紋理區域使用AD和梯度相結合的代價計算函數。
AD函數的主要策略是不斷比較左右圖像中兩點像素值大小,將待匹配圖像的某一像素點的像素值取出,同時在另一幅待索引的圖像中去尋找視差范圍內最小代價值的像素點,計算表達式如下:
式(3)和式(4)分別為像素點灰度值和顏色值的代價計算公式,CAD( )p,q代表像素點p和q之間的AD函數計算代價值,G代表灰度值,I代表彩色三通道值,L和R分別代表左右相機兩幅圖像,p和q代表左右圖像中的像素點。
Census 函數能夠很好地檢測出局部區域的結構特征,具有較高的匹配精度,對光照等外界因素適應性強,其主要策略是定義一個矩形窗口,長寬都為奇數,再用此矩形窗口遍歷整個待匹配和待索引圖像區域,并將窗口中心點的像素值設為中心值,同時對窗口內除中心點外的其他像素值與中心值進行比較,大于中心值則記為1;反之則記為0,將所得值映射為一個比特串,再對左右兩幅圖像的比特串進行異或,累加比特1的數目即可得到代價值。
式(5)~(7)中,p代表中心點,q代表中心點領域內的其他像素點,U為窗口內中心點的領域,Bp為求得的中心點處比特串,Bq為領域像素點比特串,將求得的左右圖像比特串代入式(7)中得到漢明距,即Census代價值。本算法中梯度函數主要是使用sobel算子求解圖像像素點的梯度值,主要計算方式如下:
上式中Gx和Gy分別為x和y兩個方向上的運算子,將兩個方向的運算子分別和左圖像L和右圖像R卷積得到兩個方向上的梯度幅值,此處為簡化運算,將兩方向梯度絕對值相加得到總幅值。
所提算法將不同的代價函數加權融合,得到最終的代價計算公式,如下:
上式中將不同的代價函數歸一化,且依據劃分出的不同區域,使用不同的代價計算函數,cost取值范圍在[0,2],λAD、λCensus、λGrad分別為三種代價函數歸一化換算系數。
為了驗證此算法代價計算的有效性,選擇2003 年Middlebury數據集中圖像cones,且都不經過代價聚合,只進行代價計算,獲得的視差圖見圖2 所示。從圖2 中可以看出,傳統AD和Census結合的代價函數對于上側深色框中的背景弱紋理處理效果優于傳統AD 和梯度結合的代價函數,但對于下側淺色框中的前后遮擋區域,AD 和梯度結合的代價函數處理效果優于AD 和Census結合的代價函數,而本文所提出的算法能夠很好地綜合前兩者的優點,既能在背景弱紋理區域能取得比較好的效果,也能在遮擋區域和視差不連續區域獲得較好的視差值。

圖2 基于不同代價計算方法的cones圖像的初始化視差圖Fig.2 Initial parallax diagram of cones image based on different cost calculation methods
傳統的代價聚合都是采用統一的十字臂區域構建約束條件,即在弱紋理、無紋理區域以及強紋理區域都采用統一的臂長構建方法,這樣的構建方式不能夠適應復雜多變的環境,而且還有可能增加聚合中像素點代價的錯誤賦值,從而導致最終的誤匹配率增加。例如在弱紋理和無紋理區域臂長設置過小,從而會導致中心點的像素代價值不準確。故所提算法在十字臂的構建過程中弱化了像素點值(顏色值或者灰度值)之差約束條件,而且添加梯度幅值之差的約束條件,使得在圖片的弱紋理和無紋理區域的構建臂長變長,提高聚合的精度。傳統CBCA算法[19]中十字交叉域構造的構建判斷條件如下:
式(11)和式(12)中是為了限制兩像素點p和q之間的顏色值之差的最大值,同時限制q與其相鄰點q1的顏色值之差的最大值,其中q為領域像素點,p為中心像素點,Dc(p,q)表示p和q之間的像素點值之差,Ds(p,q)表示p和q之間的空間長度之差,并設置閾值τ1;式(13)中是為了限制兩相鄰像素點的空間位置長度,并設置閾值L。
后面為了使得十字交叉區域包含更多的像素點,將空間長度擴大L1>L,同時設置更加嚴格的顏色閾值τ2,在上面的基礎上添加的判斷條件表達式如下:
上式中當p和q兩像素點的空間距離在[L2,L1] 之間時,將顏色值之差閾值設置為τ2(τ2<τ1),從而得到更大的臂長。
所提算法在代價計算過程中劃分出不同紋理區域的基礎上,在不同區域設置不同的判斷條件,在強紋理區域設置顏色值之差和空間臂長之差兩約束條件;在弱紋理和無紋理區域設置梯度和空間臂長之差兩約束條件。具體表達式如下:
基于紋理區域動態十字臂區域構建結果如圖3 所示,圖3(a)和圖3(b)中非空白區域為像素點動態支持域,深色為構建過程中的豎直臂和水平臂,構建支持域有兩種策略,即先豎直后水平或者先水平后豎直,見圖3所示。

圖3 十字臂兩種構建策略圖Fig.3 Two construction strategies of cross arm
從圖4(a)和(b)可以看出在弱紋理區域,傳統CBCA算法中構建的十字支持域臂長小于本文所提出的十字臂長,即本文在弱紋理區域所構建的支持域能夠包含更多的像素點;同時在強紋理區域,本文構建的支持域和傳統的CBCA算法構建的支持域相差不大,都能取得很好的效果,如圖4(c)和(d)所示。

圖4 強紋理和弱紋理區域的十字交叉臂對比Fig.4 Cross arm comparison between strong texture and weak texture areas
在代價聚合后,采用WAT(贏家通吃)策略計算每個像素點的最小代價,從而獲得視差值,如式(16):
式(16)中D為視差范圍,從而得到最終的視差值disp。
經過代價聚合后的像素點視差值仍然有很多錯誤的匹配點,為了進一步降低誤匹配率,需要進行后處理,步驟可以參照Liu 等人[20]和Guo 等人[21]提出的算法,先后進行左右一致性檢查(L-R check),迭代局部投票和子像素優化三步。其中左右一致性檢查是基于視差唯一性約束,剔除錯誤視差,表達式如下:
式(17)中DL(p)為左視差圖的視差值,DR(p-dL)為右視差圖對應點的視差值,通過比較兩者的差值來提取出錯誤匹配點。
再對上面左右一致性檢查處理后的無效像素點進行迭代局部投票,統計支持域內像素點在視差范圍內直方圖的得票,最終選擇得票最多的像素點的視差值,判斷表達式如下:
最后再進行子像素優化[22],通過一元二次擬合得到精度更高的視差值,表達式如下:
為了驗證本算法的有效性和魯棒性,采用Middlebury 2006數據集,實驗中各參數設置如表1所示,用誤匹配率來衡量算法的精度,設置視差閾值為1。

表1 實驗參數設置Table 1 Experimental parameter setting
為了驗證本算法的有效性和圖像失真時魯棒性,這里選取四種代價函數相對比,分別為SAD 和Census 相結合(SAD+Census)[23]、AD和Census相結合(AD+Census)[24]、AD和梯度相結合(AD+梯度)[20]及本文提出的基于紋理區域自適應代價計算。測試圖像選擇Middlebury 2006數據集中的4 組立體圖像對(Aloe、Baby1、Cloth3 和Wood1)分別在不同的光照、曝光條件和無失真的條件下進行實驗,并且不進行代價聚合和后處理,實驗結果圖像如圖5~圖7 所示。表2~4 分別為不同代價函數在不同的光照、曝光條件和無失真的條件下的4組圖像的誤匹配率,表中Avg為平均誤匹配率。

表2 不同代價函數在不同光照下的誤匹配率Table 2 Mismatch rate of different cost functions under different illumination

圖5 Aloe、Baby1和Wood1在不同光照下不同代價函數視差圖Fig.5 Parallax diagram of different cost functions of Aloe,Baby1 and Wood1 under different illumination

圖6 Aloe、Baby1和Wood1在不同曝光下不同代價函數視差圖Fig.6 Parallax diagrams of different cost functions of Aloe,Baby1 and Wood1 under different exposures

圖7 Aloe、Baby1和Wood1在無失真下不同代價函數視差圖Fig.7 Parallax diagram of different cost functions of Aloe,Baby1 and Wood1 without distortion
從表2到表4中,可以看出SAD和Census結合的代價函數與AD和Census結合的代價函數在不同光照、不同曝光和無失真情況下的誤匹配率相當,且相較于AD和梯度相結合的算法,誤匹配率下降16.55%,所以本文提出的代價函數在強紋理區域選擇AD 和Census 結合的代價函數計算代價;同時對于表4 中的弱紋理圖像Wood1,AD 和梯度相結合的算法相較于SAD 和Census結合的代價函數以及AD 和Census 結合的代價函數而言,誤匹配率下降5.33%,所以在弱紋理和無紋理區域,本文選擇AD 和梯度結合的代價函數計算代價;由表2和表3可知,梯度受到光照和曝光等外部因素的影響很大,由實驗結果可知,本文所提出的代價函數不僅能夠適用于強紋理區域,而且在弱紋理和無紋理區域也有很好的魯棒性,能夠適用于多種復雜的外部環境。

表3 不同代價函數在不同曝光下的誤匹配率Table 3 Mismatch rates of different cost functions under different exposures

表4 不同代價函數在無失真下的誤匹配率Table 4 Mismatch rates of different cost functions without distortion
為了驗證本文所提出的十字臂構建策略在代價聚合中的有效性,本文選擇Middlebury數據集作為測試圖像,實驗均采用相同的代價計算函數,且都不進行視差后處理。實驗對比了本文算法及SAD+Census、AD+Census、SGM[10]、IGF[16]、ADSR_CIF[17]、LESC[18]和ELAS[19]算法,實驗結果見圖8 所示,與傳統SAD+Census、AD+Census 和SGM 算法相比,所提算法在弱紋理和無紋理區域取得更加精確的匹配效果;同時與IGF、ADSR_CIF和ELAS算法相比,所提算法在豐富紋理圖像上的匹配精度更高,但前者在視差不連續區域匹配精度更高,與適應性最好的LESC 匹配效果相當,但所提算法更簡單,能應用于實時匹配。由表5 數據可知,本文算法相較于其他算法中效果次好的ELAS算法,誤匹配率下降了3.57個百分點,相較于LESC算法,實時性相對更強。由于在弱紋理和無紋理區域所包含的像素點更多,所以聚合后的視差更能接近真實視差值;在代價聚合后,可以進行視差后處理步驟,能夠進一步提高最終視差圖的匹配精度,最終,Cones、Teddy、Wood2、Cloth3、Rock2、Plastic、Aloe和Baby1圖像經過后處理優化后,誤匹配率分別為12.04%、13.34%、12.86%、9.15%、11.84%、12.58%、10.94%和12.16%。

表5 所提算法與其他算法聚合后的誤匹配率Table 5 Error matching rate after aggregation of proposed algorithm and other algorithms

圖8 不同立體匹配算法聚合后視差圖Fig.8 Parallax map after aggregation of different stereo matching algorithms
為了分析不同的參數對實驗結果的影響,對實驗過程中的9個主要參數進行分析,本算法在紋理區域判斷的閾值τ設為4(即四個方向的像素點差值都設置為1)。立體匹配圖像選用Middlebury 2003 數據集中的Cones和Teddy,實驗結果如圖9所示。其中,參數λGrad、λCensus和λAD是匹配代價計算中的三個主要參數,而參數L1和L2以及t1~t4都是代價聚合過程中的主要參數。由不同參數實驗匹配精度結果可知,由(a)知參數λGrad在60之后的匹配精度無明顯變化,故取值為60;由(b)知,隨著λCensus值的遞增,誤匹配率在不斷上升,由曲線Cones可見,在30 時取到最小值,但曲線Teddy 上則是不斷遞增,故為綜合兩曲線,取值為20;由(c)知λAD對兩條曲線的誤匹配率影響趨勢不同,且曲線Cones 在150 之后趨勢變緩,故取值為150;由(d)知隨著L1遞增,誤匹配率在不斷上升,且對于曲線Teddy,在26~28之間有一個突變下降,故綜合兩條曲線,取值為28;由(e)知L2對兩條曲線的影響不同,對Cones 無顯著影響,對Teddy 而言,隨著L2遞增,誤匹配率不斷上升,故最終取值為13;由(f)知隨著t1遞增,兩條曲線的誤匹配率都在不斷下降,故取值為24;由(g)知t2對兩條曲線的影響不相同,且曲線Cones在t2取7后,誤匹配率無顯著變化,故取值為7;由(h)知參數t3對曲線Cones 而言,除了在開始不斷下降外,總體上都是無明顯變化,故取值為250;由(i)知隨著t4遞增,兩條曲線誤匹配率不斷上升,故取值為1,將所有參數設置為上述分析的值后,可以獲得精度更好的視差圖。

圖9 不同參數實驗結果圖Fig.9 Experimental results of different parameters
文章提出了一種自適應紋理區域的多尺度融合立體匹配算法,在代價計算階段,首先劃分出強紋理、弱紋理和無紋理區域,再在強紋理區域采用AD和Census相結合的代價函數,在弱紋理和無紋理區域采用AD和梯度相結合的代價函數,使得本文提出的代價函數能夠適應不同紋理區域,并取得相當好的匹配精度;在代價聚合階段,在強紋理區域采用顏色和空間距離相結合的十字臂支持域構建條件,在弱紋理和無紋理區域采用梯度和空間距離結合的構建條件,與傳統的CBCA構建方法相比,本文提出的構建方法能夠適應不同的紋理區域,且在弱紋理和無紋理區域能夠包含更多的像素點,得到更長的臂長。實驗選擇不同光照、不同曝光和無失真三種情況,對比不同代價函數的匹配精度,從而構建出此算法的代價函數;同時再對比此算法和其他七種主流算法在代價聚合后的匹配精度,實驗結果表明,此算法較于ELAS,最終平均誤匹配率下降3.57個百分點,相較于LESC,實時性更強;最后經過參數分析后,得到對于此算法匹配效果較好的參數取值,提高算法的穩健性,能夠較好地適應不同的場景,但此算法在視差不連續區域的匹配精度還有待提高,今后將進一步進行研究。