1. 程式人生 > >雙目立體匹配經典演算法之Semi-Global Matching(SGM)概述:代價聚合(Cost Aggregation)

雙目立體匹配經典演算法之Semi-Global Matching(SGM)概述:代價聚合(Cost Aggregation)

  由於代價計算步驟只考慮了局部的相關性,對噪聲非常敏感,無法直接用來計算最優視差,所以SGM演算法通過代價聚合步驟,使聚合後的代價值能夠更準確的反應畫素之間的相關性,如圖1所示。聚合後的新的代價值儲存在與匹配代價空間C同樣大小的聚合代價空間S中,且元素位置一一對應。

圖1:代價聚合前後視差圖示意圖

  為了獲得較好的匹配效果,SGM演算法依舊採用全域性立體匹配演算法的思路,即全域性能量最優化策略,簡單來說就是尋找每個畫素的最優視差使得整張影像的全域性能量函式最小。全域性能量函式的定義如公式1所示:

式1 全域性能量函式的定義式

其中,Edata為資料項,是反應視差圖對應的總體匹配代價的測度;Esmooth是平滑項,為了讓視差圖滿足某些條件假設的約束,如場景表面的連續性假設,平滑項會對相鄰畫素視差變化超過一定畫素的情況進行懲罰(對應的能量函式具有較大的值),而影象邊緣處畫素例外,因為邊緣畫素被認為確實是視差非連續區域的概率較大。圖2為視差連續區域與非連續區域示意圖。

圖2 視差連續區域與非連續區域示意圖

  由於能量函式是二維函式,所以能量函式最小化是一個二維最優問題,這是一個NP完全問題,有很多近似的較為高效的能量最優策略如圖割、置信度傳播、合作優化等演算法被用來解決這個問題,但是效率上依舊需要進一步改進。為了更高效的解決這個二維最優化問題,SGM演算法採用基於類似於掃描線的方法,使用一維路徑聚合的方式來近似二維最優,相比其他解決方法效率更高,效果相當。

  首先,SGM提出的更具體化的能量函式如公式2所示:

式2 SGM能量函式表示式

其中,C為匹配代價,公式的第一項是資料項,表示當視差圖為D時,所有畫素的匹配代價的累加,第二項和第三項是平滑項,表示對畫素p的Np鄰域內的所有畫素q進行懲罰,其中第二項懲罰力度較小(P1

較小),對相鄰畫素視差變化很小的情況(1個畫素)進行懲罰;第二項懲罰力度較大(P2> P1),對相鄰畫素視差變化很大(大於1個畫素)的情況進行懲罰。較小的懲罰項可以讓演算法能夠適應視差變化小的情形,如傾斜的平面或者連續的曲面,較大的懲罰項可以讓演算法正確處理視差非連續情況,由於影像灰度邊緣處視差非連續的可能性較大,為了保護真實場景中的視差非連續情況,P2往往是根據相鄰畫素的灰度差來動態調整,如公式3所示:

式3 P2的調整式

P2為P2的初始值。

  實際上,式2中的能量函式最優化問題依舊是一個NP完全問題,為高效的解決它,SGM提出一種路徑代價聚合的思路,即將畫素所有視差下的匹配代價進行畫素周圍所有路徑上的一維聚合得到路徑下的路徑代價值,然後將所有路徑代價值相加得到該畫素聚合後的匹配代價值。畫素p沿著某條路徑r的路徑代價計算方法如式4所示:

式4 畫素p沿著某條路徑r的路徑代價計算公式

其中,第一項為匹配代價值C,屬於資料項;第二項是平滑項,表示的是和式2相同的含義,累加到路徑代價上的值取不做懲罰、做P1懲罰和做P2懲罰三種情況中代價最小的值;第三項是為了保證新的路徑代價值Lr不超過一定數值上限,即

式5

  畫素的總路徑代價值S則通過公式6計算,

式6 總路徑代價值S計算公式

  路徑聚合的示意圖如圖3所示:

圖3 路徑聚合示意圖

  從圖3中可以看到,根據路徑數不同,聚合的方向也有所不同,一般來說,有4路徑(紅色箭頭方向)、8路徑(紅色+黑色箭頭方向)和16路徑(白色箭頭方向)三種聚合方式,路徑數越多效果越好,但是耗時也會越長,往往需要平衡利弊,根據應用的實際要求來選擇合適的路徑數。

  從公式5及6以及路徑數不超過16可以很容易推匯出S≤16(Cmax+P2),這個不等式很重要,它表明選擇合適的P2值可以將聚合代價值S控制在一定數值範圍內,減少聚合代價陣列對記憶體的佔用。如採用基於5×5視窗的Census變換的方法計算得到的匹配代價值C最高不超過25(因為Census變換後的位元串最大有效長度為25),則匹配代價只需用一個位元組來儲存,而當P2 ≤ 65535/16-25 時,S可以只用兩個位元組來儲存,因為儲存代價的C和S空間大小是W×H×D,當影像尺寸較大時,對記憶體的佔用是巨大的,所以減少元素儲存所需要的位元組數是必要的。

圖4 SGM聚合步驟示意圖(視差圖呈現,點選看大圖)