雙目立體匹配經典算法之PatchMatchStereo概述:後處理(一致性檢查與視差填充)

專題系列
1. 雙目立體匹配經典算法之PatchMatchStereo概述:Slanted support windows傾斜支持窗模型
2. 雙目立體匹配經典算法之PatchMatchStereo概述:基於PatchMatch的視差估計
3. 雙目立體匹配經典算法之PatchMatchStereo概述:後處理(一致性檢查與視差填充)

PatchMatchStereo1是Michael Bleyer等在2011年發表於British Machine Vision Conference(BMVC)上的一篇雙目立體匹配算法文章,非常經典,傾斜支持窗的思路打破傳統固定窗口式局部匹配的思維桎梏,在Middlebury數據集上獲得非常好的匹配效果,一段時間內高居排行榜第一名。更難能可貴的是,它和SGM一樣數據泛化能力出色,對大部分數據都能取得不錯的結果,所以也被很多商業軟件所實現,是真正能夠產品化的算法。

本系列博主將爲大家介紹經典的PatchMatchStereo(PMS)算法原理,希望能夠對同學們的立體匹配算法研究有所幫助。

上篇博客中,博主介紹了PMS的視差估計方法:基於PatchMatch的視差估計法。本篇則是介紹PMS的後處理部分,順便給PMS概述專題收尾。

PMS後處理

同大多數立體匹配算法一樣,PMS的後處理一是常規操作:一致性檢查和視差填充

一致性檢查

一致性檢查的介紹自不必細說,還不太瞭解的請查看博主的另外兩篇博客

1. 雙目立體匹配經典算法之Semi-Global Matching(SGM)概述:視差計算、視差優化

2. 手把手教你編寫SGM雙目立體匹配(基於C++,Github同步更新)(五)(視差優化)

有一點特別的是,上篇博客提到PMS有一個視圖傳播,即左右視圖同名點的視差平面的傳播,這意味着如果執行視圖傳播,則右視圖也需要和左視圖一樣執行一次隨機+N次傳播的步驟。我們執行右視圖計算時,需要注意右視圖的視差值依然等於左視圖的列號減去右視圖的列號,即d=xlxrd=x_l-x_r

所有迭代傳播完成後,計算左視圖像素點pp在右視圖上的同名點q=pdpq=p-d_p,判斷dpdq<=1|d_p-d_q|<=1是否成立,若不成立,則不滿足一致性約束,將pp點和qq點的視差都賦爲無效值。

視差填充

PMS的視差填充策略和SGM不一樣,想了解SGM的填充策略的請查看博主前面的博客:

手把手教你編寫SGM雙目立體匹配(基於C++,Github同步更新)(六)(視差填充)

PMS的策略是:
(1)搜索無效像素pp左右最近的有效像素。記錄它們的視差平面flf^lfrf^r
(2)將像素pp的座標代入flf^lfrf^r,計算出視差,選擇較小的那個視差作爲pp的視差值。選較小的含義是遮擋像素往往是出現在背景。(背景總是被前景遮擋,前景流氓做的大啊,挨近相機就是有優勢!)

以上兩個步驟可以爲像素pp填充一個視差值,但有個問題是這樣做會產生水平線條紋,這個不難理解,此方法沒考慮其他方向的視差,只考慮了水平方向的視差,肯定會有條紋效應(一般來說,只考慮單方向就會出現該單方向條紋,比如只考慮水平,就出現水平條紋)。

爲了緩解這個問題,作者想了個辦法,既然填充只考慮了單方向,那就再做個多方向濾波!

搞一個加權中值濾波!

中值濾波做圖像處理的再熟悉不過了(不認識的面壁去吧!),加權中值濾波不過就是給窗口內每個格子一個權值,權值計算公式依舊是它:

什麼,沒見過?博主勉爲其難在推銷一次自己前面的博客:

雙目立體匹配經典算法之PatchMatchStereo概述:Slanted support windows傾斜支持窗模型

γγ選擇和前面一樣的值,中值濾波的窗口和匹配時的窗口大小一樣。(如果是時序傳播,那這裏的窗口就是三維的)

實驗圖

首先我們看論文中最大的一張實驗圖:(右邊是實驗分析)

另外貼一下PMS加入時序傳播的視頻立體匹配實驗結果:(有趣的時序傳播,但好像很少見到實際應用的?)

系列完結!大家有不懂的,可以留言給我。要代碼的,我反正是沒有,哈哈!但我是有這個計劃的,看時間吧!


  1. Bleyer M , Rhemann C , Rother C . PatchMatch Stereo - Stereo Matching with Slanted Support Windows[C]// British Machine Vision Conference 2011. ↩︎

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