一枝獨秀不是春
專題系列
1. 雙目立體匹配經典算法之PatchMatchStereo概述:Slanted support windows傾斜支持窗模型
2. 雙目立體匹配經典算法之PatchMatchStereo概述:基於PatchMatch的視差估計
3. 雙目立體匹配經典算法之PatchMatchStereo概述:後處理(一致性檢查與視差填充)
PatchMatchStereo1是Michael Bleyer等在2011年發表於British Machine Vision Conference(BMVC)上的一篇雙目立體匹配算法文章,非常經典,傾斜支持窗的思路打破傳統固定窗口式局部匹配的思維桎梏,在Middlebury數據集上獲得非常好的匹配效果,一段時間內高居排行榜第一名。更難能可貴的是,它和SGM一樣數據泛化能力出色,對大部分數據都能取得不錯的結果,所以也被很多商業軟件所實現,是真正能夠產品化的算法。
本系列博主將爲大家介紹經典的PatchMatchStereo算法原理,希望能夠對同學們的立體匹配算法研究有所幫助。
本篇的內容是算法的核心模型:傾斜支持窗模型Slanted support windows。
文章目錄
傾斜支持窗Slanted support windows
在介紹傾斜支持窗(Slanted support windows)之前,非常有必要介紹下另一種窗模型:Fronto-parallel windows。
Fronto-parallel windows
Fronto-parallel windows是非常經典的窗口模型,它的含義是立體相機正前方與極線糾正後的像平面平行的窗口,同時也和糾正後每個相機的相機座標系Z軸垂直。該窗口的特性是:
- 窗口內的任意線段在左右圖像(核線像對)上的投影長度相等。
- 窗口內的所有空間點的深度一樣,由可知空間點在影像上的投影點視差也相同。
這兩個特性對矩形窗口匹配來說是非常友好的,使得左右圖像以某同名點對爲中心的窗口內的所有像素都能一一同名對應,窗口內所有像素存在相同的唯一視差,這樣如果紋理條件上佳,則不需要代價聚合,只通過相關係數法等局部相似度算法就能得到不錯的結果。
但問題在於,這樣的窗口太理想化了,你很難在實際應用中找到這樣的場景,更多情況是:場景內可能存在若干個Fronto-parallel windows,也可能一個也沒有。但慶幸的是,該窗口爲我們提供了很好的研究思路,很多算法都是基於此窗口模型而進一步優化,如SGM、AD-Census,它們基於Fronto-parallel windows計算初始代價值,然後經過代價聚合,對代價進行優化,得到很不錯的效果。
另一部分學者則開始另闢蹊徑,尋找其他更合理的窗口模型。而且他們做到了,2011年,基於Slanted support windows的PatchMatchStereo1立體匹配算法應運而生。
Slanted support windows
我們先來看一張圖:
圖中,綠色的線條表示表面的一維表示,紅色線段是窗口的一維表示,左邊是Fronto-parallel windows示意圖,可以看到P是符合Fronto-parallel windows假設的,局部表面是Fronto-parallel的,同一個視差值;而R和S不符合,表面都是傾斜,R是傾斜平面而S是傾斜曲面。右邊是Slanted support windows示意圖,我們可以觀察R和S窗口的變化,Fronto-parallel windows假設下的窗口是和視差維平行的,並不貼合表面走勢,而Slanted support windows是很好的貼合表面的。從圖中我們可以看出來,Slanted support windows應該是隨着表面的朝向而動態變化的,具體是如何變化,下面我會介紹。
另一個區別是,Fronto-parallel windows基於整像素視差,而Slanted support windows基於子像素視差。如Q點,局部表面的視差值不是整數值,如果是Fronto-parallel windows模型,只能匹配整像素視差(Fronto-parallel windows一般採用一元二次擬合來得到子像素精度),而Slanted support windows直接使用子像素位置的窗口,可以更好的貼合Q處的表面。
好了,大概對Slanted support windows有了個初步的印象,但大家估計還是一知半解,所以Slanted support windows模型到底具體是怎麼實現的?聽博主慢慢介紹。
Slanted support windows模型
上一節,我們猜想到PMS的Slanted support windows應該是隨着表面的朝向而動態變化的,而且圖中還可以看到Slanted support windows是一個平面窗口而並不是曲面窗口,PMS的出發點是爲所有像素點都找到一個屬於它的動態的視差平面,設像素點的視差爲,則的視差平面方程爲
式中, 、、爲視差平面的3個參數,、爲像素的座標值。如此又來視差估計問題轉換爲平面估計問題,立體匹配就是要找出每個像素的最優平面的參數,也就是對每個像素找出聚合代價最小的那個平面:
式中爲一個無邊界的平面集合,爲像素當視差平面爲時的聚合代價值,計算公式爲:
式中,是一個以爲中心的方形窗口,PMS也應用於時序立體,彼時將是一個3D窗口,第3維是連續視頻序列幀中的前後幀對應位置像素,這聽起來一下子就高端新穎上檔次了啊。
是自適應的權值,爲了解決edge-fattening問題,edge-fattening做立體匹配的同學一定遇到過:有視差非連續現象出現的邊緣位置總是會有一圈連續的錯誤匹配值,它不是離羣誤差,而是讓邊緣擴大了一圈,通過一致性檢查等手段都難以剔除。一個典型的例子是匹配張開的手掌,視差圖會讓手掌在根部粘連起來,如下圖右列就是典型的edge-fattening問題。
PMS計算的方法是計算和爲同一個平面的可能性,通過顏色的差異來判斷,公式如下:
式中,爲自定義參數爲像素和在RGB空間的L1-distance(就是)。相鄰像素顏色差異越大,爲同一平面的可能性越小,則越小,合理!
我們再來看最關鍵的。它是在衡量兩個像素的不相似性。假設左視圖像素的視差平面方程爲(,,),則它的視差值,在右視圖上對應的同名點,和的不相似性計算公式爲:
式中爲和的梯度之差的絕對值,該式的含義就是兩個像素的顏色相差越大、梯度相差越大,則不相似的程度越大,參數爲自定義參數,在顏色和梯度之間做一個平衡。注意到根據平面算出來的視差值是小數值,所以像素的位置不是整數而是小數,它的顏色值和梯度值通過線性內插得到。
參數和爲自定義截斷參數,爲了讓遮擋區的像素代價計算更魯棒,意思就是不能讓代價過大,保持在一個良好的局部範圍內。
以上,我們便了解如何計算像素在視差平面爲時的聚合代價,從而可以判定的孰好孰壞而做出最優的選擇(選擇代價最小的自不必說)。
自然不能在一個無邊界平面集裏用暴力窮舉法搜索最小值。如何搜索,是PMS另一個及其出彩且與衆不同的地方,同學們請聽下回分解。
哈哈,放一張圖吊下胃口: