光流是指在连续的两帧图像中由于图像中的物体移动或者摄像头的移动导致的目标中目标像素的移动,光流是二维矢量场,表示了一个点从第一帧到第二帧的位移。
光流法的工作原理基于如下假设:
- 相邻帧之间的亮度恒定;
- 相邻视频帧的取帧时间连续,或者,相邻帧之间物体的运动比较“微小”;
- 同一子图像的像素点具有相同或相似的运动。
传统算法——Lucas-Kanade算法:
第一帧中的像素 I ( x , y , t ) I(x, y, t) I(x,y,t)表示在时刻t时像素 I ( x , y ) I(x, y) I(x,y)的值,在经过 Δ t \Delta t Δt时间后,该像素在下一帧中移动了 ( Δ x , Δ y ) (\Delta x, \Delta y) (Δx,Δy),在假设中,这些像素在理想情况下应当是相等的,即:
I ( x , y , t ) = I ( x + Δ x , y + Δ y , t + Δ t ) I(x, y, t)=I(x + \Delta x, y + \Delta y, t + \Delta t) I(x,y,t)=I(x+Δx,y+Δy,t+Δt)
假设移动很小,那么右式可以用泰勒公式展开:
I ( x + Δ x , y + Δ y , t + Δ t ) = I ( x , y , t ) + ∂ I ∂ x Δ x + ∂ I ∂ y Δ y + ∂ I ∂ t Δ t + ϵ I(x + \Delta x, y + \Delta y, t + \Delta t) = 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 + \epsilon I(x+Δx,y+Δy,t+Δt)=I(x,y,t)+∂x∂IΔx+∂y∂IΔy+∂t∂IΔt+ϵ
其中 ϵ \epsilon ϵ是高阶无穷小,那么就可以得到:
∂ I ∂ x Δ x + ∂ I ∂ y Δ y + ∂ I ∂ t Δ t = 0 ⇒ ∂ I ∂ x Δ x Δ t + ∂ I ∂ y Δ y Δ t + ∂ I ∂ t = 0 \frac{\partial I}{\partial x}\Delta x + \frac{\partial I}{\partial y}\Delta y + \frac{\partial I}{\partial t}\Delta t = 0 \Rightarrow \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} = 0 ∂x∂IΔx+∂y∂IΔy+∂t∂IΔt=0⇒∂x∂IΔtΔx+∂y∂I