Stereo Matching文獻筆記之(一):《Cross-Scale Cost Aggregation for Stereo Matching》讀後感~

最近,在做立體匹配方向相關的研究,先去網上找最新鮮的論文,看到了這篇文獻(簡稱CSCA),來源於CVPR2014,令我驚奇的是,作者竟然提供了詳細的源代碼,配置運行了一下,效果還真不錯,速度也還可以,具有一定的實用價值,所以拿來和大家分享一下。


1. 立體匹配概念

立體匹配的意思是基於同一場景得到的多張二維圖,還原場景的三維信息,一般採用的圖像是雙目圖像,如下所示,第一幅圖和第二幅圖分別是雙目相機得到的左圖和右圖,第三幅圖就是視差圖,一看就知道,這就是場景三維圖像。

      左圖                                                              右圖                                                                 視差圖

目前,立體匹配領域,主要有兩個評測網站,一個是KITTI(http://www.cvlibs.net/datasets/kitti/eval_stereo_flow.php?benchmark=stereo),另一個是middlebury(http://vision.middlebury.edu/stereo/),兩個網站上的算法都交叉,但是又不完全一樣,相對來說,KITTI更好一點,對算法的性能評測更好,雖然時間測算的並不準確(CSCA竟然要140s,太離譜了)

下面說說立體匹配最基本的步驟:
1)代價計算。計算左圖一個像素和右圖一個像素之間的代價。
2)代價聚合。一般基於點之間的匹配很容易受噪聲的影響,往往真實匹配的像素的代價並不是最低。所以有必要在點的周圍建立一個window,讓像素塊和像素塊之間進行比較,這樣肯定靠譜些。代價聚合往往是局部算法或者半全局算法纔會使用,全局算法拋棄了window,採用基於全圖信息的方式建立能量函數。
3)深度賦值。這一步可以區分局部算法與全局算法,局部算法直接優化代價聚合模型。而全局算法,要建立一個能量函數,能量函數的數據項往往就是代價聚合公式,例如DoubleBP。輸出的是一個粗略的視差圖。
4)結果優化。對上一步得到的粗估計的視差圖進行精確計算,策略有很多,例如plane fitting,BP,動態規劃等。這裏不再熬述。

根據我的理解,可以看作爲一種全局算法框架,通過融合現有的局部算法,大幅的提高了算法效果。

2. 論文貢獻

文獻《Cross-Scale Cost Aggregation for Stereo Matching》有三大貢獻,第一,設計了一種一般化的代價聚合模型,可將現有算法作爲其特例。第二,考慮到了多尺度交互(multi-scaleinteraction),形式化爲正則化項,應用於代價聚合(costaggregation)。第三,提出一種框架,可以融合現有多種立體匹配算法。

本文一直強調利用了不同尺度圖像“間”的信息,不同於一般的立體匹配算法,只採用了同樣尺度下,圖像的“內”部結構信息,CSCA利用了多尺度信息,多尺度從何而來?其實說到底,就是簡單的對圖像進行高斯下采樣,得到的多幅成對圖像(一般是5副),就代表了多尺度信息。爲什麼作者會這麼提,作者也是從生物學的角度來啓發,他說人類就是這麼一個由粗到精的觀察習慣(coarse-to-line)。生物學好奇妙!

該文獻生成的稠密的視差圖,基本方法也是逐像素的(pixelwise),分別對每個像素計算視差值,並沒有採用慣用的圖像分割預處理手段,如此看來運算量還是比較可觀的。

3. 算法流程

算法流程圖如下所示:

其實,這篇文章的論述是很清晰的,上圖是我根據自己的理解,畫的一份算法流程圖,下面我根據這份流程圖,對文章脈絡進行說明,對關鍵的公式進行解釋。
1. 對左右兩幅圖像進行高斯下采樣,得到多尺度圖像。
2. 計算匹配代價,這個是基於當前像素點對的,通常代價計算這一步並不重要,主要方法有CEN,CG,GRD等幾種,論文中給出了GRD,公式如下所示:
 
這個公式同時考慮到了顏色信息與梯度信息,i就是左圖中的像素,il就是右圖中的對應像素。

3. 匹配代價計算完畢,下一步就是代價聚合了,這也是本文的第一個貢獻,文章建立了一個一般化的代價聚合模型,這個模型如下所示:



這個模型,神奇的地方在於,可以融合現有的多種代價聚合算法,比如the-state-of-art的NL,ST,BF,GF等,但是很遺憾,文章沒有給出明確的推導公式,用以說明爲什麼上述代價聚合算法可以作爲上述模型的特例,只有一大段的文字描述,缺乏有力的說服力。

解釋一下這個一般化模型,它的目的是求解當前像素i的最小匹配代價,l爲視差未知變量,j是像素i的鄰域內的其他像素,K(i,j)就是像素i,j的相似度,這個相似度可以基於空間信息,也可以基於梯度,顏色信息,不同的核函數,就可以等價於不同的代價聚合算法。從另外一個角度解釋一下,爲何要z-C(j,l)?我認爲這是基於兩點假設,一個是左圖右圖匹配的越好,那麼整體代價就越小。另一個是統一鄰域內的像素深度值往往差不多。

上述模型的求解很容易,直接對z求偏導即可,形式如下:


這裏,我嘗試給出一個一般性的簡單證明:

在DoubleBP中,所使用的代價函數叫做Birchfield and Tomasi’s pixel dissimilarity,基於它的代價聚合具體形式如下:

對比上面兩個公式,很容易看出Zi就是下面公式的分母,也就是權值的均值,剛好和文獻表述吻合,而C(j, l)就是d(Yl, Yr),代表的是代價計算函數,核函數的具體形式如下所示,代表的是支持窗口內當前優化像素與其他像素的相似度。


4. 本文的第二個貢獻,建立多尺度的代價聚合模型,我們注意上面介紹的模型的鄰域N是在原始圖像上的,並沒有考慮到多尺度信息。何爲多尺度?其實就是不同模糊程度的圖像,就好比一個人向你由遠到近的走過來,最開始,你肯定只能看到一個模糊的人影,到你面前你就連五官都能看的很清晰了!

多尺度代價聚合模型如下所示:


上面的公式,每一個變量都多了個s,s就代表不同尺度的變量,由於每一項都是一個正數,求解就直接簡化爲單獨對每一個尺度下的對應公式進行求解,如下所示:


5. 建立了多尺度代價模型之後還遠遠不夠,多尺度之間的關係呢?這個必須考慮到啊,於是本文最猛的一個創新點誕生了,作者通過添加正則化項的方式,考了到了多尺度之間的關係,牛逼啊!


我解釋一下這個正則化項,請看如下圖示:


正則化項的意義在於:保持不同尺度下的,同一像素的代價一致,如果正則化因子越大,說明同一像素不同尺度之間的一致性約束越強,這會加強對低紋理區域的視差估計(低紋理區域視差難以估計,需要加強約束纔行),但是副作用是使得其他區域的視差值估計不夠精確。不同尺度之間最小代價用減法來體現,L2範式正則化相比較於L1正則化而言,對變量的平滑性約束更加明顯,關於這點可以參考我之前的博客(http://blog.csdn.net/wsj998689aa/article/details/39547771)

求解方法也很簡單,直接對z求偏導即可,如下:


令偏導等於零,可以建立各個尺度下的線性關係,將各個尺度下的線性關係形式化爲矩陣方程形式,很容易得到如下解公式:


6. 得到最小代價公式後,下一步就是將每一個視差值代入上式,選擇最小的那個代價對應的視差值爲當前像素視差值,這竟然也被稱呼爲一個算法(winner-takes-all),並且幾乎每篇stereo matching文獻都要提,感覺瞎扯淡啊。

4. 實驗效果

實驗效果其實沒什麼好說的了,大家去看看論文裏面就知道了,我直說一點,該文獻雖然在middlebury上找不到,但是也的確和middlebury上的算法進行了比較,比如NL,ST,BF,GF等,我也很奇怪,爲何middlebury上沒有CSCA?



看得出來,算法的效果還是很明顯的,我在實際的雙目圖像上也測試過,效果的確很好。再來說說運行時間,在KITTI評測網站上,CSCA上給出的時間竟然有140s,而最快的算法運行時間只要0.2s!!!這也差距太大了吧,抱着懷疑的態度,我實驗了一下,結果發現,在“CEN+ST+WM”組合下,在640p的圖像上,運行時間需要6.9s,在320p的圖像上,運行時間爲2.1s,在160p上,需要0.43s。140s從何而來呢?從上面的表格中也可以看出,S+GF也只需要1.32s,KITTI採用的就是S+GF的組合方式。

5. 總結

1)CSCA是一個優秀的立體匹配算法,它的性價比,綜合來說是比較高的,並且CSCA只是一個框架,言外之意,我們可以根據框架的思想自己創建新的算法,說不定能夠獲取更好的性能。

2)  CSCA最可貴的是,提供了詳細的源代碼,在文獻中提示的地址就可以下載到,爲作者這種誠實的,敢於開源的精神點贊!

3)我認爲CSCA是一個多尺度的局部算法,還不應該歸類爲全局算法的類別,這種多尺度思想,我想在今後的工作中會有越來越多的研究人員繼續深入研究。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章