如何验证两个图像是否具有相同的对象/内容?

信息处理 图片 opencv Python 物体识别
2022-02-02 15:50:27

我对计算机视觉领域真的很陌生,但这让我着迷!我现在面临着挑战,我正在寻找导师/顾问给我一些跟进。

我的项目是:从电子游戏封面的图片中,通过电子游戏封面数据库搜索该图片,如果匹配非常好,应用程序将返回一个包含电子游戏名称和平台名称的字符串。

问题示例:

  1. 拍一张类似这样的封面照片:

查询图片

  1. 在数据库中覆盖与此匹配的内容:

数据库映像

  1. 应用程序给出字符串:“Fifa 12 Playstation 2”

在我的初步研究中,我发现我应该在封面数据库中保存游戏名称、平台、封面的 URL 以及图像特征(关键点和描述符)。

我正在使用 SURF 特征检测器/提取器。

有些概念我仍然感到困惑......我不是在寻找相似之处吗?我只需要观察是否有某种好的关键点配对/匹配,对吧?因为在前面提到的示例图像中,我得到“img1 - 1087 个特征(查询图像),img2 - 1755 个特征 - 30 % - 相似度 - 321/333 个内点/匹配” 内点是什么?我对相似度的计算对我来说似乎是错误的......我会说这两张图片看起来有 70% 相似......

ps:我正在使用Python所以......

到目前为止的结果:

在此处输入图像描述

感谢您的时间和帮助。抱歉,如果我不能更好地解释我的问题/疑虑。

2个回答

我不是专家,但我想提供一些可以帮助您解决的建议。

  • 关于您提到/使用的方法,用于图像配准/拼接。您对结果的解释是错误的。计算特征匹配的百分比不是内点的意图,而是计算两幅图像中的对应特征点,可用于图像配准/拼接。Inlier 是算法在另一幅图像中找到对应特征点的特征点。算法未找到匹配的特征点称为异常值。更多的内点,更好的匹配。请记住,该算法有时可以匹配完全不相关图像的某些特征点(尝试在两个不相关的图像上运行您的方法)

  • 您可以使用您提到的方法来解决您的问题吗?是的,您可以为数据库中的每个图像使用内点数,并确定内点数最多的图像作为匹配项。如果您的数据库中不存在视频游戏的图片,您可以设置最少数量的内点。

  • 您可以探索解决此问题的其他方式/方法。

    • 探索更多关于您可以使用的功能。SURF 对某些应用程序来说效果很好,对某些应用程序来说效果不佳。您必须根据您的数据(图像数据库)进行选择。您可以使用 SIFT 进行检查,也可以将颜色直方图作为特征进行检查。

    • 您可以检查词袋以进行图像搜索。检查这个

    • 每当您向数据库添加新游戏时,每次向数据库添加新图像时,某些算法(例如 - 词袋)都需要重新计算码本,因此请明智地选择算法,因为随着图像数据库变得越来越大,成本计算量增加。

    • 还要考虑图像比例不同的行(即图像是数据库和搜索查询图像) SURF/SIFT 等一些功能是比例不变的,如果您选择使用其他任何功能,请记住这一点。

这些要点可能会帮助您做出决定,我希望我没有使您的生活复杂化:)

您可以尝试使用多种方法来解决问题。最初,作为预处理,您可以尝试提高您捕获的图像的对比度,以便提高 SURF 匹配性能。连同您使用的 SURF 点,您可以尝试确定您捕获的图像中写入的文本。您可以在此处此处找到一些资源

如果您可以从上图中确定文本中最重要的部分 - FIFA 12 和 PlayStation,如果与 SURF 比较的结果一起使用,我认为您可以成功完成您的项目。让我知道这是否有效。:)