概念
光流是Gibson在1950年首先提出的,它是指空间运动物体在观察成像平面上的像素运动瞬时速度。是利用图像序列中像素在时间域上的变化以及相邻帧之间的相关性来找到上一帧跟当前帧之间存在的相应关系。一般而言,光流是因为场景中前景目标本身的移动、相机的运动,或者两者的共同运动所产生的。
在这里有两个概念要解释:
运动场,事实上就是物体在三维真实世界上的运动。
光流场,是运动场在二维图像平面上的投影。
Lucas-Kanade算法原理
LK算法基于以下三个假设:
1)相邻帧之间的亮度恒定。
2)相邻视频帧的取帧时间连续,或者相邻帧之间物体的运动比较微小。
3)保持空间一致性。一个场景中同一表面上邻近的点具有相近的运动,在图像平面上的投影也在邻近区域。
我们的假设可能不是十分正确,即图像的亮度实际上不是恒定的,时间步长也不是如我们期望的相对于运动足够短,所以我们求解的速度不是十分准确,但是,如果我们求解到的速度与实际速度“足够接近”,就可以用迭代方法来解决这个问题。
对于大多数30Hz的摄像机,大而不连贯的运动是普遍存在的,而Lucas-Kanada光流正因为这个原因在实际中的跟踪效果并不是很好:我们需要一个大的窗口来捕获大的运动,而大窗口往往会违背运动连贯的假设!图像金字塔可以解决这个问题,即最初在较大的空间尺度上进行跟踪,再通过对图像金字塔向下直到图像像素的处理来修正初始运动速度的假定。
所以建议的跟踪方法是:在图像金字塔的最高层计算光流,用得到的运动估计结果作为下一层金字塔的起始点,重复这个过程直到达到金字塔的最底层。这个更精致的算法叫金字塔Lucas-Kanada光流,函数是cvCalcOpticalFlowPyrLK()