SVO深度解析(三)之深度濾波(建圖部分)


轉載請說明出處ide

http://blog.csdn.net/zhubaohua_bupt/article/details/74911000函數


3.1深度濾波簡介

SVO在建圖部分採用的是深度濾波器,論文中並無詳細的介紹。深度濾波在SVO做者寫的另外一篇叫REMODE[1]的文章裏,介紹了深度濾波的每個步驟。REMODE[1]這篇文章講的是利用svo提供的位姿,進行三維重建,屬於漸進式三維重建。其過程和SVO深度濾波同樣,只不過在REMODE裏,實現用GPU進行了加速處理。優化


SVO深度濾波是利用一系列先後,完成對指定幀上像素深度的求取。用一些列幀,來求取指定幀上每一個像素深度的緣由是,在計算像素點深度時,單次匹配恢復的深度有偏差,須要依靠屢次深度測量值的融合,來恢復偏差較小的深度值。SVO把像素的深度偏差模型看作機率分佈,有兩個屬性,一個是深度值服從高斯分佈,另外一個是局外點的機率服從Beta分佈,同時融合這兩種屬性。spa


SVO深度濾波對深度進行漸進式融合(動態融合)。其過程可表述以下:.net

關鍵幀上選取像素點(SVO是fast角點,REMODE是梯度點),做爲種子(seed,種子就是深度未收斂的像素點),每來一幀圖像,融合更新一下以前提取的種子,直至種子的深度收斂,這是個動態過程,相似於濾波,大概這就是叫深度濾波的緣由吧。若是新的一幀是關鍵幀,那麼再次提取新的像素點做爲種子。blog

就這樣舊的種子不斷收斂,新的種子不斷增長,不斷進行下去。ip

 

下面來探討一下深度濾波的整個過程。pip


3.2 深度濾波分步驟詳細介紹


對於一個種子,其每一次深度濾波(也叫深度融合,利用新的一幀來更新種子的深度值),都行須要經如下過程。io




3.2.1 計算極線


關於極線的基本知識,本文不作介紹。對於每一個種子,在當前幀計算極線的條件是:ast

<1>已知種子所在幀與當前幀的相對位姿

<2>已知種子的初始深度


條件<1>的做用是用來作匹配,由VO提供。

條件<2>的做用是縮小找匹配的搜索量。當種子新提取時,這個時候尚未深度值,用場景平均深度初始。


本文用z表示種子的深度,sigma2表示深度方差,sigma表示深度標準差。

極線的計算方法以下:


step1:

   在深度延長線上,構造兩個三維點P1,P2,這兩個三維點來源同一個像素,惟一的不一樣就是深度,

分別爲 P1(x,y,z- n*sigma),P2(x,y,z+ n*sigma),這裏n能夠調節,通常選擇n=1,2,3(3sigma原則)。


Step2:

將P1,P2利用幀間位姿,投影至當前幀,投影點爲u1,u2,鏈接u1,u2就是咱們所要計算的極線。

SVO工程裏,實如今Matcher.cpp裏的findEpipolarMatchDirect()函數裏。


 

REMODE工程裏,實如今epipolar.cpp seedEpipolarMatchKernel()函數裏。



 

3.2.2 計算仿射矩陣


爲何要計算仿射矩陣?

咱們知道,同一張圖像在通過旋轉平移後,同一個場景在圖像上的成像位置就發生了變換。

在像素作匹配時,咱們須要用像素周圍的信息(通常是矩形窗口)來描述本像素的特徵。

設想一下,若是幀間圖像發生了旋轉,咱們還用一樣的窗口(當前幀的窗口座標和種子所在幀窗口座標同樣)

來描述搜索點,是否是不太合適?

 



如上圖,描述p的窗口w1在後幀上投影點爲p’,咱們在匹配p和p’時,是用藍色窗口來描述p’呢,仍是用紅色窗口

答案確定是紅色窗口,那既然是紅窗口,紅色窗口怎麼計算呢?


這就會用到仿射矩陣,SVO仿射矩陣是這樣的計算的。

計算窗口的思路是先利用三點法計算出tk和tn兩時刻圖像的仿射變換矩陣,

而後再把窗口w1裏的像素座標逐一映射到圖像tn裏,這樣映射的全部座標就組成了窗口w2。

實現代碼

 


3.2.3 搜索匹配


跟蹤部分的匹配,是靠特徵對齊完成的,不須要極線搜索,這是由於在深度和位姿都比較準確的狀況下,

用特徵對齊能夠完成匹配。


可是,深度估計卻不能這樣幹,它須要極線搜索,由於深度未知或者深度不肯定性太大。

SVO選用ZMSSD,經過8*8矩形patch來描述像素,用於計算種子和當前幀搜索點的類似性。

實際上,在svo搜索匹配過程當中,當計算的極線小於兩個像素時,直接採用圖像對齊,

由於這個時候深度不肯定較小(能夠經過極線的計算方式想一下爲何)。

不然,沿極線以一個像素爲步進單位搜索匹配。代碼在findEpipolarMatchDirect()裏,



3.2.4三角測量恢復深度以及匹配不肯定性的計算


通過搜索匹配後,可以獲得種子p以及種子p在當前幀上的匹配像素點p’,

經過三角測量,就能夠恢復種字p的深度。

原理能夠參考 http://blog.csdn.net/zhubaohua_bupt/article/details/74926111

實現部分:

 


屢次三角測量的深度是爲了,融合獲得種子較準確的深。那麼既然有融合,不一樣測量值確定有不一樣權重。

不肯定性就是用來計算權重的。在SVO中,深度的不肯定被認爲是,

在匹配時,誤匹配一個像素所帶來的最大深度偏差。

 

其計算很簡單,能夠直接看論文。


3.2.5 深度融合


SVO的融合是不斷利用最新時刻深度的觀測值,來融合上一時刻深度最優值,直至深度收斂。以下圖

 

深度數據具體融合過程的過程以下,



3.2.6 平滑去噪


這一步在SVO裏沒有,在REMODE裏,做者加上這一步驟,對深度圖有不錯的去噪平滑效果,以下圖。


 


這個就不細說了,由於這一步驟自己與SVO無關,有興趣的話能夠看一下論文[1],做者經過構造一個能量函數,

而後迭代優化能量函數,當能量函數最小時,就完成平滑去噪。


 至此,咱們探討了SVO整個深度濾波。


REMODE論文:

[1] MatiaPizzoli,Christian Forster, and Davide Scaramuzza. REMODE: Probabilistic,monocular densereconstruction in real time. In International Conference onRobotics andAutomation (ICRA), pages 2609–2616, Hong Kong,China, June 2014.



待續

相關文章
相關標籤/搜索