加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c – 为什么我们需要crossCheckMatching功能?

发布时间:2020-12-16 10:54:57 所属栏目:百科 来源:网络整理
导读:我正在阅读很多使用特征提取(sift ecc)进行物体检测的帖子. 在两个图像上计算描述符之后,为了获得良好的匹配,他们使用了crossCheckMatching. (发现于sample/cpp/descritpor_extractor_matcher.cpp) Coudl我理解为什么选择这个? 为什么我们需要评估两者 desc
我正在阅读很多使用特征提取(sift ecc)进行物体检测的帖子.

在两个图像上计算描述符之后,为了获得良好的匹配,他们使用了crossCheckMatching. (发现于sample/cpp/descritpor_extractor_matcher.cpp)

Coudl我理解为什么选择这个?

为什么我们需要评估两者

descriptorMatcher->knnMatch( descriptors1,descriptors2,matches12,knn );
descriptorMatcher->knnMatch( descriptors2,descriptors1,matches21,knn );

我不明白.

例如,计算Euclian距离在两个方向上都不会返回相同的结果?

解决方法

您通常不能假设您的匹配器将使用Eucludian距离.例如,BFMatcher支持不同的规范:L1,L2,Hamming ……

您可以在此处查看文档以获取更多详细信息:http://docs.opencv.org/modules/features2d/doc/common_interfaces_of_descriptor_matchers.html

无论如何,所有这些距离测量都是对称的,并且您使用哪一个来回答您的问题并不重要.

答案是:调用knnMatch(A,B)与调用knnMatch(B,A)不同.

如果你不相信我,我会试着给你一个图形和直观的解释.为了简单起见,我假设knn == 1,因此对于每个查询的描述符,算法只会找到1个对应关系(更容易绘制:-)

我随机挑选了几个2D样本并创建了两个数据集(红色和绿色).在第一个图中,绿色在查询数据集中,这意味着对于每个绿点,我们尝试找到最接近的红点(每个箭头表示一个对应关系).

在第二个图中,查询&列车数据集已被交换.

最后,我还绘制了crossCheckMatching()函数的结果,它只保留了双向匹配.

正如您所看到的,crossCheckMatching()的输出比每个knnMatch(X,Y)/ knnMatch(Y,X)要好得多,因为只保留了最强的对应关系.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读