视觉运动跟踪技术详解
1. 特征点跟踪基础
在视频序列中跟踪特征点时,我们需要确定特征点在后续帧中的新位置。假设特征点的强度在相邻帧之间保持不变,我们要寻找一个位移 $(u, v)$。设 $I_t$ 和 $I_{t + 1}$ 分别为当前帧和下一时刻的帧,基于这个恒定强度假设,结合泰勒展开,我们可以得到一个涉及图像导数的方程。
这个方程进一步推导出基本的光流约束方程,也就是亮度恒定方程。Lukas - Kanade 特征跟踪算法利用了这个约束。该算法还假设特征点邻域内所有点的位移相同,这样就可以对这些点施加光流约束,从而得到比未知数(两个)更多的方程,进而可以通过均方意义求解这个方程组。在实际应用中,通常采用迭代方式求解,OpenCV 实现还允许在不同分辨率下进行估计,以提高搜索效率和对大位移的容忍度。默认情况下,图像级别数为 3,窗口大小为 15,这些参数可以根据需要修改。此外,还可以指定终止条件, cv::calcOpticalFlowPyrLK
函数的第六个参数包含残差均方误差,可用于评估跟踪质量,第五个参数包含二进制标志,指示对应点的跟踪是否成功。
2. 光流估计
当相机观察场景时,观察到的亮度模式会投影到图像传感器上形成图像。在视频序列中,我们通常关注捕捉运动模式,即不同场景元素的 3D 运动在图像平面上的投影,这个投影的 3D 运动向量图像称为运动场。然而,我们无法直接从相机传感器测量场景点的 3D 运动,只能观察到亮度模式在帧与帧之间的运动,这种亮度模式的表观运动就是光流。虽然运动场和光流并不总是相等,但光流被认为是运动场的有效近似。
2.1 准备工作
估计光流意味着量