【恆叨立碼】【理論恆叨】【立體匹配系列】經典SGM:(3)代價聚合(Cost Aggregation)

理論恆叨系列

【恆叨立碼】【理論恆叨】【立體匹配系列】經典SGM:(1)匹配代價計算之互信息(MI))
【恆叨立碼】【理論恆叨】【立體匹配系列】經典SGM:(2)匹配代價計算之Census變換
【恆叨立碼】【理論恆叨】【立體匹配系列】經典SGM:(3)代價聚合(Cost Aggregation)
【恆叨立碼】【理論恆叨】【立體匹配系列】經典SGM:(4)視差計算、視差優化

【理論恆叨】【立體匹配系列】經典SGM:(3)代價聚合(Cost Aggregation)

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

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

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

式1 全局能量函數的定義式

其中,EdataE_{data}爲數據項,是反應視差圖對應的總體匹配代價的測度;EsmoothE_{smooth}是平滑項,爲了讓視差圖滿足某些條件假設的約束,如場景表面的連續性假設,平滑項會對相鄰像素視差變化超過一定像素的情況進行懲罰(懲罰一般就是加大能量值)。

解釋下視差連續與視差非連續,視差連續代表局部範圍內的像素的視差相差很小(1個像素內),是一個連續的變化趨勢;而非連續是指局部範圍內的像素視差相差很大(超過1個像素),是一個突變的變化趨勢。這個局部範圍往往是一個矩形的窗口(比如3x3、5x5)。由於視差和深度某種程度上其實是等價的(視差和深度的關係可以查看博客雙目立體匹配中的核線約束[極線約束]),所以視差連續性背後表達的是空間中目標表面離相機的距離的連續性,如果是目標是連續的表面在影像上成像,則成像範圍內視差也是連續的;而如果目標有前景和背景在影像上成像,則前景和背景的交界處,在局部窗口內會是一部分屬於前景一部分屬於背景,前景和背景離相機的距離就可能相差很大了,視差也會相差很大,即不連續。

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

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

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

式2 SGM能量函數表達式

其中,CC爲匹配代價,公式的第一項是數據項,表示當視差圖爲DD時,所有像素的匹配代價的累加,第二項和第三項是平滑項,表示對像素ppNpN_p鄰域內的所有像素qq進行懲罰,其中第二項懲罰力度較小(P1P_{1}較小),對相鄰像素視差變化很小的情況(1個像素)進行懲罰;第三項懲罰力度較大(P2>P1P_2> P_1),對相鄰像素視差變化很大(大於1個像素)的情況進行懲罰。較小的懲罰項可以讓算法能夠適應視差變化小的情形,如傾斜的平面或者連續的曲面,較大的懲罰項可以讓算法正確處理視差非連續情況,由於影像的亮度邊緣位置(也就是梯度較大的位置)是前景背景交界的可能性較大,這些位置的像素鄰域內往往不是視差連續的,相差較大,爲了保護真實場景中的視差非連續情況,P2P_2往往是根據相鄰像素的灰度差來動態調整,如公式3所示:

式3 P2的調整式

P2P_2'P2P_2的初始值,一般設置爲遠大於P1P_1的數。這個公式的含義是:如果像素和它的鄰域像素亮度差很大,那麼該像素很可能是位於視差非連續區域,則一定程度上允許其和鄰域像素的視差差值超過1個像素,對於超過1個像素的懲罰力度就適當減小一點。

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

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

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

式5

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

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

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

圖3 路徑聚合示意圖

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

從公式5及6以及路徑數不超過16可以很容易推導出S16(Cmax+P2)S≤16(C_{max}+P2),這個不等式很重要,它表明選擇合適的P2P_2值可以將聚合代價值SS控制在一定數值範圍內,減少聚合代價數組對內存的佔用。如採用基於5×5窗口的Census變換的方法計算得到的匹配代價值CC最高不超過25(因爲Census變換後的比特串最大有效長度爲25),則匹配代價只需用一個字節來存儲,而當P265535/1625P_2 ≤ 65535/16-25時,SS可以只用兩個字節來存儲,因爲存儲代價的CCSS空間大小是W×H×DW×H×D,當影像尺寸較大時,對內存的佔用是巨大的,所以減少元素存儲所需要的字節數是必要的。

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

碼上教學系列

【恆叨立碼】【碼上教學】【立體匹配系列】經典SGM:(1)框架與類設計
【恆叨立碼】【碼上教學】【立體匹配系列】經典SGM:(2)代價計算
【恆叨立碼】【碼上教學】【立體匹配系列】經典SGM:(3)代價聚合
【恆叨立碼】【碼上教學】【立體匹配系列】經典SGM:(4)代價聚合2
【恆叨立碼】【碼上教學】【立體匹配系列】經典SGM:(5)視差優化
【恆叨立碼】【碼上教學】【立體匹配系列】經典SGM:(6)視差填充
【恆叨立碼】【碼上教學】【立體匹配系列】經典SGM:(7)弱紋理優化

代碼已同步於Github開源項目:Github/GemiGlobalMatching

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章