【问题标题】:Finding the image with best matches from multiple images for SIFT BF-Match从多个图像中找到具有最佳匹配的图像以进行 SIFT BF-Match
【发布时间】:2017-03-31 12:45:04
【问题描述】:

我已经阅读了许多关于使用 SIFT 和蛮力匹配(如 thisthis)将一张图像与多张图像匹配的问题。 是否可以进行多对一匹配?我想做的是以下。

  1. 遍历目录中的查询图像
  2. 为每个图像提取 SIFT 关键点和描述符
  3. 对每个训练/模板图像进行匹配(再次使用 SIFT)
  4. 获取最匹配的模板图像(例如最小欧几里得距离?)
  5. 使用此最佳模板图像并计算此模板图像与当前查询图像之间的仿射变换。

直到现在我成功到第 3 步并停留在那个点。

我正在使用 Opencv 2.7.12 和 python 2.7。由于此版本中没有drawMatches,因此我正在使用此实现。 https://stackoverflow.com/a/26227854/6677891

【问题讨论】:

  • 您可以对从 BF-Match 获得的匹配运行 RANSAC,测试来自 herehere 的单应矩阵的有效性并进行转换。当然欧几里得也应该工作。我有点不明白你为什么卡住了
  • @RickM。是的,我可以解决它。谢谢。
  • 我的解决方案有帮助吗?
  • 是的 :) @RickM.
  • 我会把它作为答案发布,接受它给未来需要帮助的人:) 很高兴它有帮助!

标签: python opencv sift template-matching


【解决方案1】:

第 1 步:对从 BF-Match 获得的匹配运行 RANSAC。

第2步:测试here等单应矩阵的有效性/好坏

第三步:如果单应矩阵好,transform

当然欧几里得也应该工作

【讨论】:

    【解决方案2】:

    我建议如下:

    为您的图像匹配过程创建工作流程以获得最佳匹配:

    对数据库中的每对图像执行以下操作:

    1. 第 1 阶段:在应用 SIFT(图像预处理)之前执行任何图像对比度增强检查here
    2. 第 2 阶段:运行 SIFT 并从每对图像中提取匹配集作为 CSV 文件。
    3. 第 3 阶段:对每个生成的 CSV 文件运行 RANSAC 以消除任何异常值。

    此外,如果您可以同时运行每个工作流程,这将缩短执行时间。

    检查此工作流程,让您有更好的想法:

    【讨论】:

      【解决方案3】:

      简单的方法是在每个图像对上进行一个 for 循环,并使用它来找到 n 个最佳匹配的平均误差。然后选择误差最小的匹配或图像对。

      【讨论】:

        猜你喜欢
        • 2012-05-01
        • 1970-01-01
        • 1970-01-01
        • 2016-06-07
        • 1970-01-01
        • 2012-04-28
        • 2016-03-21
        • 2012-04-18
        • 1970-01-01
        相关资源
        最近更新 更多