使用 SIFT

问题描述

我目前正在开发一个 python 程序,该程序将输入图像与数据库中最接近的图像相匹配。我使用带有 SIFT 描述符的 python opencv 来做到这一点。我有一个工作原型,步骤如下:

  1. 提取输入图像的 SIFT 描述符

对于每个图像:

  1. 比较输入并使用 flann.knnMatch

    在两者之间找到匹配的关键点
  2. 使用 Lowe's ratio 检验确定良好的关键点匹配

  3. 通过计算每个好的关键点匹配的平均距离来计算每个图像的分数

得分最低的图像将是最佳匹配。我的方法似乎很慢,尤其是对于较大的数据库

如果这是正确的方法,是否有更快的方法将图像与数据库匹配?

解决方法

有比 SIFT 更好的搜索图像的方法。由于我不知道您数据库中的图像,因此我只想告诉您我会怎么做而不是 SIFT 方法。

LBP(局部二进制模式)或 GLCM(灰度共生矩阵)可以加快您的解决方案。为数据库中的每幅图像计算统计数据(GLCM 或 LBPs)并将它们与索引一起存储。从现在开始,让我们称它们为图像标志。在搜索时,计算感兴趣标志图像和数据库图像标志之间的CCC(互相关系数)。按 CCC 按降序对它们进行排序。我只是假设您要匹配的图像具有相对较小的基线和相机角度差异。类似 SIFT 的方法不适用于高度旋转的图像。

有很多关于您的问题的论文。其中一些使用光流来查找图像。您应该找到最适合您情况的方法。