获取匹配特征的质心或平均值

时间:2015-06-03 06:36:13

标签: matlab image-processing computer-vision feature-detection matlab-cvst

我有一个跟踪应用程序,然后我会有播放器对象,如下图所示。我需要做以下事情:

1-检测每个帧的特征并将它们与下一帧匹配,我使用SURF

2-计算我从步骤1估计的特征点的平均点

3-计算在步骤2估计的平均点之间的距离,每两帧之间的距离。

然后我可以保存匹配功能的位置,

surfPoints.Location

但我仍然不知道获得这些积分的质量中心的最佳方法是什么,或者取其平均值?

如何过滤未匹配的点,我看到有一个函数estimateGeometricTransform,但是这个函数从匹配的点中删除了很多点! 对此有什么好的方法吗?

enter image description here

2 个答案:

答案 0 :(得分:0)

所以让我总结一下:

你有两个关键点数组和匹配函数,它给你两个列表中的匹配索引(“原始列表中的关键点7是〜第二个匹配关键点12”)

那么现在你的问题是评估全球从这些局部位移的转变,同时考虑到异常值?

在这种情况下(拟合给出异常值的模型)你应该真正研究RANSAC song(以及永恒有趣的RANSAC song

尽管该算法运行良好,但它是非确定性的(因为它将涉及基于随机样本尝试模型并评估异常值的数量)

我会让你阅读RANSAC的理论(简单统计),现在让我们看看如何在你的案例中使用RANSAC:

你的问题是这样的:给定一个2D矢量列表,找到最小化“异常值”数量的最佳二维矢量

模型拟合步骤只是从矢量列表中选择一个矢量

异常值是在方向或标准上“疯狂地”的向量

此外,RANSAC explained by Mathworks

答案 1 :(得分:0)

这里的困难在于你有非刚性运动。当动作可以通过仿射或投射变换来描述时,estimateGeometricTransform是很好的。但是,因为您正在跟踪一个复杂的关节状物体,就像一个人一样,这个动作要复杂得多。这就是estimateGeometericTransform拒绝许多匹配作为异常值的原因。

您可以尝试几种方法。一种是尝试使用vision.PointTracker来跟踪积分。它使用KLT(Kanade-Lucas-Tomasi)算法。

或者,如果您的相机静止不动,您可以尝试使用vision.ForegroundDetector来实现背景减法。它会给你一个显示所有移动物体的二进制掩码。