王 丹,楊家琪,楊謝柳
(沈陽建筑大學機械工程學院,遼寧 沈陽 110168)
立體匹配作為計算機視覺研究的基礎和熱點之一,其主要任務是找到實際環境物體在雙目或多目視圖上的對應點,進而獲得較為準確的三維位置信息,其在機器人導航、地圖重構及人工智能等領域得到廣泛應用。現有的立體匹配算法有很多種,大致可以分為局部立體匹配算法和全局立體匹配算法。全局立體匹配算法在全局范圍內建立一個能量函數,利用優化函數求取最小值。目前,主要的算法有動態規劃[1]、圖割法[2]和基于遺傳算法[3]等。全局立體匹配算法計算結果精度高,但是算法結構復雜,運算時間久,在實時匹配場景下有局限性。局部立體匹配算法以單像素為中心在其周圍建立窗口,利用周圍窗口信息計算單像素的視差。由于周圍窗口信息的局限性,相較全局匹配算法匹配精度低,但是算法結構簡單,計算復雜度低,運算時間短,易于實現。近年來,有大量的基于局部的算法被提出,使得局部匹配算法的精度大大提升,有利于獲得精度較高的稠密視差圖。
閆利等[4]將立體匹配分為匹配代價計算、匹配代價聚合、視差計算和視差精化4個部分。常用局部立體匹配代價計算[5-6]主要有以下幾種:基于距離的代價計算函數有像素灰度差絕對值之和函數(SAD)、像素灰度差平方和函數(SSD)等;基于相關性的代價計算函數有歸一化相關函數(NCC)、零均值歸一化函數(ZNCC)等;基于非參數變換的代價計算函數有Rank和Census[7]等。近年來,研究者又提出了許多新的局部匹配代價計算方法。De-Maeztu等[8]對基于梯度的匹配代價進行了改進,Lee等[9]提出了三狀態Census變換。Hirschmuller等[10]通過對比不同匹配代價算法,發現Census算法對角度、色彩、光照的敏感度較弱,魯棒性較好。許金鑫等[11]發現Census變換減小了匹配結果中相機對圖片引起的外部干擾,但是Census變換過分依賴窗口中心的單像素,導致該算法在噪聲過多或者重復紋理區有較高的誤匹配率。SAD變換對圖像的灰度有很好的體現,在重復紋理區的邊緣區域有較好的匹配效果,但SAD算法本身對噪聲極其敏感,魯棒性較差。Mei等[12]將SAD算法與Census算法結合,在重復紋理區域取得了較好的效果,很好地平衡了SAD和Census變換的優缺點。在之后的研究當中,Yoon等[13]、He等[14]在代價聚合階段分別采用雙邊濾波和引導圖濾波,保證了圖像邊緣效果的同時,也保證了計算效率。以上算法在進行代價聚合階段之前,都完成了匹配代價的計算,而且匹配代價的計算準確性對代價聚合階段有很大的影響。
針對以上問題,本文對于Census變換過分依賴窗口中心單像素信息的問題,添加了局部像素反差值對中心像素進行選擇的策略,改進了Census變換算法,豐富了變換信息的計算方法,更充分地利用了待匹配點周圍的像素信息,改善了算法對噪聲的敏感。
本文算法按照匹配代價計算、匹配代價聚合、視差計算和視差精化4個部分完成圖像匹配。其中,匹配代價計算階段采用改進Census和改進SSD結合的代價;在匹配代價聚合階段采用多尺度空間下的引導圖濾波算法,并通過正則化將多尺度空間下的信息進行統一;最后通過視差計算和視差精化得到最終的視差圖。算法流程如圖1所示。

圖1 算法流程
傳統的Census變換的本質是選取圖像中某一像素點為中心像素,在該中心像素周圍建立一個矩形窗口W(p),然后遍歷圖像,以中心像素p的灰度值作為參考值與窗口中每個像素q的灰度值進行比較,當灰度值大于中心像素灰度值時,記為0;否則,記為1。這樣就可以將窗口能的灰度信息變換成關于0/1的比特串。變換過程的表達式為

(1)
其中,I(p)為中心像素的灰度值;I(q)為窗口鄰域內其他像素的灰度值;?為按位連接2個比較的結果;ξ[I(p),I(q)]為

(2)
由于傳統的Census變換過分依賴中心像素點的灰度值,未能考慮到噪聲對整個窗口的影響,而相機在實際獲取圖像時,噪聲是不可避免的,這些噪聲的引入必將影響最終匹配結果的精確程度。傳統的Census變換并沒有充分利用窗口內周圍像素的灰度信息,存在較大的缺陷。
在文獻[15]中提出一種描述局部像素反差的值δ,該值在一定程度上對局部紋理像素變化進行了描述,是區別于像素均值等傳統像素信息描述的數值,更好地利用了局部區域內的像素信息。針對以上傳統Census變換的問題,本文將δ引入到傳統的Census變換中,提出一種改進的Census算法,將δ替換傳統評判標準中的像素I。首先計算中心像素點(x,y) 建立的局部窗口內像素均值IAVE(x,y),以IAVE(x,y)為標準挑選出較大和較小的像素值,對2個部分的像素值進行比較,得到1個數值,利用該數值結合傳統Census變換對窗口內像素進行二進制數值編碼。通過對δ的引入,不但增加了對窗口鄰域內像素信息的利用率,而且更好地對不同窗口之間進行了有利的區分,使得變換結果不再依賴單一的中心像素值,減小了窗口內單個像素波動對匹配結果的影響,有更好的魯棒性。δ定義為
(3)
將δ作為衡量標準引入Census變換中,則有
(4)
α為設定的閾值,用來衡量窗口區域內像素信息的復雜程度,α值選擇過大會影響匹配精度,選擇過小則起不到比較的作用,通過實驗得出的α區間為[10,15],文中采取的閾值為13。形成二進制編碼的定義式為
(5)
Iz(p)為閾值選擇后的窗口中心像素值。
利用式(6)計算匹配點和待匹配點集的Hamming距,即對2個像素點進行變換后的二進制編碼進行異或運算,得到最終的變換代價值。相同數值越多,Hamming距越小,匹配代價值越大。改進后的Census算法為Cncen(p,d),代價表達式為
Cncen(p,d)=Ham(T(p),T(pd))
(6)

本文將傳統SSD函數與ρ(n)函數[16]結合,得到一種新的改進SSD算法。傳統SSD函數為
CSSD(p,d)=
(7)
d為視差值;(x,y)為中心像素點p的坐標;CSSD(p,d)為左圖像上點IL(x,y)和對應右圖像上點IR(x+d,y)之間的SSD計算值;I為像素灰度值;W為左圖像中某中心點(u,v)的鄰域窗口。
ρ(n)函數表達式為
(8)
n的含義為n(x,y)=IL(x+i,y+j)-IR(x+i+d,y+j);d為視差值;σ為可變參數。
將ρ(n)函數與傳統的SSD函數進行結合,改進成新的SSD函數,稱為NSSD函數,改進后的函數形式為
(9)
改進的Census算法與改進的SSD算法歸一化后的代價值Cag(p,d)為
Cag(p,d)=ρ(Cncen(p,d),μncen)+
ρ(CNSSD(p,d),μNSSD)
(10)
μNSSD和μncen分別為控制改進NSSD算法和改進Census算法權重的可變參數;ρ(c,μ)為基于可變參數c和μ的函數。其中,μncen和μNSSD為經驗值,對于不同的圖像需要多次實驗計算求取。μncen一般取15,μNSSD取6。
在完成匹配代價計算后,考慮到單個像素間聯系性差,易受干擾,為了加強像素間的聯系,需要對周圍像素進行代價聚合。故采用符合人類視覺系統的多尺度代價聚合模型,即高斯金字塔結構[17]和引導圖濾波算法[18]完成代價聚合。
先將待匹配圖像高斯下采樣,將圖像分層,每層圖像采用引導圖濾波算法進行聚合,為增強各層之間的聯系,再對每層圖像進行代價聚合,將多尺度空間下得到的代價聚合值作為最終的匹配代價。具體過程見文獻[17],這里只給出多尺度代價聚合公式和引導圖濾波公式。
引導圖濾波核函數為
Wi,j(I)=
(11)

(12)

在完成代價聚合后,采用傳統的win-take-all算法進行視差選擇,獲得的初始視差值為
(13)

由于采集的圖像存在遮擋區域和視察不連續區域,所以在完成代價聚合后,還需通過一系列優化處理方法對初始視差值進行視差優化。本文首先采用區域投票方法[4],選取區域內出現頻率最高的視差點作為該區域中心點的視差值;采用左右一致性檢測[12]檢測遮擋點。設dL(p)和dR(p)為左、右視差圖對應點p的左、右視差值,如果dL(p)與dR(p)不相等,則認為p點為遮擋點,需要掃描與p點一條水平線上的視差值,找出p點左右離p點最近的非遮擋點作為視差值;最后進行1次中值濾波作為最終的視差圖像。
為驗證本文算法的有效性,使用C++語言在Visual Studio 2019平臺下對Middlebury的素材進行處理,實驗硬件配置為:Intel Core i7-4720HQ CPU@2.60 GHz和8 GB內存。處理素材為Middlebury平臺下的Tsukuda、Venus、Teddy、Cones標準數據集,對誤差等評價標準進行實驗分析,并 和其他算法的實驗結果進行對比,對本文改進算法的實驗效果進行驗證。實驗過程中相關參數設置為{s,δ,ε,λ,Rd,W}={5,0.1,0.000 1,0.3,35,3×3}。
為驗證本文改進Census算法在代價匹配階段的可行性與優越性,選用Middlebury平臺下的Tsukuda、Venus、Teddy、Cones等4組圖像,在只使用改進Census算法的情況下與傳統的Census算法進行實驗對比,得到如圖2所示的實驗結果,從左到右依次為Tsukuda、Venus、Teddy、Cones。匹配代價誤匹配率對比數據如表1所示。

圖2 匹配代價算法對比

表1 匹配代價誤匹配率對比
由圖2可以看出,傳統Census算法可以還原場景中物體的基本輪廓,但整體的視差圖中有較多的噪點,改進Census算法明顯減少了噪點的存在;再結合表1可以看出,傳統Census算法由于窗口像素信息單一,導致在圖像平坦區域有較高的誤匹配率;相比于傳統Census算法,改進Census算法減小了平坦區域的孔洞現象,提高了算法的匹配精度,有較高的魯棒性。但同時因為改進算法中加入了對中心像素選擇的一步計算,導致計算時間要比傳統算法長。
為了進一步驗證本文算法抗噪性,對Middlebury平臺下的Tsukuda圖像分別添加5%、10%、15%、20%、25%的椒鹽噪聲進行實驗。圖3為Tsukuda圖像在噪聲為5%時的匹配效果對比圖。5%椒鹽噪聲下誤匹配率如表2所示。

圖3 5%椒鹽噪聲下匹配代價對比

表2 5%椒鹽噪聲下的誤匹配率 %
通過圖3可以看出,對相同噪聲干擾下的圖像進行處理,傳統Census算法的匹配代價圖中雖然可以基本還原物體輪廓,但存在大量的黑白椒鹽噪聲;改進的Census算法在還原物體輪廓的基礎上,并沒有受到太大的噪聲干擾,匹配代價圖中只有少量的噪聲。結合表2,改進Census算法在存在噪聲干擾的情況下,整體的誤匹配率均低于傳統Census算法。可以看出,改進Census算法有良好的抗噪性能。
為了進一步全面客觀地驗證本文算法的可行性以及總體性能,選用幾種改進Census算法進行比較,這些算法包括ADCensus[12]、AdaptWeight[13]、RTCCensus[19]、RINCensus[20]和SAD-IGMCT[21]。不同算法誤匹配率數據如表3所示。從表3中可以看出,本文算法平均誤匹配率高于ADCensus算法平均誤匹配率,低于大部分改進Census算法誤匹配率,表現出較好的整體性能。
為了更直觀展示本文算法的效果,圖4為本文改進算法對Tsukuda、Venus、Teddy、Cones圖片處理得到的視差圖和誤匹配像素圖(白色區域為匹配正確區域,黑色為匹配錯誤區域),從左到右依次為Tsukuda、Venus、Teddy、Cones。

圖4 本文算法測試效果示意

表3 不同算法誤匹配率 %
通過圖4c中Venus(存在大塊平坦區域)可以看出本文算法對于平坦區域有較好的匹配效果,沒有較大的孔洞現象,這說明改進的Census算法更加充分地利用了窗口鄰域信息,使得圖像平坦區域也有很好的區分,同時多尺度代價聚合模型更近一步的加強不同層圖像之間的聯系,使相鄰區域有更好的區分度;從圖4c可以看出邊界區域貼合實際場景,能很好地顯示場景中物體輪廓,這說明采用的引導圖濾波算法加強了圖像邊緣的區分度。
本文通過添加中心像素判斷策略,改進了傳統Census算法,提出了一種基于改進Census變換的圖像立體匹配算法。在傳統Census變換單一地選取中心像素作為參考的基礎上,引入局部像素反差值作為中心像素選取的評判標準,更好地利用了窗口內的像素信息,改善了傳統Census變換抗噪性差的特點。在視差聚合階段,引入多尺度代價聚合模型——高斯金字塔結構,并將引導圖濾波算法融入模型中,加強了鄰域像素的區分度,進一步提高了匹配精度。