【问题标题】:java.util.zip.CRC32 comparing image filesjava.util.zip.CRC32 比较图像文件
【发布时间】:2012-10-01 12:19:39
【问题描述】:

有什么建议(一段代码)可以帮助我理解如何比较两个不同的图像文件是否相同的概念?

提前致谢。

编辑: 我的意思是,例如,我应该通过文件大小检查来检查 CRC32(我不知道该怎么做)。那么这意味着它们是相同的图片......

EDIT2:当我说图像相同时,我的意思是图像在用户看来完全一样。

【问题讨论】:

  • 如果你有有损压缩,你需要定义你所说的“相同” 两个想象实际上可以与人眼相同,但一个可以是另一个的一半。
  • 是的,图像文件的 CRC 只会告诉您该文件是否可能与同一文件的另一个副本相同。它不会告诉你里面的图像是否可能相同,文件是在哪里单独创建的。
  • @Peter 请查看已编辑的问题
  • 如果您使用 CRC32 检查,您正在检查它们是否逐字节完全相同。这意味着包含相同信息且看起来相同的两张图片不会是“相同的”。
  • CRC32 会给你一个不同的数字,即使附加到图像的元数据的顺序不同(你甚至看不到)

标签: java crc32 image-comparison


【解决方案1】:

您可以使用 CRC32 对任何文件求和。但是,如果您想确定两个图像是否相同,您必须确定两个看起来相同的图像是否相同。例如以下图片都有不同的尺寸,更不用说不同的 CRC32 数字了。

【讨论】:

  • 谢谢彼得,我一开始肯定已经给出了这个细节;简而言之,哪张图片对最终用户来说是一样的,对我来说是一样的!所以你提供的那些图像对我来说是一样的:)因此我理解的是 CRC32 是不够的?那么,您有什么建议可以满足我对案件的需求?谢谢。
  • 你需要将它们转换成通用格式(通常是未压缩的位图)并比较像素,看看它们是否相似。例如当这个数字为 0 时,你在颜色 sqrt(sum(x1 - x2)) 中取距离,它们实际上是相同的。如果数字非常小(您必须决定那是什么),它们是相同的,当数字很大时,它们就不同了。会有一个难以分类的灰色区域。您可能还需要转换图像,例如缩放和裁剪,例如如果图像有一个额外的空白行,即使它的大小不同,它也是相同的。 ;)
  • 要比较图像以查看它们是否“看起来”相同,您必须使用相对复杂的信号处理技术。 dsp.stackexchange.com 是您进一步提问的地方。
【解决方案2】:

zip 条目的校验和有以下含义:不同时文件不同。

CRC32 类允许您自己计算字节的校验和。

为了有效地检查两个图像是否几乎相等,有很多means,例如制作一个小的 8x8 图像并比较颜色值的差异。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-15
    • 1970-01-01
    • 1970-01-01
    • 2011-01-09
    • 1970-01-01
    相关资源
    最近更新 更多