Image 如何在OpenCV python或JavaCV中比较两个图像并检查两个图像是否具有相同的对象

Image 如何在OpenCV python或JavaCV中比较两个图像并检查两个图像是否具有相同的对象,image,python-2.7,opencv,javacv,feature-detection,Image,Python 2.7,Opencv,Javacv,Feature Detection,我正在从事一个功能匹配项目,我正在使用OpenCV Python作为开发应用程序的工具 根据项目要求,我的数据库中有一些物体的图像,如玻璃、球等,以及它们的描述。用户可以将图像发送到应用程序的后端,后端负责将发送的图像与数据库中存在的图像进行匹配,并将图像描述发送给用户 我对上述情景做了一些研究。不幸的是,我仍然找不到一种算法来匹配两幅图像,并确定它们是否匹配 如果有人有这种算法,请发给我。(我必须使用OpenCV python或JavaCV) 谢谢我想你说的是基于内容的图像检索 互联网上有很多

我正在从事一个功能匹配项目,我正在使用OpenCV Python作为开发应用程序的工具

根据项目要求,我的数据库中有一些物体的图像,如玻璃、球等,以及它们的描述。用户可以将图像发送到应用程序的后端,后端负责将发送的图像与数据库中存在的图像进行匹配,并将图像描述发送给用户

我对上述情景做了一些研究。不幸的是,我仍然找不到一种算法来匹配两幅图像,并确定它们是否匹配

如果有人有这种算法,请发给我。(我必须使用OpenCV python或JavaCV)


谢谢

我想你说的是基于内容的图像检索

互联网上有很多研究论文。请根据您的需要选择其中任何一篇,并充分利用它们。根据您的应用程序选择标准,如基于纹理、基于颜色、基于形状的图像检索(在互联网上进行图像检索以提高速度时,这是最好的选择)

所以您需要python实现,我建议您阅读本书的第7、8章。它包含了你正在寻找的代码的工作示例


你可能会发现一个有用的问题:

这是当今计算机视觉中一个非常常见的问题。一个简单的解决方案其实很简单。但是有很多更复杂的解决方案的变体

简单解
  • 基于特征检测器和描述符。 这里的想法是,您可以获得一组关键点及其描述符(搜索SIFT/SURF/ORB)。然后,您可以使用OpenCV中提供的工具轻松找到匹配项。您可以将查询图像中的关键点与训练数据集中的所有关键点进行匹配。由于存在典型的异常值,您需要添加一种健壮的匹配技术,如RanSaC。所有这些都是OpenCV的一部分
  • 字袋模型 如果只需要与查询图像相同的图像,可以使用最近邻搜索。请注意,OpenCV附带了更快的近似近邻(ANN)算法。或者您可以使用BruteForceMatcher
  • 高级解决方案 如果您有许多图像(many==100万),您可以查看对位置敏感的散列(参见Dean等人,100000对象类别)

    如果你确实使用了大量的视觉词汇,那么你应该建立一个倒排索引

    与弓相比,查看Fisher向量以提高精度

    暗示 从使用视觉文字开始。这里有一些关于如何训练字典的教程 模型

    培训:

  • 从训练图像的子集中提取局部特征(只需选择SIFT,因为OpenCV是非常模块化的,所以您可以轻松地进行更改)。首先是功能,然后是它们。网上有很多关于这方面的教程
  • 火车字典。参考Python中的示例实现(
    opencv\u source\u code/samples/python2/find\u obj.py
  • 计算每个训练图像的直方图。(也在上一步的弓文档中)
  • 将上述步骤中的图像描述符放入一个文件夹中
  • 查询:

  • 计算查询图像上的特征
  • 使用培训中的字典为查询图像构建弓形直方图
  • 使用该功能查找最近的邻居