1. 程式人生 > >光流法(Optical Flow)及OpenCV實現

光流法(Optical Flow)及OpenCV實現

Optical Flow

Optical flow 有兩個假設:

  1. 亮度恆定:在相鄰連續兩幀中一個目標的畫素強度不會變化。
  2. 空間一致性:周圍畫素有類似執行。
  3. 時間規律:相鄰幀時間足夠短,以至於在考慮執行變化時可以忽略它們之間的差異。

假設在第一幀中畫素 I ( x , y

, t ) I(x,y,t) d t dt 時間後,在下一幀中它運動了 (
d x , d y ) (dx, dy)
。因為畫素相同,強度沒有變化。

I

( x , y , t ) = I ( x + d x , y + d y , t + d t ) I(x,y,t) = I(x+dx, y+dy, t+dt)

根據Taylor 級數得到:

I ( x + d x , y + d y , t + d t ) = I ( x , y , t ) + I x Δ x + I y Δ y + I t Δ t I(x+dx, y+dy, t+dt) = I(x,y,t) + \frac{\partial I}{\partial x}\Delta x + \frac{\partial I}{\partial y}\Delta y + \frac{\partial I}{\partial t}\Delta t

因此:

I x Δ x + I y Δ y + I t Δ t = 0 \frac{\partial I}{\partial x}\Delta x + \frac{\partial I}{\partial y}\Delta y + \frac{\partial I}{\partial t}\Delta t = 0

或者

I x Δ x Δ t + I y Δ y Δ t + I t Δ t Δ t = 0 \frac{\partial I}{\partial x} \frac{\Delta x}{\Delta t} + \frac{\partial I}{\partial y}\frac{\Delta y}{\Delta t} + \frac{\partial I}{\partial t}\frac{\Delta t}{\Delta t} = 0

用速度來代替後:

I x V x + I y V y + I t = 0 \frac{\partial I}{\partial x} V_x + \frac{\partial I}{\partial y} V_y + \frac{\partial I}{\partial t} = 0

Lucas-Kanade method

此方法取點周圍 3x3 的patch 。9個點有相同的運動。
推導過程 :

I ( x , y , t ) = I ( x + d x , y + d y , t + d t ) I(x,y,t) = I(x+dx, y+dy, t+dt)

f x u + f y v + f t = 0 f_x u + f_y v + f_t = 0

f x = f x f_x = \frac{\partial f}{\partial x}
f y = f y f_y = \frac{\partial f}{\partial y}
u = d x d t u = \frac{dx}{dt}
v = d y d t v = \frac{dy}{dt}

[ u v ] = [ Σ i f x i 2 Σ i f x i f y i Σ i f x i f y i Σ i f x i 2 ] 1 [ Σ i f x i f t i Σ i f y i f t i ] \begin{bmatrix} u\\ v \end{bmatrix} = \begin{bmatrix} \Sigma_i f_{x_i} ^ 2 & \Sigma_i f_{x_i} f_{y_i} \\ \Sigma_i f_{x_i} f_{y_i} & \Sigma_i f_{x_i} ^ 2 \end{bmatrix}^{-1} \begin{bmatrix} -\Sigma_i f_{x_i} f_{t_i}\\ -\Sigma_i f_{y_i} f_{t_i} \end{bmatrix}