【问题标题】:OpenCV hamming distance between FLANN matchesFLANN 匹配之间的 OpenCV 汉明距离
【发布时间】:2015-07-21 01:29:08
【问题描述】:

在使用 flann 匹配器而不手动计算时,有没有办法获得两个匹配描述符之间的汉明距离? (即遍历匹配的描述符,对每个元素进行异或运算,然后计数)。

我正在匹配 ORB 计算的描述符,如下所示:

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

如果我检查距离:

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

我得到了 NORM_L2 距离,但是我的应用程序需要汉明距离。

上下文:

我想这样做的原因是我使用 ORB 从训练图像集中生成训练描述符,使用蛮力匹配器查找匹配项,然后根据汉明距离过滤不良匹配项。

然后我想使用 flann 匹配器将网络摄像头流上的描述符与这些训练描述符匹配(并显示哪些训练图像与当前帧最匹配),但由于 flann 匹配器似乎没有给出汉明距离我在过滤不良匹配时遇到了困难,在选择最匹配的火车图像时我遇到了很多错误。

【问题讨论】:

    标签: c++ opencv computer-vision


    【解决方案1】:

    尝试使用 flann::LshIndexParams 作为距离类型。这会做局部敏感哈希(接近汉明距离)

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

    另见讨论here

    【讨论】:

    • 感谢您的提示!会试一试,看看进展如何。
    • 这成功了!除了它非常慢并且在网络摄像头中导致 2-3 秒滞后:S 我无法找到有关如何为 LshIndexParams 构造函数选择参数的信息,您对此有什么建议吗?
    【解决方案2】:

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

    在使用 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

    【讨论】:

      猜你喜欢
      • 2014-05-02
      • 2015-03-21
      • 1970-01-01
      • 2017-09-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多