检测类似图像

时间:2010-09-24 00:23:11

标签: python image comparison media

  

可能重复:
  Image comparison algorithm

所以基本上我需要编写一个程序来检查2个图像是否相同。考虑以下2张图片:

http://i221.photobucket.com/albums/dd298/ramdeen32/starry_night.jpg

http://i221.photobucket.com/albums/dd298/ramdeen32/starry_night2.jpg

嗯,它们都是相同的图像,但我如何检查这些图像是否相同。我仅限于媒体功能。我现在能想到的只是宽度高度缩放并比较每个像素的RGB但是颜色不同吗?

我完全失去了这一点,任何帮助表示赞赏。

*请注意,这必须是在python中并使用(媒体库)

3 个答案:

答案 0 :(得分:4)

哇 - 这是一个很大的问题,而且有很多可能的解决方案。我担心我不是python专家,但我认为你的问题很有意思 - 所以我想提出一个方法,如果我对这个问题提出的话我会实施。

显然,你发布的两张图片实际上是非常不同的 - 所以你需要考虑“多少不同是相同的”,特别是在处理图像和考虑不同的图像格式和压缩等时。

无论如何,对于允许给定颜色值差异的解决方案(但不允许像素位于错误的位置),我会做类似以下的事情;

  1. 选择两张图片。

  2. 将最大的图像重新缩放到与第一个图像完全相同的高度和宽度(如果需要,甚至会扭曲图像)。

  3. 可能会对图像进行灰度调整,以使后续步骤更简单,而不会在效果方面损失太多。实际上,这里可能运行边缘检测也可以。

  4. 浏览两个图像中的每个像素,并将差异存储在每个RGB通道中,或仅存储灰度强度的差异。最终会得到一个图像大小的数组,注意两个图像上像素强度之间的差异。

  5. 现在,我不知道确切的值,但您可能会发现,如果您遍历数组,您可以看到两个图像中每个像素之间的差异是否相同(或几乎相同)所有像素都相同。也许迭代一次数组以找到两个图像中像素强度之间的平均差异,然后再次迭代图像以查看90%的差异是否落在某个阈值内(5%差异?)。

  6. 只是一个想法。当然,可能会有一些很好的功能,我不知道如何使这很容易,但我不会屏住呼吸!

答案 1 :(得分:1)

ImageMagick具有Python绑定和比较功能。它应该为你完成大部分工作,但我从未在Python中使用它。

答案 2 :(得分:0)

我认为约翰华兹华斯回答的第二步可能是最难的一个 - 在这里你正在处理图像的拉伸副本,但你是否也允许旋转,裁剪或以其他方式扭曲图像?如果是这样,您将需要一个特征匹配算法,例如在Hugin或其他全景创建软件中使用的算法。这将找到匹配的功能,扭曲以适应,然后您可以进行比较的其他阶段。理想情况下,你想要从照片中识别梵高的画作,甚至是杯子上的照片!人类很容易做到这一点,对于计算机来说,它需要更复杂的数学。