光流描述的是图像中像素强度的流动。光流法的目的是根据图像中像素点的灰度值强度变化估计出物体移动速度与方向。
光流估计是要给予一定 的假设基础上 才成立的:
(1)前后两帧中点的位移不大;这样才能利用相邻帧之间的位置变化引起的灰度值变化,去求取灰度对位置的偏导数。所有光流法都必须满足。
(2)灰度不变假设,这要求外界光强保持恒定;一个像素点随着时间的变化,其亮度值(像素灰度值)是恒定不变的。这是光流法的基本设定。所有光流法都必须满足。
(3)空间一致性,每个点的运动和邻近的点类似,即前一帧中相邻像素点在后一帧中也是相邻的。这是LK光流法独有的假定,因为为了求取x,y方向的速度,需要建立多个方程联立求解。而空间一致假设就可以利用邻域n个像素点来建立n个方程。
Lucas–Kanade光流算法是一种两帧差分的光流估计算法;就是基于以上假设的成立才会建立出相关的关系方程式;
假设前一帧时间为t, 后一帧时间为t+δt。则前一帧I的像素点I(x, y, z, t)在后一帧中的位置为I(x+δx, y+δy, z+δz, t+δt )。
① 根据亮度恒定假设得出:
② 根据前后两帧唯一相差不大的假设, 将上式右侧用泰勒级数展开:
根据以上得出:
同时对时间t做微分得到:
其中(dx/dt, dy/dt) = (u, v)为待解像素的光流,分别表示像素在x 轴和y 轴上的运动 速度,dI/dx和 dI/dy分别代表的是像素在x方向和y方向上的梯度,分别用用Ix和Iy比表示得到:
现在有两个未知数,只有一个方程。因此用到第三个假设:即空间一致性假设,LK算法是利用3x3窗口内的9个像素点建立9个方程。简写为下面的形式:
改写成矩阵为:
当然两个未知数,9个方程,这是一个超定问题,采用最小二乘法解决:
根据上式通过累加邻域像素点在两个维度的偏导数并做矩阵运算,即可算出该点的光流(Vx,Vy)。
求解方法可以使用求解超定方程组,也可以使用高斯牛顿等迭代操作完成。