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

Posted

技术标签:

【中文标题】使用 SIFT 将图像与数据库匹配【英文标题】:Match image with database using SIFT 【发布时间】:2021-08-05 11:37:51 【问题描述】:

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

    提取输入图像的 SIFT 描述符

对于每张图片:

    使用flann.knnMatch与输入进行比较并找到两者之间的匹配关键点

    使用 Lowe 比率测试识别良好的关键点匹配

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

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

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

【问题讨论】:

有一些关于分层关键点匹配的论文,公平的。 看看谷歌“关键点匹配数据库复杂性”的一些点击,恕我直言,它们看起来很有希望。 【参考方案1】:

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

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

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

【讨论】:

以上是关于使用 SIFT 将图像与数据库匹配的主要内容,如果未能解决你的问题,请参考以下文章

匹配的 SIFT 关键点的坐标

OpenCV+Python特征提取算法与图像描述符之SIFT / SURF / ORB

OpenCV中的特征匹配(Feature Matching)

SIFT特征描述与检测的Matlab实现

SIFT特征描述与检测的Matlab实现

SIFT特征描述与检测的Matlab实现