光流法是计算机视觉中应用较为广泛的一类算法,经常用于物体跟踪及其相关任务中,今天来介绍下光流中比较简单的一种方法:LK光流。
假设先验
LK光流全称为Lucas-Kanade光流,算法原理比较好理解,首先,LK光流对应用场景提出了三个假设先验:
- 亮度恒定:假设像素在运动过程中亮度(灰度值)恒定,其实这是大部分计算机视觉任务都需要的一个先验
- 像素偏移小:检测光流的两帧之间不能有过大的motion,否则LK光流会检测失败
- 空间一致性:当前帧相邻的像素在下一帧应该也是相邻的,这样便于求解图像块的梯度进而寻找到匹配的像素
算法流程
给定 t t t时刻的图像上的像素点 I ( x , y ) I(x, y) I(x,y),算法的目标是找到在下一时刻该像素的在各个方向上的位移,用公式表达就是:
I ( x , y , t ) = I ( x + δ x , y + δ y , t + δ t ) (1) I(x, y, t) = I(x + \delta x, y + \delta y, t + \delta t) \tag{1} I(x,y,t)=I(x+δx,y+δy,t+δt)(1)
可以对等号右边的式子采用泰勒展开:
I ( x , y , t ) = I ( x + δ x , y + δ y , t + δ t ) = I ( x , y , t ) + ∂ I ∂ x δ x + ∂ I ∂ y δ y + ∂ I ∂ t δ t (2) \begin{aligned} I(x, y, 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 \end{aligned} \tag{2} I(x,y,t)=I(x+δx,y+δy,t+δt)=I(x,y,t)+∂x∂Iδx+∂y