我们如何同时使用汉明距离和坐标之间的距离来匹配特征
How can we use both Hamming distance and distance between coordinates to match features?
众所周知,为了在OpenCV中跟踪对象,我们可以使用:
- FeatureDetector查找特征
- DescriptorMatcher用于匹配所需对象的特征与视频中当前帧的特征之间的相似性
- ,然后使用findHomography查找对象 的新位置。
对于匹配特征,DescriptorMatcher使用汉明距离(相同大小的两个序列之间的差值,而不是坐标之间的距离)。
。我们找到当前帧中最相似的对象,但不是最接近前一个位置的对象(如果我们知道的话)。
我们如何使用匹配汉明距离和坐标之间的距离,例如,给定两者的权重,而不仅仅是汉明距离?
它可以解决以下问题:
-
如果我们从上一帧的位置(x,y)开始跟踪对象,并且当前帧包含两个相似的对象,那么我们将找到最相似的,但不是最接近的。但由于惯性,坐标的变化通常比相似度(物体的光线或旋转的急剧变化)慢。而我们必须找到坐标最近的相似物体
-
因此,我们找到的特征,不仅是最相似的,而且将给出最准确的单应性,因为我们排除了特征,虽然非常相似,但在坐标上非常远,很可能属于其他物体。
您需要的内容可能是:
- 照常计算匹配项。
-
DMatch
具有queryIdx
和trainIdx
指数。您可以使用它们来检索相应的关键点。计算它们之间的欧氏距离,用某种加权函数更新DMatch
的值distance
。 - 按距离排序匹配(因为
distance
已更改)。
现在匹配向量根据描述符之间的汉明距离和关键点之间的欧几里得距离进行排序。
我认为opencv中没有内置方法来做到这一点。
我要做的是使用cv::DescriptorMatcher::radiusMatch。它找到所有在一定汉明距离下的匹配。您需要找到一个半径/距离,以确保功能与您的应用程序足够相似,但不会太大而使整个计算变慢。
然后,你可以从这些特征中选择最接近你预测的特征位置的一个,或者根据汉明距离和坐标距离等计算某种加权分数
相关文章:
- 如何声明特征矩阵,然后通过嵌套循环初始化它
- 如何修复此错误:未定义对"距离(浮点数,浮点数,浮点数,浮点数,浮点数)"的引用
- 特征::矩阵<双精度,1,3> 结构类型函数中的返回类型函数
- 有没有一种方法可以通过"typedef"为重新定义的基本类型定义特征和强制转换运算符
- 特征命名访问向量段
- 将特征矩阵的向量设置为0
- 特征:模板函数中矩阵的平面图
- basic_string的前导/尾部不区分空格的特征
- 用C++程序计算圆锥体的体积、球体的体积、八边形的面积和两点之间的距离
- 特征 3 类的模板专用化
- 特征 c++:复矩阵的面积双曲正切(atanh)
- C++ 中的特征向量计算
- 根据C++标准的定义实现"is_similar"类型特征
- C++类型特征,以查看是否可以<uint32_t>对类型"K"的任何变量调用"static_cast(k)"
- 有没有办法找到特征矩阵系数的中值?
- 如何将高维数据映射到特征类型?
- 计算所有对之间的曼哈顿距离
- 将平面阵列重塑为复杂的特征类型
- 我们如何同时使用汉明距离和坐标之间的距离来匹配特征
- 如何使用特征库计算曼哈顿距离