1. 程式人生 > >光流法詳解之一(LK光流)

光流法詳解之一(LK光流)

ref 像素點 需要 and intel nal get 灰度值 參考文獻

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光流)