简介
光流是一种简单实用的图像运动的表达方式,通常定义为一个图像序列中的图像亮度模式的表观运动,即空间物体表面上的点的运动速度在视觉传感器的成像平面上的表达。----百度百科
光流法的前提假设:
(1)相邻帧之间的亮度恒定
(2)相邻视频帧的取帧时间连续,或者,相邻帧之间物体的运动比较“微小”
(3)保持空间一致性;即,同一子图像的像素点具有相同的运动
这种运动在二维图像中表示成像素点的运动速度,用一个向量(Vx,Vy)表示。
最为著名的计算光流的方法是LK光流法,它由Bruce D. Lucas 和 Takeo Kanade提出。
LK光流法
假设目标像素点的光流向量为,由前面的假设条件(亮度恒定、微小运动)得到以下公式:
以上公式,图像的x、y二维加时间形成三维函数,dx,dy,dt分别为下一帧的位移。将该公式以泰勒形式展开:
上式已将二阶以上的偏导忽略不计。
即,约去dt,并令dx/dt=u,dy/dt=v,
即可得到如下:
根据第三点空间一致性的前提假设,先设有一个大小为m*m的小窗,其内的像素运动是一致的,则得到如下:
以上是方程个数为m*m的一个方程组,而只有u,v两个未知数,显然该方程组是一个超定方程,需要寻找最优解,
我们采用最小二乘法求解,则得到:
解之得:
其中的求和是在之前定义的m*m矩形框内进行,Ix,Iy是图像x,y方向上的一阶差分(偏导)。
实际运用中,在计算目标像素点的光流时,会取该目标点为中心的周围一块区域来进行上述的计算。
人们的研究发现。通常越靠近中心像素的点贡献要小于更远的点,介此,人们对于上式加入了权重:
以上权重w一般采用的是一个核中心在矩形中心的高斯函数。
到此,经典的LK光流算法就结束了,有时间再追加介绍改进的LK金字塔光流算法。