Lucas-Kanade 算法原理以及應用,正向、反向、additive、Compositional光流法

先祭出一片神級總結性的文章:Lucas-Kanade 20 Years On: A Unifying Framework

Lucas-Kanade 算法原理以及應用

一 算法原理

1.1 目標函數

Lucas-Kanade Algorithm本質上是爲了最小化目標函數:

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

類似高斯牛頓法。其中xx爲圖像下標,可以是二維(對應圖像像素的座標),也可以是一維(此時爲圖像展成一維數組時對應的下標);pp爲目標狀態變量,WW爲仿射變化函數,具體範例如下:

2D平移:

W(x;p)=(x+p1y+p2),p=[p1p2]TW(x;p)=(x+p1y+p2),p=[p1p2]T

3D仿射變化

W(x;p)=(1+p1p2p31+p4p5p6)xy1W(x;p)=(1+p1p3p5p21+p4p6)(xy1)

其中
[p=(p1p2p3p4p5p6)T][p=(p1p2p3p4p5p6)T]

1.2 一階泰勒公式展開

對公式1進行一階泰勒公式展開可得

\[x[I(W(x;p))+IWpΔpT(x)]2\]       2\[∑x[I(W(x;p))+∇I∂W∂pΔp−T(x)]2\]       (2)

其中
[I=(IxIy)][∇I=(IxIy)]

II已經展開成一列n維向量,則I∇IIIW(x;p)W(x;p)的梯度;

1.3 最小化目標函數條件下的ΔpΔp

求公式2關於ΔpΔp的偏導數

2x[IWp]T[I(W(x;p))+IWpΔpT(x)]      32∑x[∇I∂W∂p]T[I(W(x;p))+∇I∂W∂pΔp−T(x)]      (3)

讓公式3等於0,則

Δp=H1x[IWp]T[T(x)I(W(x;p))]      4Δp=H−1∑x[∇I∂W∂p]T[T(x)−I(W(x;p))]      (4)

其中
H=x[IWp]T[IWp]H=∑x[∇I∂W∂p]T[∇I∂W∂p]

二 LK算在跟蹤的應用

這部分將LK算法應用到具體的目標跟蹤中,假設跟蹤目標用一個角度、尺度可變的矩形進行描述
將矩形框的位移、角度和尺度參數代入公式W(x;p)W(x;p)xxpp求得

2.1 平移、角度尺度版本

\[W(x;p)=(xScosθySsinθ+ΔxxSsinθ+yScosθ+Δy)\]\[W(x;p)=(xScos⁡θ−ySsin⁡θ+ΔxxSsin⁡θ+yScos⁡θ+Δy)\]

變換參數p=(Δx,Δy,θ,S)Tp=(Δx,Δy,θ,S)T,順時針方向爲正方向
則有以下推導

Wp=(1001xSsinθyScosθxScosθySsinθxcosθysinθxsinθ+ycosθ)∂W∂p=(10−xSsin⁡θ−yScos⁡θxcos⁡θ−ysin⁡θ01xScos⁡θ−ySsin⁡θxsin⁡θ+ycos⁡θ)

IWp=(IxIy)(1001xSsinθyScosθxScosθySsinθxcosθysinθxsinθ+ycosθ)∇I∂W∂p=(∂I∂x∂I∂y)(10−xSsin⁡θ−yScos⁡θxcos⁡θ−ysin⁡θ01xScos⁡θ−ySsin⁡θxsin⁡θ+ycos⁡θ)
=IxIy((xsinθ+ycosθ)Ix+(xcosθysinθ)Iy)S(xcosθysinθ)Ix+(xsinθ+ycosθ)Iy=∂I∂x∂I∂y(−(xsin⁡θ+ycos⁡θ)∂I∂x+(xcos⁡θ−ysin⁡θ)∂I∂y)S(xcos⁡θ−ysin⁡θ)∂I∂x+(xsin⁡θ+ycos⁡θ)∂I∂y

所以IW(x;0)p=(IxIyyIx+xIyxIx+yIy)∇I∂W(x;0)∂p=(∂I∂x∂I∂y−y∂I∂x+x∂I∂yx∂I∂x+y∂I∂y)

2.2 平移版本

[W(x;p)=(x+Δx y+Δy)][W(x;p)=(x+Δx y+Δy)],其中p=(Δx,Δy)Tp=(Δx,Δy)T則有:

Wp=(1001)∂W∂p=(1001)

\[IWp=(IxIy)(1001)=(IxIy)\]\[∇I∂W∂p=(∂I∂x∂I∂y)(1001)=(∂I∂x∂I∂y)\]

所以可得:[IW(x;0)p=(IxIy)][∇I∂W(x;0)∂p=(∂I∂x∂I∂y)]

2.3 平移、尺度版本

[W(x;p)=(Sx+Δx Sy+Δy)][W(x;p)=(Sx+Δx Sy+Δy)],其中[p=(Δx,Δy,S)T][p=(Δx,Δy,S)T],可得

\[IWp=(IxIy)(1001xy)=(IxIy)\]\[∇I∂W∂p=(∂I∂x∂I∂y)(10x01y)=(∂I∂x∂I∂y)\]

所以
\[IW(x;0)p=(IxIyxIx+yIy)\]\[∇I∂W(x;0)∂p=(∂I∂x∂I∂yx∂I∂x+y∂I∂y)\]

2.4 算法流程

  1. 根據ppWW截取圖像 II,並對II做歸一化;
  2. 生成模板的下標矩陣xxyy
  3. 計算模板的梯度I∇I
  4. 計算IW(x;0)p∇I∂W(x;0)∂p
  5. 計算H=x[IWp]T[IWp]H=∑x[∇I∂W∂p]T[∇I∂W∂p]
  6. 計算誤差[T(x)I(W(x;p))][T(x)−I(W(x;p))]
  7. 計算\[x[IWp]T[T(x)I(W(x;p))]\]\[∑x[∇I∂W∂p]T[T(x)−I(W(x;p))]\]
  8. 根據公式\[Δp=H1x[IWp]T[T(x)I(W(x;p))]\]\[Δp=H−1∑x[∇I∂W∂p]T[T(x)−I(W(x;p))]\],求出狀態參數的變化
  9. 更新目標狀態:\[p=p+Δp\]\[p=p+Δp\]
  10. 判斷結果是否收斂,若不收斂,則返回步驟1

三 小結

1、本文的方法本質上是通過梯度下降方法來尋找局部最優解,因此需要初始位置要在最優解的領域內。也就是說,前後兩幀目標狀態不發發生明顯變化的情況。
2、克服目標的大範圍運動,可以通過圖像金字塔的方法進行跟蹤
3、在opencv中,其LK光流算法是實現圖像子塊的位置跟蹤,子塊大小一般爲5*5.opencv的這個函數是結合圖像金字塔,實現對子塊的大範圍跟蹤。但這個函數不能直接得到子塊的尺度和角度變化。
4、opencv的LK目標跟蹤算法不能應用於光照突變的情況。但是如果目標函數的I和T如果是經過標準化的,相信能提高對光照變化的抗干擾能力

四 參考文獻:

  1. Lucas-Kanade 20 Years On: A Unifying Framework IJCV 2004
  2. 基於Lucas-kanade目標跟蹤算法(本文算法實現代碼)
  3. 基於光流法的目標跟蹤(代碼):使用opencv的稀疏光流法實現的跟蹤算法,是一個基於點跟蹤的目標跟蹤算法
  4. 基於前向後向光流的目標跟蹤(代碼)(Forward-Backward Error: Automatic Detection of Tracking Failures):基於光流法的目標跟蹤的改進算法

光流法的目標是完成圖像點的跟蹤, 因此這裏假設存在一個輸入圖像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))T(x)=I(W(x;p))

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

如果是一個仿射變換
W=[(1+p1)x+p3y+p5p2x+(1+p4)y+p6]=[1+p1p2p31+p4p5p6]xy1W=[(1+p1)x+p3y+p5p2x+(1+p4)y+p6]=[1+p1p3p5p21+p4p6][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。那是因爲原始的光流法算起來太慢,然後我們吧光流用在了運動估計上,因此可以根據運動模型降低光流法的計算量。

增量方式\更新方式forwardinverse
additiveFAIAIAIA
compositionalFCIAICIA

前向與後向的對比

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

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

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

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

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

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

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

x[T(W(x;0))I(W(x;p))+TWpΔp]2∑x[T(W(x;0))−I(W(x;p))+∇T∂W∂pΔp]2

而雅克比矩陣爲

Wp=[x,0,y,0,1,00,x,0,y,0,1]∂W∂p=[x,0,y,0,1,00,x,0,y,0,1]

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

Compositional 與 Additive對比

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

算法的目標

FAIA:

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

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

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

對於warp的要求

FAIA: W(x,p)W(x,p)對於pp可微.
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∑x[I(W(x;p+Δp))−T(x)]2

更新的方式爲
pp+Δpp←p+Δp

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

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

FCIA

目標函數爲

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

更新方式爲

W(x;p)W(x;p)W(x;Δp)W(x;p)←W(x;p)∘W(x;Δp)

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

ICIA

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

IAIA

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

x[I(W(x)+T(Wx)1WppT(x)]2∑x[I(W(x)+∇T(∂W∂x)−1∂W∂pp−T(x)]2

update
pp+Δpp←p+Δ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使用雅克比矩陣近似可以得到高斯牛頓.

Algorithmorder of the Taylor approximationsHessianwork better at
The Gauss-Newton Algorithmfirst order approximations to the Hessian
The Newton Algorithmsendond order  
Steepest Descent-indentity matrixfurhter away from lcoal local minima
The Levenberg-Marquardt Algorithmcombine diagonal and full Hessianerror 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


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