雙目立體匹配經典演算法之Semi-Global Matching(SGM)概述:視差計算、視差優化
文章目錄
視差計算
在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)也比較常用,能夠較好的保持邊緣精度,效率較中值濾波低。