从SIFT BF-Match的多个图像中找到具有最佳匹配的图像

时间:2017-03-31 12:45:04

标签: python opencv sift template-matching

我已经阅读了许多关于使用SIFT和Brute-Force匹配(例如thisthis)将一个图像与多个图像匹配的问题。 是否可以进行多种匹配?我想做的是以下几点。

  1. 遍历目录中的查询图像
  2. 用于每个图像提取SIFT关键点和描述符
  3. 与每个火车/模板图像匹配(再次使用SIFT)
  4. 获取具有最佳匹配的模板图像(例如,最小欧几里德距离?)
  5. 使用此最佳模板图像并计算此模板图像与当前查询图像之间的仿射变换。
  6. 到目前为止,我已经成功到第3步并坚持到那一步。

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

3 个答案:

答案 0 :(得分:1)

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

步骤2:测试单应矩阵的有效性/良好性,如here

步骤3:如果单应矩阵是好的,transform

当然欧几里得也应该工作

答案 1 :(得分:0)

我建议以下内容:

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

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

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

此外,如果您可以同时运行每个工作流程,这将使您的执行时间很短,那就太好了。

检查此工作流程可为您提供更好的主意: enter image description here

答案 2 :(得分:0)

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