使用OpenCV跟踪用户定义的点

时间:2013-02-04 14:42:31

标签: algorithm opencv language-agnostic tracking

我正在开展一个项目,我需要跟踪图像中的两个点。到目前为止,识别这些要点的最佳方法是让用户在程序首次运行时单击它们。我正在使用OpenCV(documented here中内置的Lucas-Kanade金字塔方法,但正如预期的那样,这不太合适。是否有更好的替代算法来跟踪OpenCV中的点,或者一些验证我已经拥有的点的其他方法是什么? 我正在考虑使用GoodFeaturesToTrack,并从每个点到我想要跟踪的点之间的距离,也许某种向量指出两点之间的关系,并使用这些信息来确定我的新点。 我正在寻找方法来解决这个问题,不一定是代码示例。 谢谢

编辑:我正在跟踪小动作,如果有帮助的话

1 个答案:

答案 0 :(得分:5)

如果你寻找一个在opencv中实现的解决方案,金字塔式的Lucas Kanade(PLK)方法就不行了,否则我更喜欢基于粒子滤波器的跟踪器。 要使用PLK提高跟踪性能,请确保已正确设置参数。例如。对于大型动作,你需要一个等级为ca.窗口不应该小(我更喜欢17x17到27x27)。另请注意,这些方法需要纹理区域才能跟踪点。这意味着角落像图像内容(光圈问题)。

我建议在要跟踪的点(P)周围的网格中播种一组点(ps)。而不是使用前向 - 后向阈值来拒绝错误跟踪的点。点(P)的运动将通过特定残差点集(ps)的平均运动来计算。

通过估计从第1帧到第2帧的运动来计算向前后向置信度。(ptList1 - > ptList2)。并且从第2帧到第1帧具有点ptList2(ptList2 - > ptListRef)。如果(|| ptRef - pt1 ||> fb_threshold),运动矢量将被拒绝。