将图像与其他图像进行视觉比较

时间:2018-04-01 06:48:17

标签: python bash image python-imaging-library pillow

首先:我知道很多时候都会问过类似的问题,但在我的案例中没有一个问题有帮助。

我需要一种方法,只能通过内容将一个图像与许多其他图像进行视觉比较。像EXIF这样的元数据甚至图像的大小都可能会发生变化。图像也可能略有不同(它们都是JPEG)压缩或非常轻微的JPEG伪像,几乎看不到人眼。我需要在没有任何图像的情况下进行这种比较,而是在存储时正在上传的图像。首选Python3或bash。

到目前为止我想到的是什么以及为什么它不起作用

  • diff / md5 / sha512 / etc. - 校验和测试不起作用,因为文件大小和图像大小可能不同。由于JPEG压缩,也可能会有非常轻微的像素变化。

  • ImageMagick的比较工具 - 不起作用,因为要比较的图像不会在本地保存。此外,它是一个巨大的数量(50k +),我需要经常执行此检查(一分钟内最多几次)

  • Imgdupes - 与上述相同
  • Python PIL的ImageChops差异方法 - 与上述相同
  • 将PIL直方图的散列值保存到数据库 - 这可能不够准确(因为不同的图像可能会使直方图太相似)并且精确检查不起作用,因为JPEG压缩导致的细微差别可以发生
  • 使用PIL获取每个像素的RGB值并将其散列到数据库中 - 这是一个很好的解决方案,但它不能用于不同的图像化,也不能用于轻微的压缩变化
  • 将每张图片缩放到相同的尺寸,然后执行上述操作 - 可能是迄今为止我想出的最好的图片,但它仍然不会考虑细微的变化。

到目前为止我想出的一切。我正在寻找的内容最好是将图像的可视内容转换为字符串然后能够将该字符串与另一个图像的字符串进行比较的工具或方法,获得非布尔结果(如同在视觉上一样)但技术上不同的图像将被报告为复制品。)

我想到的只是拍摄传入的照片,使用ImageMagick将其与全黑图像进行比较,保存该值,然后将该值与新图像进行比较。我完全不知道在实践中是否以及有多好。我可以想象这可能导致非重复报告为重复。

0 个答案:

没有答案