我们如何使用汉明距离和坐标之间的距离来匹配特征?

时间:2015-07-08 12:47:39

标签: c++ opencv feature-detection hamming-distance video-tracking

众所周知,为了跟踪OpenCV中的对象,我们可以使用:

对于匹配特征DescriptorMatcher使用汉明距离(相同大小的两个序列之间的差值,而不是坐标之间的距离)。

即。我们在当前帧中找到最相似的对象,但不是最接近前一个位置的对象(如果我们知道的话)。

我们如何使用汉明距离和坐标之间的距离来匹配,例如,考虑到两者的重量,不仅是汉明距离?

它可以解决以下问题:

  • 如果我们开始从前一帧的位置(x,y)跟踪对象,并且当前帧包含两个相似的对象,那么我们将找到最相似但不是最近的对象。但由于惯性坐标通常变化慢于相似性(光线的明显变化或物体的旋转)。我们必须找到与最近坐标相似的对象。

  • 因此我们发现这些特征不仅最相似,而且会提供最准确的单应性,因为我们排除了特征,虽然它们非常相似,但坐标很远,很可能属于到其他对象。

2 个答案:

答案 0 :(得分:2)

你需要的是:

  1. 像往常一样计算匹配。
  2. DMatch包含queryIdxtrainIdx个索引。您可以使用它们来检索相应的关键点。计算它们之间的欧氏距离,并使用某种加权函数更新值distance if DMatch
  3. 按距离排序匹配(因为distance已更改)。
  4. 现在匹配向量根据描述符之间的汉明距离和关键点之间的欧氏距离进行排序。

答案 1 :(得分:1)

我认为在opencv中没有内置方法可以做到这一点。

我要做的是使用cv :: DescriptorMatcher :: radiusMatch。它会找到在某个汉明距离下的所有匹配。您需要找到一个半径/距离,以确保功能与您的应用程序足够相似,但不能太大,不能使整个计算变慢。

然后,根据此功能,您可以选择最接近您预测该功能的位置的功能,或者根据汉明距离和坐标距离等计算某种加权分数。