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

Finding the image with best matches from multiple images for SIFT BF-Match

我读过很多关于使用 SIFT 和蛮力匹配将一张图像与多张图像进行匹配的问题,例如 this and this。 是否可以进行多对一的匹配?我想做的是以下内容。

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

到现在为止我成功到第3步并卡在了那一点。

我正在使用 Opencv 2.7.12 和 python 2.7。由于此版本中没有 drawMatches,因此我正在使用此实现。

第 1 步:运行 对您从 BF 匹配中获得的匹配进行 RANSAC。

第2步:测试单应矩阵的validity/goodness如

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

当然欧几里得也应该有效

我建议如下:

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

对于数据库中的每对图像执行:

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

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

检查此工作流程,让您有一个更好的主意:

简单的方法是对每个图像对进行 for 循环,并使用它来查找 n 个最佳匹配的平均误差。然后 select 具有最低误差的匹配项或图像对。