lucas–kanade_Lucas-Kanade光流法 | 学步园
1. 光流的概念
?空間運動物體在觀察成像平面上的像素運動的瞬時速度
2. 光流法的原理
?利用圖像序列中像素在時間域上的變化以及相鄰幀之間的相關性來找到上一幀跟當前幀之間存在的對應關系,從而計算出相鄰幀之間物體的運動信息,即光流
光流的分類:稠密光流與稀疏光流(Lucus-Kanade
3. L-K光流
Lucas-Kanada最初于1981年提出,該算法假設在一個小的空間鄰域內運動矢量保持恒定,使用加權最小二乘法估計光流。由于該算法應用于輸入圖像的一組點上時比較方便,因此被廣泛應用于稀疏光流場。
4. 三個假設
假設一:場景中物體被跟蹤的部分亮度保持不變
假設二:運動相對于幀率是緩慢、連貫的數學表達指的是在上連續,可導
假設三:相鄰的點保持近鄰δ鄰域內所有像素點的速度(U,V)相等
由假設二,對假設一應用偏微分鏈式法則,則得到L-K算法核心的數學描述公式:
5. 圖像金字塔的引入L-K算法
對于大多數30Hz攝像機,大而不連貫的運動較多,所以LK光流法在實際中的跟蹤效果不好,通常一個大的窗口來捕獲大的運動,但往往違背運動連貫的假設,故引入圖像金字塔。
在圖像金字塔的最高層計算光流,用得到的運動估計結果作為下一層金字塔的起始點,重復這個過程直到到達金字塔的最底層。這樣將不滿足運動假設的可能性降到最小從而實現對更快和更長的運動的跟蹤。
6. 計算方法
在一個小的鄰域內,我們通過對下式的加權平方和最小化來估計V,
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.指更高階,在移動足夠小的情況下可以忽略。從這個方程中我們可以得到:或者我們得到:
Vx,Vy,Vz分別是I(x,y,z,t)的光流向量中x,y,z的組成。,
,
和則是圖像在(x,y,z,t)這一點向相應方向的差分。所以
IxVx+ IyVy + IzVz= ? It。
寫做:
這個方程有三個未知量,尚不能被解決,這也就是所謂光流算法的光圈問題。那么要找到光流向量則需要另一套解決的方案。而Lucas-Kanade算法是一個非迭代的算法:
假設流(Vx,Vy,Vz)在一個大小為m*m*m(m>1)的小窗中是一個常數,那么從像素1...n,
n = m3中可以得到下列一組方程:
三個未知數但是有多于三個的方程,這個方程組自然是個超定方程,也就是說方程組內有冗余,方程組可以表示為:
記作:
為了解決這個超定問題,我們采用最小二乘法:
or
得到:
其中的求和是從1到n。
這也就是說尋找光流可以通過在四維上圖像導數的分別累加得出。我們還需要一個權重函數W(i, j,k),來突出窗口中心點的坐標。高斯函數做這項工作是非常合適的,
這個算法的不足在于它不能產生一個密度很高的流向量,例如在運動的邊緣和黑大的同質區域中的微小移動方面流信息會很快的褪去。它的優點在于有噪聲存在的魯棒性還是可以的。
補充:opencv里實現的看上去蠻復雜,現在還不是太明白。其中LK經典算法也是迭代法,是由高斯迭代法解線性方程組進行迭代的。
參考文獻:Lucas B and Kanade T. An Iterative Image
RegistrationTechnique with an Application to Stereo Vision. Proc. Of 7th InternationalJoint Conference on Artificial Intelligence (IJCAI), pp.674-679.是81年發表的。
opencv中實現的是84年發表的算法,
參考文獻:Bruce
D. Lucas,"Generalized Image Matching by the Method of Differences," doctoraldissertation, tech. report , Robotics Institute, Carnegie Mellon University,July, 1984
這篇論文是收費的,一直都沒下到還。
總結
以上是生活随笔為你收集整理的lucas–kanade_Lucas-Kanade光流法 | 学步园的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Android 软件亮度调节
- 下一篇: 【Python+C#】手把手搭建基于Hu