有没有简单的方法来测试两个PNG的相等性?

Mas*_*ler 6 delphi algorithm png

我有一堆PNG图像,我正在寻找一种识别重复的方法.通过重复,我的意思是,具体地说,两个PNG文件的未压缩图像数据是相同的,不一定是其文件相同.这意味着我不能像比较CRC哈希值那样简单.

我认为这可以实际上可靠地完成,因为PNG使用无损压缩,但我担心速度.我知道我可以通过首先测试相同尺寸来稍微减少一些东西,但是当实际比较图像时,有没有什么方法可以合理有效地做到这一点?(也就是说,比"双重循环检查像素值相互比较"的暴力方法更快?)

Chr*_*heD 13

  1. 按相同图像尺寸(宽度和高度)过滤
  2. 打开文件
  3. hash uncompressed contents(md5可能会这样做)
  4. 商店哈希

  5. 比较哈希以找到相同的哈希

  • 我认为这是一个可靠的答案.在滤镜之后,对一些随机点进行一些快速像素采样/比较也可能会清除一些图像. (3认同)

Chr*_*ris 6

为了检查相等性而不是循环遍历所有像素,从中间开始向外工作可能是值得的.大多数图片都有中间的主题意味着更多的功能数据位于此处.基本上,通过这种方式找出两张图片是否不同会更快.


小智 3

除非您期望有大量重复项,否则平均而言,在确定两个文件不同之前您不会比较许多像素。特别是如果您测试的每个像素距离已测试的像素较远。这将有助于处理具有相同背景颜色的线条艺术文件。

另外,你必须有多准确?例如,如果以这种方式测试的 10 个像素相同,您可以安全地得出图像相同的结论吗?10 个 RGB 像素 = 240 位,因此与随机图像的错误匹配率应该是 2^240 中的 1 = 10^72 中的 1!