先祭出一片神級總結性的文章:Lucas-Kanade 20 Years On: A Unifying Framework
Lucas-Kanade 算法原理以及應用
一 算法原理
1.1 目標函數
Lucas-Kanade Algorithm本質上是爲了最小化目標函數:
類似高斯牛頓法。其中xx爲圖像下標,可以是二維(對應圖像像素的座標),也可以是一維(此時爲圖像展成一維數組時對應的下標);pp爲目標狀態變量,WW爲仿射變化函數,具體範例如下:
2D平移:
3D仿射變化
其中
1.2 一階泰勒公式展開
對公式1進行一階泰勒公式展開可得
其中
設II已經展開成一列n維向量,則∇I∇I爲II在W(x;p)W(x;p)的梯度;
1.3 最小化目標函數條件下的ΔpΔp
求公式2關於ΔpΔp的偏導數
讓公式3等於0,則
其中
二 LK算在跟蹤的應用
這部分將LK算法應用到具體的目標跟蹤中,假設跟蹤目標用一個角度、尺度可變的矩形進行描述
將矩形框的位移、角度和尺度參數代入公式W(x;p)W(x;p)、xx和pp求得
2.1 平移、角度尺度版本
變換參數p=(Δx,Δy,θ,S)Tp=(Δx,Δy,θ,S)T,順時針方向爲正方向
則有以下推導
∇I∂W∂p=(∂I∂x∂I∂y)(1001−xSsinθ−yScosθxScosθ−ySsinθxcosθ−ysinθxsinθ+ycosθ)∇I∂W∂p=(∂I∂x∂I∂y)(10−xSsinθ−yScosθxcosθ−ysinθ01xScosθ−ySsinθxsinθ+ycosθ)
=∂I∂x∂I∂y(−(xsinθ+ycosθ)∂I∂x+(xcosθ−ysinθ)∂I∂y)S(xcosθ−ysinθ)∂I∂x+(xsinθ+ycosθ)∂I∂y=∂I∂x∂I∂y(−(xsinθ+ycosθ)∂I∂x+(xcosθ−ysinθ)∂I∂y)S(xcosθ−ysinθ)∂I∂x+(xsinθ+ycosθ)∂I∂y
所以∇I∂W(x;0)∂p=(∂I∂x∂I∂y−y∂I∂x+x∂I∂yx∂I∂x+y∂I∂y)∇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則有:
所以可得:[∇I∂W(x;0)∂p=(∂I∂x∂I∂y)][∇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],可得
所以
2.4 算法流程
- 根據pp按WW截取圖像 II,並對II做歸一化;
- 生成模板的下標矩陣xx,yy;
- 計算模板的梯度∇I∇I
- 計算∇I∂W(x;0)∂p∇I∂W(x;0)∂p
- 計算H=∑x[∇I∂W∂p]T[∇I∂W∂p]H=∑x[∇I∂W∂p]T[∇I∂W∂p]
- 計算誤差[T(x)−I(W(x;p))][T(x)−I(W(x;p))]
- 計算\[∑x[∇I∂W∂p]T[T(x)−I(W(x;p))]\]\[∑x[∇I∂W∂p]T[T(x)−I(W(x;p))]\]
- 根據公式\[Δp=H−1∑x[∇I∂W∂p]T[T(x)−I(W(x;p))]\]\[Δp=H−1∑x[∇I∂W∂p]T[T(x)−I(W(x;p))]\],求出狀態參數的變化
- 更新目標狀態:\[p=p+Δp\]\[p=p+Δp\]
- 判斷結果是否收斂,若不收斂,則返回步驟1
三 小結
1、本文的方法本質上是通過梯度下降方法來尋找局部最優解,因此需要初始位置要在最優解的領域內。也就是說,前後兩幀目標狀態不發發生明顯變化的情況。
2、克服目標的大範圍運動,可以通過圖像金字塔的方法進行跟蹤
3、在opencv中,其LK光流算法是實現圖像子塊的位置跟蹤,子塊大小一般爲5*5.opencv的這個函數是結合圖像金字塔,實現對子塊的大範圍跟蹤。但這個函數不能直接得到子塊的尺度和角度變化。
4、opencv的LK目標跟蹤算法不能應用於光照突變的情況。但是如果目標函數的I和T如果是經過標準化的,相信能提高對光照變化的抗干擾能力
四 參考文獻:
- Lucas-Kanade 20 Years On: A Unifying Framework IJCV 2004
- 基於Lucas-kanade目標跟蹤算法(本文算法實現代碼)
- 基於光流法的目標跟蹤(代碼):使用opencv的稀疏光流法實現的跟蹤算法,是一個基於點跟蹤的目標跟蹤算法
- 基於前向後向光流的目標跟蹤(代碼)(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 光流法簡介
直接法使用光度值不變約束,可以表示爲
II表示被匹配的圖像,TT表示模板圖像。WW表示關於xx和pp的一個函數。如果該函數建模一個平移,那麼
如果是一個仿射變換
這裏有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是固定的.
前向方法和後向方法在目標函數上不太一樣,一個是把運動向量pp都是跟着I(被匹配圖像),但是前向方法中的迭代的微小量ΔpΔp使用I計算的,後巷方法中的ΔpΔp使用T計算的。因此計算雅克比矩陣的時候,一個的微分在ΔpΔp處,而另外一個在0處。所以如果使用雅克比矩陣計算Hessian矩陣,後者計算的結果是固定的。
舉例:
FAIA的目標函數(前向方法)
ICIA的目標函數(後向方法)
如果使用一階泰勒展開FAIA(前向方法)的目標函數變爲
ICIA(後向方法)的泰勒展開爲
而雅克比矩陣爲
只和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:
FCIA:
ICIA以及,IAIA:
對於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
目標函數爲
更新的方式爲
步進的計算方法爲
算法每個步驟中的時間複雜度
僞代碼
FCIA
目標函數爲
更新方式爲
步進的計算
ICIA
爲了避免花費很多時間來計算hessian矩陣,如果該矩陣是恆定的,那麼只需要計算一次.然後事實上Hessian矩陣是關於pp的函數,很多研究給出了該矩陣的近似計算方法,然而很難估計近似的效果,有的時候近似不是很完善.提出該方法的出發點是交換圖像和模板,
文章給出了前向和反向的方法是等效的,並給出了證明.
對比IAIA發現ICIA的迭代中不需要對圖像梯度進行wrap, 另外計算Hessian中同樣如此.
IAIA
仍然是交換I和T. 這樣可以避免每個迭代中計算梯度圖像.
update
實際上這種方法能夠使用的運動很少, 對於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 |
結論
- Gauss-Newton 和 Levenberg-Marquardt的收斂性能類似, 但跟另外2種方法稍好.
- Levenberg-Marquardt實現的效率和Gauss-Newton接近, 並且不好好於高斯牛頓.
算法的選擇
- 噪聲,如果圖像的噪聲比較大,那麼最好使用反向算法,反之使用前向方法.
- 關於效率的已經討論過了.
refer
- 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