光流法詳解之一(LK光流)
Lucas–Kanade光流算法是一種兩幀差分的光流估計算法。它由Bruce D. Lucas 和 Takeo Kanade提出 [1]。
LK光流法有三個假設條件:
1. 亮度恒定:一個像素點隨著時間的變化,其亮度值(像素灰度值)是恒定不變的。這是光流法的基本設定。所有光流法都必須滿足。
2. 小運動: 時間的變化不會引起位置的劇烈變化。這樣才能利用相鄰幀之間的位置變化引起的灰度值變化,去求取灰度對位置的偏導數。所有光流法必須滿足。
3. 空間一致:即前一幀中相鄰像素點在後一幀中也是相鄰的。這是LK光流法獨有的假定。因為為了求取x,y方向的速度,需要建立多個方程聯立求解。而空間一致假設就可以利用鄰域n個像素點來建立n個方程。
LK光流算法原理的數學推導:
假設前一幀時間為t, 後一幀時間為t+δt。則前一幀I的像素點I(x, y, z, t)在後一幀中的位置為I(x+δx, y+δy, z+δz, t+δt )。
① 根據亮度恒定假設:
② 根據小運動假設, 將上式右側用泰勒級數展開:
H.O.T是泰勒級數展開式的高階項,小運動情況下可以 忽略為0.
③ 根據上面兩個公式可以得到:
或者下面的公式:
而對於二維圖像而言,只需要考慮x, y, t即可,其中Ix,Iy It分別為圖像在(x, y, t)方向的差分,寫為如下形式:
④ 現在有兩個未知數,只有一個方程。因此用到第三個假設:即空間一致性假設,LK算法是利用3x3窗口內的9個像素點建立9個方程。簡寫為下面的形式:
寫成矩陣形式:
當然兩個未知數,9個方程,這是一個超定問題,采用最小二乘法解決:
寫成如下形式:
根據上式通過累加鄰域像素點在三個維度的偏導數並做矩陣運算,即可算出該點的光流(Vx,Vy)。
源代碼及效果:
源代碼見這裏:https://blog.csdn.net/xiaoyufei117122/article/details/53693627。
效果並不好,很多錯誤匹配點。
參考文獻:
[1]. 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.
光流法詳解之一(LK光流)