作者:gnuhpc@gmail.com
簡介:在計算機視覺中,Lucas–Kanade光流算法是一種兩幀差分的光流估計算法。它由Bruce D. Lucas 和 Takeo Kanade提出。
光流的概念:(Optical flow or optic flow)
它是一種運動模式,這種運動模式指的是一個物體、表面、邊緣在一個視角下由一個觀察者(比如眼睛、攝像頭等)和背景之間形成的明顯移動。光流技術,如運動檢測和圖像分割,時間碰撞,運動補償編碼,三維立體視差,都是利用了這種邊緣或表面運動的技術。
二維圖像的移動相對於觀察者而言是三維物體移動的在圖像平面的投影。
有序的圖像可以估計出二維圖像的瞬時圖像速率或離散圖像轉移。
光流算法:
它評估了兩幅圖像的之間的變形,它的基本假設是體素和圖像像素守恆。它假設一個物體的顏色在前后兩幀沒有巨大而明顯的變化。基於這個思路,我們可以得到圖像約束方程。不同的光流算法解決了假定了不同附加條件的光流問題。
Lucas–Kanade算法:
這個算法是最常見,最流行的。它計算兩幀在時間t 到t + δt之間每個每個像素點位置的移動。 由於它是基於圖像信號的泰勒級數,這種方法稱為差分,這就是對於空間和時間坐標使用偏導數。
圖像約束方程可以寫為I (x ,y ,z ,t ) = I (x + δx ,y + δy ,z + δz ,t + δt )
I(x, y,z, t) 為在(x,y,z)位置的體素。
我們假設移動足夠的小,那么對圖像約束方程使用泰勒公式,我們可以得到:
H.O.T. 指更高階,在移動足夠小的情況下可以忽略。從這個方程中我們可以得到:
或者
我們得到:
V x ,V y ,V z 分別是I(x,y,z,t)的光流向量中x,y,z的組成。 ,
,
和
則是圖像在(x ,y ,z ,t )這一點向相應方向的差分 。
所以
I x V x + I y V y + I z V z = − I t。
寫做:
這個方程有三個未知量,尚不能被解決,這也就是所謂光流算法的光圈問題。那么要找到光流向量則需要另一套解決的方案。而Lucas-Kanade算法是一個非迭代的算法:
假設流(Vx,Vy,Vz)在一個大小為m*m*m(m>1)的小窗中是一個常數,那么從像素1...n , n = m 3 中可以得到下列一組方程:
三個未知數但是有多於三個的方程,這個方程組自然是個超定方程,也就是說方程組內有冗余,方程組可以表示為:
記作:
為了解決這個超定問題,我們采用最小二乘法:
or
得到:
其中的求和是從1到n。
這也就是說尋找光流可以通過在四維上圖像導數的分別累加得出。我們還需要一個權重函數W(i, j,k) , 來突出窗口中心點的坐標。高斯函數做這項工作是非常合適的,
這個算法的不足在於它不能產生一個密度很高的流向量,例如在運動的邊緣和黑大的同質區域中的微小移動方面流信息會很快的褪去。它的優點在於有噪聲存在的魯棒性還是可以的。
補充:opencv里實現的看上去蠻復雜,現在還不是太明白。其中LK經典算法也是迭代法,是由高斯迭代法解線性方程組進行迭代的。
參考文獻:Lucas B and Kanade T. An Iterative Image Registration Technique with an Application to Stereo Vision. Proc. Of 7th International Joint Conference on Artificial Intelligence (IJCAI), pp.674-679.是81年發表的。
opencv中實現的是84年發表的算法,
參考文獻:Bruce D. Lucas , "Generalized Image Matching by the Method of Differences," doctoral dissertation, tech. report , Robotics Institute, Carnegie Mellon University, July, 1984
這篇論文是收費的,一直都沒下到還。