一 简介 在视频序列中,物体帧间移动可表示为物体的运动速度 1)光滑平面上图像空域差分与图像帧间差分均为0,故计算出光流速度为0; 2)在图像边缘上,由于光流计算观察一个较小邻域,无法计算出边缘方向上的运动速度(即孔径问题)。 因此,在光流跟踪中,需要对特殊点进行跟踪以避免以上问题。该特殊点称为角点,角点在邻域上至少两个方向上存在明显梯度变化,这就避免了无法跟踪问题。同时,在图像匹配应用中,角点或者类似的特征点也是多幅图像之间关联点。 通过定位角点,在角点上应用光流算法计算出对应角点的运动速度 1)在视频监控中,可以估计监控视频中的物体运动,或者通过监视场景来估计摄像机自运动; 2)对于晃动视频,通过对光流速度估计,可以消除视频晃动。
二 Harris角点 考虑一个固定小的图像区域,相对于该图像区域做任意一个小的平移 对于该公式需要注意以下两点: 1)对于图像上任意一个固定点,其变化量随着 2)图像梯度函数为 对以上公式进行数学变换: 假设图像函数在 (x,y) 平面上连续且二阶可导(图像一般满足该性质),针对较小变化量 由于图像某一点梯度为 可得 则固定小区域的自相关矩阵为: 自相关矩阵A包含对应区域的变化的全部信息,通过分析该矩阵,可以判断相应区域是否为角点区域。 由于 当 在其他方向上, 另外,如果将 令 在实际计算中,一般不直接计算出特征值,而是通过矩阵的行列式与矩阵的迹来判断是否为角点区域,如: 1) 2)
三 Lucas-Kanade光流 LK光流基于以下假设: 1)被追踪点帧间亮度保持恒定; 2)被追踪点帧间移动较小; 3)被追踪点邻域运动一致。 根据假设1),可得: 根据假设 2),帧间移动距离较小,也即帧间间隔时间较短,令 上式表明,被追踪点的运动速度 根据假设3),由于被追踪点邻域运动一致,对邻域点做相同计算,并建立其联立方程组,即可求解被追踪点的运动速度。 理论上来说,只需要两个线性不相关的方程即可求解光流速度。实际应用中,可以对邻域内每一个点建立方程,构成超定的(overdetermined)线性方程组,从而提升计算准确度,超定线性方程组求解为: 以上建立了光流跟踪的一般方法。方程组 Ax = b 具体表示为 当矩阵 对于邻域大小选择,当选择邻域较大时,可能违背 邻域运动 一致性原则;当选择邻域较小时,可能遇到孔径问题,而良好角点正好可以在较小邻域上避免孔径问题。 总的来说,Harris 角点特性正好避免 LK 光流跟踪约束方程的孔径问题,所以,使用 LK 算法跟踪 Harris 角点可以获得较好的结果。 在Learning OpenCV中,给出了一维图像的光流计算解释,这可以更直观理解光流计算,具体如下: 针对一维图像,有 使用 Newton 插值方法可以进一步精确光流速度,如下图:
在实际应用中,LK光流跟踪假设2)会经常难以满足,使用图像金字塔可以跟踪帧间较大移动。首先在顶层金字塔上估计光流运动,然后在下一层金字塔中使用上层运动进一步精确光流运动。 在OpenCV中,使用 cv::goodFeaturesToTrack 提取角点,在精确度要求较高时,可使用 cv::CornerSubPix 对提取到的角点计算亚像素精度,该算法基本思想是边缘上点与角点的连线垂直于边缘上点梯度方向;然后使用函数 cv::calcOpticalFlowPyrLK 对提取的角点在两帧图像上计算对应的光流速度;最后,由于部分点的光流速度可能受到干扰影响,可以使用统计的方法剔除部分掉。
参考资料 :Learning OpenCV 3 Adrian Kaehler & Gary Bradski Computer Vision: Algorithms and Applications Richard Szeliski
|
|
来自: 昵称70747151 > 《待分类》