[双目视差] 立体匹配步骤详解
文章目錄
- 立體匹配步驟詳解
- Step1 匹配代價計算
- Step2 代價聚合
- Step3 視差計算
- Step4 視差優化
立體匹配步驟詳解
Step1 匹配代價計算
匹配代價計算的目的是衡量待匹配像素與候選像素之間的相關性。兩個像素無論是否為同名點,都可以通過匹配代價函數計算匹配代價,代價越小則說明相關性越大,是同名點的概率也越大。
每個像素在搜索同名點之前,往往會指定一個視差搜索范圍D(Dmin ~ Dmax),視差搜索時將范圍限定在D內,用一個大小為W×H×D(W為影像寬度,H為影像高度)的三維矩陣C來存儲每個像素在視差范圍內每個視差下的匹配代價值。矩陣C通常稱為DSI(Disparity Space Image)。
匹配代價計算的方法有很多,傳統的攝影測量中,使用灰度絕對值差(AD,Absolute Differences)1、灰度絕對值差之和(SAD,Sum of Absolute Differences)、歸一化相關系數(NCC,Normalized Cross-correlation)等方法來計算兩個像素的匹配代價;計算機視覺中,多使用互信息(MI,Mutual Information)法2 3、Census變換(CT,Census Transform)法4 5、Rank變換(RT, Rank Transform)法6 7、BT(Birchfield and Tomasi)法8 等作為匹配代價的計算方法。不同的代價計算算法都有各自的特點,對各類數據的表現也不盡相同,選擇合適的匹配代價計算函數是立體匹配中不可忽視的關鍵步驟。
圖1 DSI示意圖(C(x,y,d)代表像素(x,y)在視差為d時的匹配代價)
Step2 代價聚合
代價聚合的根本目的是讓代價值能夠準確的反映像素之間的相關性。上一步匹配代價的計算往往只會考慮局部信息,通過兩個像素鄰域內一定大小的窗口內的像素信息來計算代價值,這很容易受到影像噪聲的影響,而且當影像處于弱紋理或重復紋理區域,這個代價值極有可能無法準確的反映像素之間的相關性,直接表現就是真實同名點的代價值非最小。
而代價聚合則是建立鄰接像素之間的聯系,以一定的準則,如相鄰像素應該具有連續的視差值,來對代價矩陣進行優化,這種優化往往是全局的,每個像素在某個視差下的新代價值都會根據其相鄰像素在同一視差值或者附近視差值下的代價值來重新計算,得到新的DSI,用矩陣S來表示。
實際上代價聚合類似于一種視差傳播步驟,信噪比高的區域匹配效果好,初始代價能夠很好的反映相關性,可以更準確的得到最優視差值,通過代價聚合傳播至信噪比低、匹配效果不好的區域,最終使所有影像的代價值都能夠準確反映真實相關性。常用的代價聚合方法有掃描線法、動態規劃法、SGM算法中的路徑聚合法等。
圖1:代價聚合前后視差圖示意圖
Step3 視差計算
視差計算即通過代價聚合之后的代價矩陣S來確定每個像素的最優視差值,通常使用贏家通吃算法(WTA,Winner-Takes-All)來計算,如圖2所示,即某個像素的所有視差下的代價值中,選擇最小代價值所對應的視差作為最優視差。這一步非常簡單,這意味著聚合代價矩陣S的值必須能夠準確的反映像素之間的相關性,也表明上一步代價聚合步驟是立體匹配中極為關鍵的步驟,直接決定了算法的準確性。
圖2 贏家通吃(WTA)算法示意圖
Step4 視差優化
視差優化的目的是對上一步得到的視差圖進行進一步優化,改善視差圖的質量,包括剔除錯誤視差、適當平滑以及子像素精度優化等步驟,一般采用左右一致性檢查(Left-Right Check)算法剔除因為遮擋和噪聲而導致的錯誤視差;采用剔除小連通區域算法來剔除孤立異常點;采用中值濾波(Median Filter)、雙邊濾波(Bilateral Filter)等平滑算法對視差圖進行平滑;另外還有一些有效提高視差圖質量的方法如魯棒平面擬合(Robust Plane Fitting)、亮度一致性約束(Intensity Consistent)、局部一致性約束(Locally Consistent)等也常被使用。
剔除錯誤匹配
??錯誤匹配直觀的反應是聚合后某些像素在真實視差位置的代價值并非最小值,有很多因素能夠造成這一現象的產生,如影像噪聲、遮擋、弱紋理或重復紋理,以及算法的局限性。實際上目前還沒有哪個算法能夠完美的處理以上所有問題,所以錯誤匹配的剔除對所有算法都是有必要的。目前最常用的錯誤匹配剔除方法是左右一致性法(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則四個步驟都有。
總結
以上是生活随笔為你收集整理的[双目视差] 立体匹配步骤详解的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: android u盘盘符乱码,U盘里出现
- 下一篇: 目前业界几款主流的消息中间件对比