【发布时间】:2019-05-11 23:00:25
【问题描述】:
过去一周(或更长时间)的问候我一直在努力解决一个问题。
场景:
我正在开发一个应用程序,它允许专家使用提供的某物图像作为基础创建食谱。配方由感兴趣的领域组成。该程序的目的是允许非专家使用它,提供与原始图像相似的图像,并且软件会交叉检查这些不同的兴趣区域,从配方图像到提供的图像。
一个用例场景可能是纸币。专家会在一张好的钞票图片上选择一个真正的区域,然后用户会向软件提供需要检查的钞票图像。因此,照明以及捕获设备可能会有所不同。
我不想让你们深入研究比较钞票的本质,那是另一个需要解决的问题,我大部分时间都涵盖了它。
我的问题:
最初我将两张图片中的一张shrink 调整为较小的一张。 所以现在我们正在处理具有相同大小的图片。 (我实际上是对感兴趣的区域而不是整个图片进行缩小,但这不重要。)
我尝试并使用了不同的方法来比较这些部分,但由于图像的性质,每个部分都有其局限性。照明可能会有所不同,前提是图像可能存在某种污染等。
我尝试了什么:
使用RGB差异的简单图像相似度比较。
问题是图片可能完全不同,但颜色可能相似。所以我会在“完全”不同的钞票上获得很高的百分比。
RGB 图像上的 SSIM。
在所有渠道上的相似度百分比非常低。
使用 sobel 过滤器后的 SSIM。
再次低百分比的相似性。 我在 python 中使用了来自Scikit 和SSIM from OpenCV 的 SSIM
特征匹配Flann。
找不到使用检测到的匹配项来提取相似性的好方法。
基本上我猜我需要使用各种方法和算法来达到最佳效果。我的直觉告诉我,我需要将 RGB 比较结果与以下方法相结合:
- 执行某种形式的边缘检测,例如 sobel。
- 根据形状匹配或类似的东西比较结果。
我是一个图像分析新手,我也试图找到一种方法来比较所提供图像的索贝尔产品,使用来自openCV的mean and std calculations,但是我要么做错了,要么我得到的结果无论如何都没用.我计算了均值和标准差计算得出的向量之间的eucledian distance,但我无法使用这些结果,主要是因为我看不到它们在图像之间的关系。
我没有提供我使用的代码,首先是因为我废弃了其中的一些代码,其次是因为我不是在寻找代码解决方案,而是寻找方法或学习材料的方向。 (我已经阅读了大量的论文)。 最后,我不是试图检测相似的图像,而是给定两张图像,提取它们之间的相似性,试图绕过由照明或纸张失真等造成的微小差异。
最后我想说的是,我通过提供相同的图像两次测试了所有方法,我会得到 100% 的相似度,所以我并没有完全搞砸。
如果没有某种训练集来教软件什么是可接受的图像变体,我正在尝试的事情是否可行? (我也不知道这是否有意义:D)
【问题讨论】:
标签: opencv image-processing similarity scikit-image