使用 SIFT 将图像与数据库匹配

Match image with database using SIFT

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

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

每张图片:

  1. 与输入进行比较并使用flann.knnMatch

    找到两者之间匹配的关键点
  2. 使用 Lowe 的比率测试确定良好的关键点匹配

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

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

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

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

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

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