一、簡介
現有立體匹配算法一般分爲局部算法和全局算法,在局部算法中一個最簡單的做法就是採用某種像素相似性度量,比如像素灰度差的絕對值AD,給定左圖中的一個點p,在右圖中的對應行上(假設輸入是已經校正好的圖像)搜索與其AD值最小的點q,那麼q就是p在右圖中對應的匹配點,p、q的水平座標差就是視差值。然而這種做法所得到的視差圖中會包含大量的噪聲,即錯誤的匹配對,原因可能是多方面的,如傳感器噪聲,左右相機的採集性能差異,圖像中存在大面積無紋理、弱紋理或重複紋理,左右相機接收的光照差異(室外環境)等。
更好的做法是不直接匹配單個像素,而是匹配像素點所在的區域,這個區域叫做支撐窗口(support window),支撐窗口的尺寸可以是固定的,也可以是自適應尺寸的。如下式所示,由於支撐窗口內的像素提供了更多的信息,因此可以有效降低匹配歧義。
然而使用支撐窗口的做法實際上隱性的遵從了一個假定,即窗口內的像素具有相同的視差。實際上這個假定在多數情況並不成立,比如:(1)窗口內的像素與中心像素位於不同的表面;(2)窗口所捕獲的是一個傾斜表面或曲面,即非平行表面(這個平行指的應該是與相機成像平面平行),如下圖所示,Q點實際上位於一個亞像素的視差平面上,R位於傾斜平面上,S位於一個弧形表面上:
大多數研究者主要關注的是(1)中的問題,爲了解決這種問題,一個比較有效的做法是對窗口內的像素採用自適應權重進行匹配,如下式所示,這樣的方法可以很好的避免edge fattening(邊緣平滑)問題:
權重計算所使用的方法可以是類似雙邊濾波的核函數:
也可以是基於測地線距離的核函數:
那麼如何解決(2)中的問題呢?我們知道空間中任意一點都可以認爲是在一個唯一的平面上,如下式所示,該平面的參數爲 :
當我們知道相機的基線距離和標定內參(, , ),那麼上面的方程就可以變換爲下式,其中 ∈ 爲視差空間的平面參數。
基於上面的想法,2011年Michael Bleyer 提出了一個比較新穎的立體匹配算法叫做PMS,該算法的思想是對每一個像素計算一個獨立的3D視差空間平面,如果該像素位於一個曲面上,那麼該平面代表曲面在該像素點處的切面,在這個基礎上,用於匹配的支撐窗口就是not fronto-parallel support window,簡稱slanted support window。於是問題的挑戰就轉移到了如何爲每一個像素點在所有可能的視差空間平面中挑選出最優的平面。
顯然視差平面的數量是無限多的,因此遍歷所有的視差平面是不可能的。作者指出解決這個問題的理想方法就是採用Patch Match的思想,Patch Match本身是一個高效求解近似最近鄰場(Nearest neighbor filed)的方法,主要包括初始化、空間傳播、隨機搜索三個步驟。除了採用Patch Match中的空間傳播外,作者還提出了視圖傳播和幀間傳播(用於連續的視頻幀)能夠更好的幫助算法收斂。如下圖所示,利用PMS不僅可以直接估計亞像素視差, 還能夠精確的重建傾斜表面,甚至能夠重建圓形的曲面(順便提一下layered stereo matching算法也是Michael Bleyer提出來的)。
二、算法
1.模型
算法的目標是計算每一個像素所在的視差平面,一旦得到了,該像素的視差就可以按照下式來計算,其中, 和是平面的參數,、是像素的座標和座標。
待求解的視差平面是在所有可能的平面中使得聚合匹配代價最小的那一個平面:
其中F表示所有視差平面的集合。由於集合內元素的數目是無限的,所以不可能像傳統的局部匹配算法那樣,可以檢查所有的平面來找到使得聚合代價最小的那一個(因爲傳統的局部算法是在一個有限的離散視差空間中進行搜索的)。像素在視差平面下的聚合代價是按照下式來計算的:
這裏表示中心位置在p處的矩形窗口。如果應用在視頻中,這裏的矩形窗口就由2D變成了3D,其中第三維代表前一幀或者後一幀。權重函數 採用了自適應權重,目的是爲了降低egde-fattenning問題:
式中是一個人爲指定的參數,表示像素和像素在RGB顏色空間中的距離。當然,你也可以使用其他的權重函數,只要它能提升效果就行。函數 用來度量待匹配像素對之間的相似性,這裏採用的方法是:
在上式中,是通過的視差計算出來的,所以值在一個連續的實數區間內,它的顏色和梯度可以通過近鄰像素進行線性插值得到。參數用於平衡顏色項和梯度項的比重。截斷參數和可以增強匹配代價在遮擋區域內的魯棒性。
2.基於patch match的視差推理
有了以上的鋪墊,現在最重要的問題就是如何通過最小化匹配代價來爲每一個像素找到一個最優的3D視差平面。這個問題可以通過patch match來解決:首先對所有像素的視差平面進行隨機初始化或根據某些先驗信息進行初始化,然後基於迭代傳播(空間傳播、視圖傳播、幀間傳播、平面細化)不斷地更新所有像素的平面參數。patch match的優點是隻要至少有一個像素的初始化視差平面位於或接近最優平面,就可以找到剩餘所有像素的最優平面。
2.1隨機初始化
patch match的第一步就是對左右視圖的視差平面進行隨機初始化,原則上是可以直接對平面的三個參數、、進行隨機賦值,但是這樣做無法保證在可允許的視差空間中進行均等的採樣。因此需要對像素設定一個視差搜索區間(注意這個區間是連續的),然後從該區間中隨機挑選一個視差值作爲該像素的初始視差,這樣就得到了視差空間中的一個點,有了點P,只要再得到一個單位法向量就能計算出平面參數:
如果想要使用fronto-parallel window,可以將法向量設定爲,如果想關閉亞像素估計,可以將限制在離散的整數範圍內取值。
2.2迭代
如下圖所示,迭代過程中,每一個像素將經歷4個階段:空間傳播、視圖傳播、幀間傳播、平面細化,一般先處理左圖,然後再處理右圖。在偶數次迭代中從左上到右下依次遍歷每一個像素,在奇數次迭代中,則順序相反。
2.2.1空間傳播(spatial propogation)
空間傳播的思想基礎是在位置上相鄰的像素一般具有相近的視差。設當前像素的視差平面爲,其鄰域像素的視差平面爲,若,則將像素的視差平面賦予像素:,在偶數次迭代中,爲的左側和上側的像素,在奇數次迭代中,爲的右側和下側的像素。
2.2.3視圖傳播(view propogation)
視圖傳播的思想基礎是左(右)圖中的像素點與右(左)圖中的對應匹配點應當具有相同的視差平面。設左(右)圖像素的視差平面爲,其在右(左)圖中的對應像素的視差平面爲,若,則將像素的視差平面賦予像素:。
2.2.3幀間傳播(temporal propogation)
幀間傳播主要用於視頻序列中,其思想基礎是當前幀的像素與其相鄰幀的像素的座標相同,那麼它們應當擁有相近的視差平面。很明顯這個假設在幀率較高的視頻中是成立的。設當前幀像素的視差平面爲,其前一幀或後一幀的像素的視差平面爲,若,則將像素的視差平面賦予像素:。
2.2.4平面細化(plane refinement)
平面細化的目的是通過更新像素的視差平面進一步降低匹配代價。由於平面可以由一個點和一個法向量表示,所以平面的更新可以通過點座標和法向量的更新來得到。設的最大允許變化量爲,的最大允許變化量爲,然後從中隨機選擇一項數值來計算 ,,從隨機選擇三項數值來計算法向量,式中用於將向量歸一化爲單位向量,這樣就得到了一個新的平面,若,則將視差平面賦予像素,即。
這一步需要經過多次迭代才能完成,初始時設定 ,,然後每次迭代完後,將 ,,直到迭代停止。假如像素當前的視差平面是完全錯誤的,初次迭代使用較大的搜索範圍就有可能將其轉移到正確平面附近,之後的迭代中不斷的縮小搜索範圍,使得視差平面在當前平面附近捕獲視差細節,能夠適用於弧形表面。
3.後處理
後處理部分首先對左右視差圖執行左右一致性檢驗,在小於設定閾值的情況下該視差點就會被設定爲無效點,然後進行填充。填充的方法是搜索無效點左側最近鄰和右側最近鄰的有效像素點,設它們的視差平面分別爲和,選擇其中視差較小的那一個平面賦給當前無效點。之所以選擇小的那一個是因爲無效點多爲遮擋區域的點,而遮擋區域往往處於背景之中。這樣的缺點就是容易導致視差圖中產生水平條紋,爲了減輕水平條紋,可以對視差做加權中值濾波,濾波核的參數與匹配階段所使用的參數相同。
4.爲全局算法構建數據項
全局算法對於遮擋區域和無紋理區域的處理要優於局部算法,所以本文提出的匹配代價還可以應用到全局算法當中,只不過此時將無法在使用連續的視差平面。下圖顯示了局部算法對於紋理匱乏的圖像匹配失敗,而全局算法卻很好的處理了這種情況。
三、代碼實現
由於該算法代碼量較大,所以這裏就不展示代碼了,大家可以去百度或谷歌自行查找代碼。
四、實驗
這裏選擇了MiddleBurry數據集中圖像進行實驗,效果如下圖,可以看到該算法生成的視差圖是稠密的,而且邊緣保持的非常好,整體視差精度較高。
五、總結
1.PMS算法不同於傳統的局部算法,它不是直接估計視差,而是估計視差平面,而且利用patch match思想在無限多的視差平面中來推理出最優視差平面。因此它的兩個最大的優點是:(1)能夠直接計算亞像素視差;(2)能夠處理傾斜表面和曲面,這是其他局部算法所不具備的。
2.PMS算法的性能比較有限,雖然在middleburry上表現的確驚豔,但是在處理室外場景時魯棒性不是特別好,特別是對於較高的圖像噪聲、大面積的弱紋理或重複紋理等(當然其他的算法也不能很好的處理),其效果一般弱於SGM和ELAS等算法。
3.PMS算法的速度比較慢,因爲它的所有處理流程都是順序性的,不能並行處理,目前已經有一些算法改進了PMS中的傳播方式使其能夠並行處理,並應用於GPU,這裏給出論文名稱《Massively Parallel Multiview Stereopsis by Surface Normal Diffusion》。
參考資料:
1.PatchMatch Stereo - Stereo Matching with Slanted Support Windows,Michael Bleyer, Christoph Rhemann, Carsten Rother.
2.Stereo Matching—State-of-the-Art and Research Challeng,Michael Bleyer, Christian Breiteneder.
3.Massively Parallel Multiview Stereopsis by Surface Normal Diffusion, Silvano Galliani, Katrin Lasinger, Konrad Schindler.