Stereo Matching文獻筆記之(七):《Spatial-Depth Super Resolution for Range Images》讀後感~

這篇博客主要介紹一下自己對立體匹配文獻《Spatial-Depth Super Resolution for Range Images》一文的理解,本文是楊慶雄的又一篇經典文章,發表於CVPR2007,引用次數頗高。再加上,當時在是《Stereo Matching Using Tree Filtering》看到的引用,十分好奇,所以拿來說說自己的分析,與大家分享。


1. 相關概念

我當時對“Range Image”的理解有誤,我以爲它指的是視頻的連續幀圖像,其實它的意思就是深度圖像,並且特指通過深度相機(例如,TOF相機)採集到的深度圖像。但是爲什麼要這麼設計名詞,我就不清楚了,這個單詞在立體匹配中出現的頻率並不是很高,作爲文章標題就更少了。”Spatial-Depth“一般翻譯成爲空間深度,這篇文章標題的另一種翻譯就是《對深度圖進行上採樣》,通過這個標題我們就會很清楚作者的意圖:給定一個低分辨率視差圖,通過本文提出的算法,將低分辨率視差圖上採樣成爲高分辨率視差圖。


這個標題說明,CVPR也看重具有工業應用的想法,正如CVPR2015發佈的google的一篇文章,關於手機的散焦處理的,還是一篇Oral,所以大家要是有什麼專利級別的點子,也可以寫成論文試一試。


至於爲什麼要將低分辨率深度圖上採樣爲高分辨率深度圖,原因其實很簡單,就是爲了一個速度,正如之前的博客分析的一樣,想得到高精度的視差圖依賴於複雜的全局算法,非常耗時,距離實時應用還有很大的距離,於是作者另闢蹊徑,直接通過對低分辨率深度圖上採樣,達到精度還不錯的高分辨率視差圖,這是一個具有開創性的想法。自戀的說一下,當時在做立體匹配的時候,我也冒出過這樣的想法,但是馬上就發現了這篇論文,汗!!!看來我們這種小菜鳥能想得到的,早就被各種大牛想到並實現了,所以做人還是低調點好。。。。


2. 算法思想

本文的算法思想可以用一句話概括:結合硬件採集的低分辨率視差圖以及高分辨率原圖,利用雙邊濾波對低分辨率視差圖進行上採樣,得到與原圖同等分辨率的視差圖。文章提供了一個很好的闡述算法思想的流程圖,如下所示:


1). 我們先對低分辨率視差圖進行上採樣,當然,這樣的視差圖一定很挫。

2). 我們再根據上採樣得到的大視差圖,計算代價體(cost volume),其實就是代價計算項(參考DoubleBP)。

3). 根據得到的cost volum,利用雙邊濾波對其進行處理,得到更好的cost volum。

4). 基於更好的cost volum,用WTA(牛逼哄哄的勝者爲王算法),得到視差圖。

5). 還沒完,對得到的視差圖進行亞像素求精。

6). 盡情的迭代,到爽爲止!!!

算法思想很簡單吧?但是爲什麼這麼做,卻是最重要的。以及耳熟的雙邊濾波究竟是何方神聖,這些真的得好好地說一說,請聽下節分解。


3. 算法核心

3.1 代價體

一般經過上採樣的視差圖,通過插值,在低紋理區域往往能夠得到相對精確的效果,但是物體邊緣就不是這樣了,往往十分模糊,如圖所示:



本文就是針對這種上採樣之後效果不佳的物體邊緣像素視差值進行迭代求精處理,首先,基於D0計算代價體:



這是一個截斷二次函數,作者之所以用二次函數的原因得好好說說,這個二次函數中的d是候選視差,D是當前得到的視差圖,意義就是二者差距越大,代價值就越大,言外之意就是每次迭代,通過WTA選擇的視差不會和當前視差差距太大(我只選最小的,那肯定是接近於當前視差的),只是小修,不是大修。


3.2 雙邊濾波

濾波算法中,目標點上的像素值通常是由其周圍的一個局部區域中的像素所決定,例如可以基於像素之間的灰度值或位置關係。圖像的濾波算法有很多種,高斯濾波,gabor濾波等等,每種都有自己的特點,例如最簡單的高斯濾波,其只考慮了圖像的空間位置信息,根據像素與中心像素的距離遠近,計算像素的權值,高斯濾波對圖像所有區域都“同等對待”,模糊了紋理的同時也模糊了邊緣。而雙邊濾波卻不是這樣,它不僅考慮到了像素之間的位置關係,還考慮到了像素之間的顏色差異,這樣就使得雙邊濾波是一種“邊緣保持(Edge-Preserving)”的濾波方法,僅對非邊緣區域進行較大程度的模糊,針對邊緣由於考慮到了像素之間的顏色的差異,和邊緣顏色相近的像素能夠得到較大的權值,和邊緣顏色不相似的像素只能夠獲得較小的權值,自然使得邊緣一側的像素權值較小,對邊緣的干擾作用也隨之減弱。濾波之後,邊緣的顏色還是之前的顏色,只有微微的模糊。


個人感覺,高斯濾波是要營造一種“蒙太奇”的效果,亦真亦幻;雙邊濾波就是美圖的效果,消除美女臉上的細小皺紋,年輕十歲。。



本文利用雙邊濾波對粗糙的代價體進行處理,目的也是將代價體弄得平滑一些,將野值代價體儘可能去除。然後就可以進一步根據平滑之後的代價體進行代價聚合,最後利用WTA求取視差值了。


下面是最重要的問題,爲什麼將雙邊濾波用在了代價體上?

回答:我們仔細想想看,代價聚合和圖像濾波其實是一樣的,代價聚合是什麼?根據目標像素周圍或全圖的像素計算得到的權值,對目標像素的代價值重新進行更新。這和圖像濾波是一樣的方法,具體說,和線性濾波是同樣的方法,雙邊濾波就是一種代表性的線性濾波,具有邊緣保持的特性,所以作者直接將同一視差d的各個像素的代價值視爲一幅代價圖,對這幅代價圖進行雙邊濾波處理,其實就是代價聚合,代價聚合能夠很好的保證代價值的真實性,這就是爲什麼雙邊濾波要用在代價體上的原因。


有朋友肯定也會想到,那雙邊濾波爲什麼不用在視差圖上?

回答:原因很簡單,這個時候沒有靠譜的視差圖可用,用了雙邊濾波效果肯定不好。


3.3 亞像素求精

但是本文的重點不是這裏,重點在求出視差值之後的“亞像素求精”,大部分的立體匹配算法都可以進行亞像素求精,至於爲什麼要進行亞像素求精?那是由於整數級別的視差值計算出來的深度值不會精確到哪裏去(用公式算算就知道了,如果基線距離過大),如果我們想求取精確的深度信息,那麼亞像素求精是最簡單有效的方法。本文采用的方法就是傳統的二次多項式插值,這裏很有意思。


因爲我們得到的視差值都是離散的,並且是整數,舉個例子,如果我們通過WTA得到一點的視差值是10,以及對應的代價值30,我們同時也可以得到視差9的代價值(假設是40),視差11的代價值(假設爲50),我們可以利用二次多項式函數(如下所示)來計算浮點型的視差值,


注意這裏面的參數有a,b,c共三個,所以我們要想求解這三個參數,就需要3個方程,根據上面的(,10, 30)、(9, 40)、(11, 50),我們就可以求解出這個多項式的最小值,這個最小值就是所謂的多項式差值,最小值的公式如下:


這就是亞像素求精的全部內容,這樣的方法可以應用在任何一種立體匹配算法上,非常通用,我認爲這一步是非常重要的,尤其在我們要基於視差圖進行進一步分析的時候,整形的數據往往誤差太大,果斷弄成浮點型的數據。文中稱爲離散和連續,一個意思。亞像素求精之後效果明顯,如圖所示,



注:在DoubleBP的改進算法SubpixDoubleBP中,在計算完每個像素點的亞像素之後,還要進行均值濾波,在9*9的窗口中


4. 結論

這篇文章被應用在了DoubleBP上,被稱爲SubpixDoubleBP,亮點是基於雙邊濾波對代價體進行處理,應用於視差圖上採樣,提出亞像素求精的概念及其方法,是一篇給力的好文!分析不對的地方,還請朋友們指正哈

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