我们如何同时使用汉明距离和坐标之间的距离来匹配特征?
How can we use both Hamming distance and distance between coordinates to match features?
众所周知,为了在 OpenCV 中跟踪对象,我们可以使用:
- FeatureDetector 查找特征
- DescriptorMatcher 匹配所需对象的特征与视频中当前帧的特征之间的相似性
- 然后使用findHomography找到对象的新位置
对于匹配特征DescriptorMatcher使用汉明距离(相同大小的两个序列之间的差值,而不是坐标之间的距离)。
即我们在当前帧中找到最相似的对象,但不是最接近先前位置的对象(如果我们知道的话)。
如何才能同时使用汉明距离和坐标间距离进行匹配,比如给定两者的权重,而不仅仅是汉明距离?
可以解决以下问题:
如果我们从前一帧的位置(x,y)开始跟踪对象,而当前帧包含两个相似的对象,那么我们会找到最相似的,但不是最近的。但是由于惯性,坐标的变化通常比相似性慢(光线的急剧变化或物体的旋转)。并且我们必须找到坐标最近的相似对象。
因此我们找到了不仅最相似而且会给出最准确单应性的特征,因为我们排除了虽然非常相似但在坐标上相距很远的特征并且很可能属于其他对象。
我认为 opencv 中没有内置方法可以做到这一点。
我要做的是使用 cv::DescriptorMatcher::radiusMatch。它会找到特定汉明距离内的所有匹配项。您需要找到一个 radius/distance 来确保这些特征对于您的应用程序足够相似,但又不会太大而使整个计算变慢。
然后,您可以从这些特征中选择最接近您预测的特征位置的特征,或者根据汉明距离和坐标距离等计算某种加权分数
你需要的大概是这样的:
- 像往常一样计算匹配。
DMatch
有 queryIdx
和 trainIdx
索引。您可以使用这些来检索相应的关键点。计算它们之间的欧氏距离,如果 DMatch
使用某种加权函数更新值 distance
。
- 按距离对匹配项排序(因为
distance
已更改)。
现在匹配向量根据描述符之间的汉明距离和关键点之间的欧氏距离进行排序。
众所周知,为了在 OpenCV 中跟踪对象,我们可以使用:
- FeatureDetector 查找特征
- DescriptorMatcher 匹配所需对象的特征与视频中当前帧的特征之间的相似性
- 然后使用findHomography找到对象的新位置
对于匹配特征DescriptorMatcher使用汉明距离(相同大小的两个序列之间的差值,而不是坐标之间的距离)。
即我们在当前帧中找到最相似的对象,但不是最接近先前位置的对象(如果我们知道的话)。
如何才能同时使用汉明距离和坐标间距离进行匹配,比如给定两者的权重,而不仅仅是汉明距离?
可以解决以下问题:
如果我们从前一帧的位置(x,y)开始跟踪对象,而当前帧包含两个相似的对象,那么我们会找到最相似的,但不是最近的。但是由于惯性,坐标的变化通常比相似性慢(光线的急剧变化或物体的旋转)。并且我们必须找到坐标最近的相似对象。
因此我们找到了不仅最相似而且会给出最准确单应性的特征,因为我们排除了虽然非常相似但在坐标上相距很远的特征并且很可能属于其他对象。
我认为 opencv 中没有内置方法可以做到这一点。
我要做的是使用 cv::DescriptorMatcher::radiusMatch。它会找到特定汉明距离内的所有匹配项。您需要找到一个 radius/distance 来确保这些特征对于您的应用程序足够相似,但又不会太大而使整个计算变慢。
然后,您可以从这些特征中选择最接近您预测的特征位置的特征,或者根据汉明距离和坐标距离等计算某种加权分数
你需要的大概是这样的:
- 像往常一样计算匹配。
DMatch
有queryIdx
和trainIdx
索引。您可以使用这些来检索相应的关键点。计算它们之间的欧氏距离,如果DMatch
使用某种加权函数更新值distance
。- 按距离对匹配项排序(因为
distance
已更改)。
现在匹配向量根据描述符之间的汉明距离和关键点之间的欧氏距离进行排序。