OpenCV锤击匹配之间的距离距离

OpenCV hamming distance between FLANN matches

本文关键字:距离 之间 OpenCV      更新时间:2023-10-16

在使用弗兰恩匹配器而无需手动计算时,是否有一种方法可以在两个匹配的描述符之间获得锤击距离?(即,通过匹配的描述符循环,将每个元素进行X键,然后计数)。

我正在匹配Orb像SO这样计算的描述符:

FlannBasedMatcher flannMatcher;
flannMatcher.match(des1, des2, matches);

如果我检查距离:

cout << matches.at(0).distance;

我得到了norm_l2距离,但是我的应用需要锤击距离。

上下文:

我要这样做的原因是,我正在使用ORB的训练图像集生成火车描述符,使用蛮力匹配器查找匹配项,然后根据锤子距离过滤差的匹配。

我想使用弗兰纳匹配器将网络摄像头流上的描述符匹配到这些火车描述符(并显示哪些训练图像最与当前帧匹配),但是由于弗兰恩匹配器似乎没有给出锤击距离我在滤除差的比赛时陷入困境,在选择最匹配的火车图像时,我会遇到很多错误。

在OpenCV的教程中,它描述了如何为SIFT和ORB创建基于Flann的匹配器(这是Orb)

使用Orb时,您可以通过以下内容。根据文档,建议使用评论的值,但在某些情况下没有提供所需的结果。其他值正常。:

FLANN_INDEX_LSH = 6
index_params= dict(algorithm = FLANN_INDEX_LSH,
               table_number = 6, # 12
               key_size = 12,     # 20
               multi_probe_level = 1) #2

https://docs.opencv.org/3.4/dc/dc3/tutorial_py_matcher.html

尝试使用Flann :: lshindexparams作为距离类型。这确实可以进行局部敏感的哈希(靠近锤距)

FlannBasedMatcher matcher2(new flann::LshIndexParams(20,10,2));

另请参见此处的讨论