SLAM代碼(光流法)

光流法的目標是完成圖像點的跟蹤, 因此這裏假設存在一個輸入圖像I, 以及要跟蹤的點x, 存在另外一個圖像塊T, 我們的目標是完成圖像塊T到輸入圖像I的匹配.

文章針對Lucas-Canade光流法做了一個總結,
文章對lucas-canade (Forward Additive, FA)算法做了簡介, 引入了Compositional算法以及Inverse方法. 因此對應組合形成4種方法分別是Forward Additive(FA), Forward Compositional(FC)以及新提出的Inverse Compositional(IC)算法, Inverse Additive(IA)算法. 對這4種方法文章分別從算法的目標, 算法的推導, 算法對wrap矩陣的要求, 算法計算複雜度以及算法與其他方法的等效情況.

除了四種方法的原理, 文章還介紹了幾種優化方法如何實現上述光流的計算. 從高斯牛頓開始介紹, 文章介紹了牛頓法的原理以及對牛頓法的改進. 高斯牛頓法是對牛頓法的一種近似. 當牛頓法中的Hessian矩陣使用雅克比近似時, 牛頓法變爲高斯牛頓. 當Hessian矩陣使用c*I(對角爲c, 其他元素爲0)的矩陣, 牛頓法變爲梯度下降法.

Lucas-Kanade 光流法簡介

直接法使用光度值不變約束,可以表示爲

T(x)=I(W(x;p))

I 表示被匹配的圖像,T 表示模板圖像。W 表示關於xp 的一個函數。如果該函數建模一個平移,那麼
W=[x+p1y+p2]

如果是一個仿射變換
W=[(1+p1)x+p3y+p5p2x+(1+p4)y+p6]=[1+p1p2p31+p4p5p6]xy1

這裏有6個參數表示了一個仿射變換。
爲了讓上述問題可解。Lucas等引入FAIA(Forward Additional Image Alignment)方法使用單一的運動模型代替獨立像素位移差,其中運動模型的額參數依賴於運模型的建立。之後研究者在其上做了拓展分別是FCIA(Forward Composition Image Alignment),ICIA(Inverse Compositional Image Alignment)和IAIA(Inverse Additional Image Alignment)\cite{baker2004lucas}。其中ICIA使用於直接法SVO中塊匹配方法,
看到上面一堆名詞,有點暈了,可以看到他們都是圍繞Image Alignment來的,那麼爲什麼使用LK光流法呢,LK是這四個中的FAIA。那是因爲原始的光流法算起來太慢,然後我們吧光流用在了運動估計上,因此可以根據運動模型降低光流法的計算量。
增量方式\更新方式 forward inverse
additive FAIA IAIA
compositional FCIA ICIA

前向與後向的對比

前向方法對於輸入圖像進行參數化(包括仿射變換及放射增量). 後向方法則同時參數輸入圖像和模板圖像, 其中輸入圖像參數化仿射變換, 模板圖像參數參數化仿射增量. 因此後向方法的計算量顯著降低. 由於圖像灰度值和運動參數非線性, 整個優化過程爲非線性的.

參數化過程主要要計算: 圖像的梯度, 位置對運動參數導數, 運動參數增量. 前向方法中Hessian是運動參數的函數. 提高效率的主要思想是交換模板圖像和輸入圖像的角色.
後向方法在迭代中Hessian是固定的.

前向方法和後向方法在目標函數上不太一樣,一個是把運動向量p 都是跟着I(被匹配圖像),但是前向方法中的迭代的微小量Δp 使用I計算的,後巷方法中的Δp 使用T計算的。因此計算雅克比矩陣的時候,一個的微分在Δp 處,而另外一個在0處。所以如果使用雅克比矩陣計算Hessian矩陣,後者計算的結果是固定的。
舉例:
FAIA的目標函數(前向方法)

x[I(W(x;p+Δp))T(x)]2

ICIA的目標函數(後向方法)
x[T(x;Δp)I(W(x;p))]2

如果使用一階泰勒展開FAIA(前向方法)的目標函數變爲
x[I(W(x;p))+IWpΔpT(x)]2

ICIA(後向方法)的泰勒展開爲

x[T(W(x;0))I(W(x;p))+TWpΔp]2

而雅克比矩陣爲

Wp=[x,0,y,0,1,00,x,0,y,0,1]

只和xy有關,圖像I的梯度是要在W(x;p) 處計算的,後向方法中圖像T的梯度在W(x;0)Hessianp 。 後向方法中對模板圖像參數化, Hessian矩陣只需要計算一次. 因爲模板是在迭代過程中(優化p )的每一步固定的。因此會減小計算量。而對輸入圖像參數化, 由於輸入圖像的位置是運動的函數, 因此運動參數變化後, 梯度需要重新求解.

Compositional 與 Additive對比

通過增量的表示方式來區分方法. 迭代更新運動參數的時候,如果迭代的結果是在原始的值(6個運動參數)上增加一個微小量,那麼稱之爲Additive,如果在仿射矩陣上乘以一個矩陣(增量運動參數形成的增量仿射矩陣),這方法稱之爲Compositional。兩者理論上是等效的,而且計算量也差不多。

算法的目標

FAIA:

x[I(W(x;p+Δp))T(x)]2

FCIA:
x[I(W(W(x;Δp);p))T(x)]2

ICIA以及,IAIA:
x[T(W(x;Δp))I(W(x;p))]2

對於warp的要求

FAIA: W(x,p) 對於p 可微.
FCIA: warp集合包含identitywarp, warp集合包含在Composition操作上是閉的(semi-group), 其中包括Homograph, 3D rotation等.
ICIA: semi-group, 另外要求增量warp可逆, 其中包括Homograph, 3D rotation等, 但不包括piece wise affine.
IAIA: 適用於2D平移, 2D相似, 2D仿射等.

算法簡介

FAIA

目標函數爲

x[I(W(x;p+Δp))T(x)]2

更新的方式爲
pp+Δp

步進的計算方法爲
Δp=H1x[I(W)(x;p)T(x)]

算法每個步驟中的時間複雜度
這裏寫圖片描述
僞代碼
這裏寫圖片描述

FCIA

目標函數爲

x[I(W(W(x;Δp);p))T(x)]2

更新方式爲

W(x;p)W(x;p)W(x;Δp)

步進的計算
Δp=H1x[I(W)(x;p)T(x)]

ICIA

爲了避免花費很多時間來計算hessian矩陣,如果該矩陣是恆定的,那麼只需要計算一次.然後事實上Hessian矩陣是關於p 的函數,很多研究給出了該矩陣的近似計算方法,然而很難估計近似的效果,有的時候近似不是很完善.提出該方法的出發點是交換圖像和模板,
文章給出了前向和反向的方法是等效的,並給出了證明.
這裏寫圖片描述
對比IAIA發現ICIA的迭代中不需要對圖像梯度進行wrap, 另外計算Hessian中同樣如此.

IAIA

仍然是交換I和T. 這樣可以避免每個迭代中計算梯度圖像.

x[I(W(x)+T(Wx)1WppT(x)]2

update
pp+Δp

實際上這種方法能夠使用的運動很少, 對於warp的要求很高, 因此不常用. 文中之後給出了the Inverse Additive 和 Compositional Algorithms 方法在 Affine Warps中的等效性.

總結

  • 兩個前向方法的計算複雜度相似,後向方法幾乎相等.後向方法的速度遠比前向方法要快.
  • 前向additive可以用於任何變形(warp),
  • 反向compositional只能用於warps that form groups.
  • 反向additive 可以用於simple 2D linear warps such as translations and affine warps.
    如果不進考慮效率的話可以使用兩種前向方法.前向compositional的方法中Jacobian是常量,因此有一定的優勢.

如果效率很重要的話,那麼後向compositional方法是首選,推導很簡單,很容易確定.

雅克比矩陣和殘差計算的方式有關, 由於 compositional 計算誤差的方式會使得雅克比矩陣爲常數,通常採用compositional的形式

梯度下降方法的近似

文章介紹了4種方法分別是高斯牛頓, LM, 梯度下降和Hessian矩陣對角近似. 對這些方法文章分別進行了分step性能, iteration性能等的測試.

牛頓法中通過對Hessian使用雅克比矩陣近似可以得到高斯牛頓.

Algorithm order of the Taylor approximations Hessian work better at
The Gauss-Newton Algorithm first order approximations to the Hessian
The Newton Algorithm sendond order
Steepest Descent - indentity matrix furhter away from lcoal local minima
The Levenberg-Marquardt Algorithm combine diagonal and full Hessian error gets worse

結論

  1. Gauss-Newton 和 Levenberg-Marquardt的收斂性能類似, 但跟另外2種方法稍好.
  2. Levenberg-Marquardt實現的效率和Gauss-Newton接近, 並且不好好於高斯牛頓.

這裏寫圖片描述

算法的選擇

  • 噪聲,如果圖像的噪聲比較大,那麼最好使用反向算法,反之使用前向方法.
  • 關於效率的已經討論過了.

refer

  1. project mainpage https://www.ri.cmu.edu/research_project_detail.html?project_id=515&menu_id=261
    2.https://www.cs.cmu.edu/afs/cs/academic/class/15385-s12/www/lec_slides/Baker&Matthews.pdf
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章