孫 麗 孫彥瑋 李 浩
(1.生態(tài)環(huán)境部南京環(huán)境科學(xué)研究所 南京 210042)(2.河海大學(xué)地球科學(xué)與工程學(xué)院 南京 211100)
在計算機(jī)視覺和攝影測量等領(lǐng)域,利用雙像立體匹配計算場景的深度信息是目前的一個重要研究方向,在許多立體視覺應(yīng)用中發(fā)揮著重要的作用,比如三維重建、運動檢測、駕駛輔助系統(tǒng)等。通常,立體匹配算法可以主要劃分為兩類:局部算法和全局算法。在局部算法中,一般采用勝者為王(Winner Takes All,WTA)模式匹配候選點,即認(rèn)為匹配代價最小者為正確匹配,此類方法計算速度快,但是精度較差;全局算法對整幅圖像構(gòu)建一個全局能量函數(shù),并附加平滑約束,以此來優(yōu)化視差圖[1~2],此類方法視差精度高,但是計算復(fù)雜,無法滿足實時性要求。2005 年,Hirschmuller[3~4]提出了一種介于局部算法和全局算法之間的半全局密集匹配算法,該方法在滿足實時性要求的同時,實現(xiàn)了精確的密集深度估計,得到了眾多研究人員的關(guān)注與改進(jìn)。
鑒于在二維空間進(jìn)行全局能量最小化被證明是NP 困難(Nondeterministic Polynominal-hard)問題,SGM算法將二維能量最小化轉(zhuǎn)換為多個一維路徑的能量最小化。為了優(yōu)化因噪聲和遮擋等因素造成的匹配錯誤,SGM 的能量函數(shù)包含三個部分:數(shù)據(jù)項、懲罰項P1和懲罰項P2,當(dāng)一維路徑中前后兩個像素的視差變化較小時,附加一個較小的懲罰項P1,當(dāng)視差變化較大時附加較大的懲罰項P2。然而在視差邊緣區(qū)域具有較大的視差變化是合理的,如果附加較大的懲罰項會造成視差圖在視差邊緣處過度平滑,降低深度估計的精度,因此視差邊緣(即深度不連續(xù))區(qū)域的精確視差估計仍然具有重要的研究意義。
為了改進(jìn)深度不連續(xù)區(qū)域的視差估計精度,研究人員在SGM 算法的基礎(chǔ)上提出了許多改進(jìn)算法。其中,自適應(yīng)懲罰項算法認(rèn)為在代價聚合路徑上像素灰度值差異越大,該區(qū)域是視差邊緣的概率越大,因此需要減小懲罰項P2,Banz[5]和Stentoumis[6]對現(xiàn)有的自適應(yīng)懲罰項優(yōu)化算法進(jìn)行了總結(jié)與評價,盡管此類算法取得了一定的提高,但是自適應(yīng)函數(shù)中的參數(shù)對于不同圖像或代價函數(shù)的適應(yīng)性較差,難以推廣。另一方面,有研究者將圖像的幾何特征引入到密集匹配的過程中,例如圖像邊緣特征和分割結(jié)果等。Ko 等[7]利用K 均值聚類方法對圖像進(jìn)行分割,并在每一個分割塊中利用視差種子點分別進(jìn)行代價聚合和視差估計。Liu[8]等根據(jù)圖像分割結(jié)果和初始視差圖構(gòu)建了一個新的能量函數(shù),并通過合并較小的分割塊優(yōu)化能量函數(shù)。圖像分割算法雖然能一定程度上避免視差邊緣的過度平滑,但是分割結(jié)果的好壞直接影響了視差估計的結(jié)果,如果分割過于密集則深度估計結(jié)果不夠平滑,如果分割過于粗糙則會忽略掉深度變化的細(xì)節(jié)特征。因此,利用圖像的邊緣特征優(yōu)化視差邊緣處的深度估計精度被認(rèn)為是一種更為有效的方法,因為在視差邊緣處一般也會形成明顯的圖像邊緣。Xie[9]等在利用SGM 算法得到視差圖的基礎(chǔ)上,利用邊緣檢測和水平、垂直方向的視差線性擬合優(yōu)化初始視差圖,對弱紋理和遮擋區(qū)域取得了較好的結(jié)果。Zhu[10]將自適應(yīng)邊緣保留導(dǎo)向濾波算法引入到代價計算的過程中,也取得了一定的提高。Chuang[11~12]提出了一種分步的SGM 優(yōu)化算法,首先利用基于十字的局部密集匹配算法得到初始視差圖,然后結(jié)合邊緣特征自適應(yīng)計算懲罰項,隨后再用SGM算法計算最終的視差圖。
為了提高在深度不連續(xù)區(qū)域的視差估計精度,本文在SGM 算法的基礎(chǔ)上,引入圖像的邊緣特征,提出一種基于邊緣視差圖優(yōu)化的密集深度估計算法。與自適應(yīng)懲罰項和視差平面擬合等后處理算法相比,本文創(chuàng)新性地改進(jìn)了算法的代價聚合步驟,首先檢測立體像對中的邊緣特征,然后利用DAISY描述符[13]匹配邊緣像素得到邊緣視差圖,為了避免錯誤代價在邊緣處傳播,本文算法利用提取的邊緣將每一個代價聚合路徑分割為多個子路徑,并獨立進(jìn)行代價聚合的計算,同時適當(dāng)提高非邊緣處的懲罰項P2。本文算法既提高了在視差邊緣處的深度估計精度,也保持了非邊緣區(qū)域視差的平滑性。
本節(jié)將詳細(xì)描述本文算法的實現(xiàn)過程,圖1 展示了本文算法的計算流程,算法主要由五個步驟組成:結(jié)合AD(absolute difference)和Census的代價計算、邊緣視差圖計算、代價聚合、視差估計和視差優(yōu)化,其中視差優(yōu)化采用左右一致性檢查方法。
圖1 本文算法流程圖
在匹配代價計算步驟中,對于立體像對中左圖的每一個像素,計算其和視差范圍內(nèi)右圖中的每個像素的相似性度量作為匹配代價。本文采用兩個應(yīng)用最為廣泛的代價計算方式:像素灰度的絕對差(absolute difference,AD)和Census 變換的漢明距離?;叶炔钣嬎愫唵危菍庹兆兓m應(yīng)性差,Census 變化[14]通過比較中心像素和鄰域像素的灰度關(guān)系得到一個二值字符串,再計算漢明距離得到相似性度量值,Census變換對于光照變化魯棒性較好,因此常被用于匹配代價計算[15]。
在圖像中,深度不連續(xù)區(qū)域通常反映為圖像的邊緣特征,因此本文首先利用Canny 算法[16]檢測圖像邊緣。在視差范圍內(nèi),對于左圖中的每一個邊緣像素,在右圖中通常具有數(shù)個邊緣像素,如圖2 所示,圖中灰色正方形代表立體像對中的邊緣像素,具有灰色輪廓的正方形代表視差范圍內(nèi)右圖中的匹配候選點。本文采用DAISY 描述符度量不同邊緣像素間的相似性,當(dāng)左圖中該像素與右圖中的某一個候選點具有最小的歐氏距離時,則認(rèn)為該對像素點是正確匹配的邊緣點,計算兩點間的水平距離即為左圖中邊緣點的視差值。對左圖中每個邊緣點重復(fù)上述過程即可得到初始的邊緣視差圖。
圖2 邊緣像素匹配示意圖
由于左圖中邊緣像素在右圖中的正確匹配邊緣點并不一定能夠被Canny 算法檢測出來,或者錯誤的匹配點有一定的概率具有最佳的相似性度量,因此本文算法使用RANSAC(RANdom SAmple Consensus)算法移除錯誤匹配點。首先,從初始的邊緣視差圖中隨機(jī)選擇四對匹配點計算投影變換矩陣;然后,根據(jù)投影變換矩陣計算左圖中邊緣像素點在右圖中形成的投影點,如果投影點與真實點之間的距離小于某個特定的閾值(取10 個像素),則認(rèn)為兩點為正確匹配點,視差計算正確,否則放棄該點視差值,將初始視差圖中該點灰度值置零。圖3 展示了邊緣視差圖的生成過程,圖像中的黑色為背景,輪廓線的灰度值代表每個邊緣像素的視差值,為便于觀看,將灰度范圍標(biāo)準(zhǔn)化到0~255。
圖3 邊緣視差圖生成
代價聚合是立體匹配的一個至關(guān)重要的步驟,決定了算法的效率和精度。局部匹配算法采用逐像素的方式評估最小匹配代價,缺少平滑約束和代價聚合過程,所以很容易受到噪聲和遮擋的影響產(chǎn)生錯誤的視差值。因此全局算法將平滑約束加入到代價函數(shù)中,通過對不同的視差變化施加不同的懲罰項,構(gòu)建一個更加精確的能量函數(shù),提高視差估計的精度。對于視差圖像D,能量函數(shù)E(D)可表示如式(1):
其中,第一項C(p,Dp)是視差為D 時所有像素匹配代價的和,第二項表示在視差變化等于1 的時候施加一個較小的懲罰項P1,第三項表示在視差變化大于1的時候施加一個較大的懲罰項P2。
全局算法通過最小化能量函數(shù)E(D)來獲得最優(yōu)的視差圖,但是在二維空間中最小化能量函數(shù)是非常困難的,因此SGM 算法將全局的二維能量最小化近似為多個一維路徑下的能量函數(shù)最小化。通常,一維路徑下的代價計算函數(shù)Lr(p,d) 可表示為式(2):
但是,對于視差邊緣區(qū)域,對較大的視差變化施加一個大的懲罰項,會造成視差邊緣的過度平滑,這顯然是不合適的,因此本文針對視差邊緣區(qū)域的精確深度估計問題,結(jié)合邊緣視差圖,提出了一種分段代價聚合算法。
本文算法中,為了避免視差邊緣的過度平滑,利用2.2節(jié)計算得到的邊緣視差圖對代價聚合路徑L 進(jìn)行分段,同時將邊緣處的視差值作為每一分段的初始視差值分別進(jìn)行代價聚合的計算,有效避免了錯誤代價的累計效應(yīng)。分段的一維代價計算函數(shù)可表示如式(3)。
圖4 分段約束代價聚合
如圖4 所示,圖中矩形代表視差空間,不同視差d 處具有不同的視差代價,矩形最左側(cè)是該路徑的起點。在原始的SGM 算法中,每一個路徑的初始視差值都是取該路徑起點處代價最小者的視差,Lr(b,d )=c(b,d ),然后連續(xù)代價聚合直至像素點p。本文算法利用邊緣視差圖分割代價聚合過程,如果像素p1是邊緣像素,則令Lr(p,d )= c(p,dedge),其中dedge是2.2 節(jié)中計算出的邊緣視差值。本文方法可以有效避免錯誤代價的傳播和視差邊緣的過度平滑。
為了驗證本文算法的有效性,我們采用立體基準(zhǔn)數(shù)據(jù)集和真實場景影像對算法進(jìn)行評估,其中基準(zhǔn)數(shù)據(jù)集采用明德學(xué)院Middlebury Stereo Evaluation-Version 3中四分之一分辨率大小圖像,并與原始SGM 算法做比較。表1 顯示了兩種算法的錯誤像素百分比以及運行時間,錯誤像素百分比被分為全部像素和非遮擋像素兩部分分別進(jìn)行比較,其中當(dāng)視差估計值與真值的差大于1 個像素時,該像素被認(rèn)為是錯誤像素。實驗程序采用C++語言編寫,實驗平臺是Windows 10,Intel Core i7-6700HQ 處理器,8 GB內(nèi)存,Visual Studio 2015。
由表1 可以看出,本文算法在保持計算時間基本不變的基礎(chǔ)上,有效降低了視差圖的錯誤像素百分比,在全部像素和非遮擋像素兩類中分別平均下降了1.25 和1.24 個百分點。圖5 展示了原始SGM算法與本文算法的實驗結(jié)果圖,從左到右依次為左圖像、邊緣視差圖、原始SGM 視差圖以及本文算法視差圖,圖中用灰色矩形標(biāo)示出了視差圖中改進(jìn)較為明顯區(qū)域,從圖中可以看出,本文算法在視差不連續(xù)區(qū)域的表現(xiàn)明顯優(yōu)于原始SGM,視差跳躍邊緣更加平滑,與原始圖像的邊緣更加貼合。
表1 原始SGM算法與本文算法的錯誤像素百分比與運行時間比較
為了驗證本文算法在真實場景中的有效性,我們采用低空無人機(jī)影像對算法進(jìn)行了進(jìn)一步的評估,實驗中選擇建筑物較為密集區(qū)域的影像,有利于邊緣檢測,突出本文算法的優(yōu)勢。原始影像及密集深度估計結(jié)果如圖6 所示,第一列是左圖像,第二列是原始SGM 視差圖,第三列是本文算法視差圖。對比第一行視差圖可以發(fā)現(xiàn),本文算法能較好地表現(xiàn)出行道樹的視差值,而不會被過度平滑。由第二行可得,本文算法能正確地反映出人字形屋頂?shù)囊暡钭兓瑴p少了屋頂周圍的錯誤視差。對比第三行視差圖可知,由于本文算法在非邊緣區(qū)域增大了視差跳躍的懲罰項P2,因此有效消除了馬路等弱紋理區(qū)域的錯誤視差。
本文中,我們提出了一種利用邊緣視差圖優(yōu)化視差邊緣的半全局匹配方法,該方法創(chuàng)新性地利用邊緣視差圖分割代價聚合路徑,避免了大懲罰項對視差邊緣的過度平滑。算法利用Canny 算法檢測圖像邊緣,并對邊緣點進(jìn)行DAISY 特征描述與匹配,得到具有視差信息的邊緣圖像;其次,依據(jù)邊緣對每個方向的代價聚合路徑進(jìn)行分段,并將邊緣視差值作為每一段代價聚合路徑的初值,如此反復(fù)直至聚合完成。文中利用立體基準(zhǔn)數(shù)據(jù)集和真實場景影像對算法的有效性進(jìn)行了驗證,證明了本文方法在視差不連續(xù)區(qū)域能取得比原始SGM 算法更好的視差圖,對非邊緣區(qū)域增加懲罰項P2也提高了算法在平滑區(qū)域的穩(wěn)定性。另外,本文采用DAISY描述符對邊緣點進(jìn)行描述,增加了算法的運行時間,描述符的選取與邊緣視差圖的優(yōu)化將是下一步的研究內(nèi)容。