我有一个跟踪应用程序,然后我会有播放器对象,如下图所示。我需要做以下事情:
1-检测每个帧的特征并将它们与下一帧匹配,我使用SURF
2-计算我从步骤1估计的特征点的平均点
3-计算在步骤2估计的平均点之间的距离,每两帧之间的距离。
然后我可以保存匹配功能的位置,
surfPoints.Location
但我仍然不知道获得这些积分的质量中心的最佳方法是什么,或者取其平均值?
如何过滤未匹配的点,我看到有一个函数estimateGeometricTransform
,但是这个函数从匹配的点中删除了很多点!
对此有什么好的方法吗?
答案 0 :(得分:0)
所以让我总结一下:
你有两个关键点数组和匹配函数,它给你两个列表中的匹配索引(“原始列表中的关键点7是〜第二个匹配关键点12”)
那么现在你的问题是评估全球从这些局部位移的转变,同时考虑到异常值?
在这种情况下(拟合给出异常值的模型)你应该真正研究RANSAC song(以及永恒有趣的RANSAC song)
尽管该算法运行良好,但它是非确定性的(因为它将涉及基于随机样本尝试模型并评估异常值的数量)
我会让你阅读RANSAC的理论(简单统计),现在让我们看看如何在你的案例中使用RANSAC:
你的问题是这样的:给定一个2D矢量列表,找到最小化“异常值”数量的最佳二维矢量
模型拟合步骤只是从矢量列表中选择一个矢量
异常值是在方向或标准上“疯狂地”的向量
答案 1 :(得分:0)
这里的困难在于你有非刚性运动。当动作可以通过仿射或投射变换来描述时,estimateGeometricTransform
是很好的。但是,因为您正在跟踪一个复杂的关节状物体,就像一个人一样,这个动作要复杂得多。这就是estimateGeometericTransform
拒绝许多匹配作为异常值的原因。
您可以尝试几种方法。一种是尝试使用vision.PointTracker
来跟踪积分。它使用KLT(Kanade-Lucas-Tomasi)算法。
或者,如果您的相机静止不动,您可以尝试使用vision.ForegroundDetector
来实现背景减法。它会给你一个显示所有移动物体的二进制掩码。