【最終版本】SVO框架總結

SVO主要參考兩篇博客:

  1. 白巧克力的SVO論文解析
  2. SVO深度解析

SVO(Fast Semi-direct Monocular Visual Odometry)是一種半直接法的視覺里程計,主要有兩個部分,一個是跟蹤,一個是深度建圖。

SVO的跟蹤部分主要分爲3步:

1.sparse model-based image alignment

首先假設上一幀特徵點的深度已知,通過將k-1幀中的特徵點,反投影,再投影到當前第k幀中,通過最小化重投影光度誤差,利用高斯牛頓法優化得到T\, k,k-1

其中:

2. Relaxation Through Feature Alignment

 

由於通過上一步獲得的投影過來的方塊patch(4*4) 並不完全準確,所以將關鍵幀中的特徵patch,和上一步獲取的petch進行比較優化,優化當前幀的特徵位置,使其更加準確。其中要計算彷射變換A\, i(因爲3D點所在的keyframe可能離當前幀很遠)。這樣考慮到旋轉的因素,比較的更加科學。關鍵幀的選取規則:當前幀距離上一個關鍵幀的平移量超過場景深度的12%。

3.Pose and Structure Refinement

因爲第二步優化後的特徵位置與第一步預測到的特徵位置存在差異,所以需要重新構造優化函數。此時是將地圖中的3D點投影到當前幀,

1.先是隻優化當前幀相對於世界座標系的位姿(Motion-only BA)

2.之後再優化三維點的座標(x,y,z)(Structure-only BA),跟蹤過程就結束了。

SVO的建圖過程

1.深度濾波器簡介

SVO深度濾波是先在關鍵幀中創建一些seed點,之後用一系列幀,來求取指定幀上每個像素深度,原因是在計算像素點深度時,單次匹配恢復的深度有誤差,需要依靠多次深度測量值的融合,來恢復誤差較小的深度值。SVO把像素的深度誤差模型看做概率分佈,有兩個屬性,一個是深度值服從高斯分佈,另一個是局外點的概率服從Beta分佈,同時融合這兩種屬性。

SVO深度濾波對深度進行漸進式融合(動態融合)。其過程可表述如下:關鍵幀上選取像素點(SVO是fast角點,REMODE是梯度點),作爲種子(seed,種子就是深度未收斂的像素點),每來一幀圖像,融合更新一下之前提取的種子,直至種子的深度收斂,這是個動態過程,類似於濾波,大概這就是叫深度濾波的原因吧。如果新的一幀是關鍵幀,那麼再次提取新的像素點作爲種子。

2.詳細步驟:

2.1計算極線,首先初始深度爲當前場景的平均深度,當前幀的位姿通過跟蹤過程已知,所以可以計算出3D點在當前幀的極線。

2.2計算彷射矩陣,利用三點法計算兩時刻兩幀之間的彷射矩陣。目的是考慮到旋轉因素。

2.3極線搜索匹配:通過8*8的patch塊,兩個patch塊匹配的方式是ZMSSD(Zero mean Sum of Squared Differences ),類似於SSD( sum of squared difference),當極線小於兩個像素的時候,直接用"第二步"feature alignment對齊,因爲此時不確定度很小。在SVO中,深度的不確定被認爲是,在匹配時,誤匹配一個像素所帶來的最大深度誤差。

2.4深度融合的具體過程,和卡爾曼濾波有些像但不是,同樣都是新的觀測到來,更新\beta分佈的a,b兩個參數,更新權重c\, 1,c\, 2,根據權重和融合前深度和觀測深度獲得融合後的深度,同時更新融合後的深度的方差。最終如果融合後的方差小於一定閾值或者判斷點是局外點的話就停止。

 

 

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