【恆叨立碼】【理論恆叨】【立體匹配系列】經典SGM:(4)視差計算、視差優化

理論恆叨系列

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

【理論恆叨】【立體匹配系列】經典SGM:(4)視差計算、視差優化


視差計算


  在SGM算法中,視差計算採用贏家通喫(WTA)算法,每個像素選擇最小聚合代價值所對應的視差值作爲最終視差,視差計算的結果是和左影像相同尺寸的視差圖,存儲每個像素的視差值,在影像內外參數已知的情況下,視差圖可以轉換爲深度圖,表示每個像素在空間中的位置,圖1爲雙目立體像對的真實視差圖示意圖。

圖1 雙目立體像對及左影像真實視差圖示意圖

  如圖2所示,某個像素的所有視差下的代價值中,選擇最小代價值所對應的視差作爲最優視差。這一步非常簡單,這意味着聚合代價矩陣S的值必須能夠準確的反映像素之間的相關性,也表明上一步代價聚合步驟是立體匹配中極爲關鍵的步驟,直接決定了算法的準確性。

圖2 贏家通喫算法示意圖

視差優化


  視差優化的目的是爲了對通過視差計算得到的視差圖進行進一步的優化處理,剔除錯誤視差,提高視差精度,使視差值更可靠、更精確。

剔除錯誤匹配

  錯誤匹配直觀的反應是聚合後某些像素在真實視差位置的代價值並非最小值,有很多因素能夠造成這一現象的產生,如影像噪聲、遮擋、弱紋理或重複紋理,以及算法的侷限性。實際上目前還沒有哪個算法能夠完美的處理以上所有問題,所以錯誤匹配的剔除對所有算法都是有必要的。目前最常用的錯誤匹配剔除方法是左右一致性法(L-R Check),它基於視差的唯一性約束,即每個像素最多隻存在一個正確視差。具體步驟是將左右影像互換位置,即左影像成爲右影像,右影像成爲左影像,再做一次立體匹配,得到另一張視差圖,因爲視差圖中每個值所反映的是兩個像素之間的對應關係,所以依據視差的唯一性約束,通過左影像的視差圖,找到每個像素在右影像的同名點像素及該像素對應的視差值,這兩個視差值之間的差值若小於一定閾值(一般爲1個像素),則滿足唯一性約束被保留,反之則不滿足唯一性約束而被剔除。一致性檢查的公式如式1所示:

式1 LR-Check

圖3 一致性檢查示意圖

  除一致性檢查之外,剔除小連連通區(Remove Peaks)、唯一性檢測(Uniqueness Check)也是常用的剔除錯誤視差的方法,可以結合使用。

  剔除小連連通區(Remove Peaks)是指剔除掉視差圖中連通的極小塊區域,同一個連通區內的視差與鄰域視差之差小於設定閾值(一般爲1)。

  唯一性檢測(Uniqueness Check)是指對每個像素計算最小代價和次最小代價的值,若兩者相對差小於一定閾值,則被剔除。

if ((SecMin-Min)/Min < T) {
	disparity = invalid;
}

提高視差精度

  提高視差精度採用子像素優化技術,因爲視差計算得到的視差圖是整像素精度,在很多應用中都無法滿足精度要求,SGM採用二次曲線內插的方法獲得子像素精度,對最優視差的代價值以及前後兩個視差的代價值進行二次曲線擬合,曲線的極值點所對應的視差值即爲新的子像素視差值,如圖4所示。

圖4 二次曲線擬合計算子像素視差

抑制噪聲

  爲了抑制噪聲,小窗口(通常爲3x3)的中值濾波(Median Filter)是常用的算法。雙邊濾波(Bilateral Filter)也比較常用,能夠較好的保持邊緣精度,效率較中值濾波低。

碼上教學系列

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

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

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