【问题标题】:Detecting image change by its binary size only仅通过二进制大小检测图像变化
【发布时间】:2021-12-30 21:27:05
【问题描述】:

图像文件的二进制大小会受到单个像素变化的影响。我很好奇比较两张照片的二进制大小是否足以检测到变化!会有假阳性结果吗?这个解决方案的可靠性如何?

我比较的图像是“PNG”格式,它们是来自同一来源的快照,因此质量和尺寸相同,但像素可能不同。

我知道像 pixelmatchimg-diff-js 这样的库,但它们对于我的目的来说太慢了,而且我不需要大量的差异发现;只需要 true/false 就足够了。

【问题讨论】:

  • 我想你说的是JPEG,其他文件格式的大小在修改图像时不太可能发生太大变化。但是,仍然有很多很多可能的图像具有相同的 JPEG 文件大小。大小远非有用的哈希值。哦,你可以用不同的质量设置保存相同的图像,并且会得到不同的尺寸,所以不同的尺寸甚至不能保证图像不同!
  • 图片为PNG格式,质量和尺寸不变。因此,我推断如果只有像素发生变化,则可以使用二进制内容比较来识别变化。
  • 对不起,我混淆了我的浏览器选项卡。不打算回答你的问题

标签: javascript image-processing comparison pixel binary-data


【解决方案1】:

假设 PNG 文件由同一系统获取和压缩,大多数文件的大小大致相同。一个小的变化可能会导致组成的图像变长或变短一个字节,但是会有很多很多不同的图像具有完全相同的文件大小。

但是要找到相同的图像,您不需要解压缩 PNG 文件,相同图像的压缩数据相同,不同图像的压缩数据不同。此外,只需逐字节比较文件即可告诉您它们是否包含相同的图像。

但是,这仅适用于相同的图像。如果我们谈论的是产生图像流的相机,并且您想知道场景中是否发生了变化,那么您仍然需要比较解压缩的图像。这是因为数据中会包含噪声,噪声会导致压缩后的文件不完全相同。而且您无法从压缩文件中判断更改是由于噪声还是更重要的更改。在这种情况下,您必须对图像进行解压缩,并将它们与一些容差进行比较。

【讨论】:

  • 图像是从 docker 环境中的浏览器获取的,所以理论上它们应该具有相同的大小。我将尝试这种方法,看看它是如何工作的。谢谢。
  • @cyrus-d 在这种情况下,噪音不起作用,比较压缩字节应该没问题。
  • ...除非编码器保存辅助tIME 块或eXIf 块。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-05-26
  • 1970-01-01
  • 2015-09-19
  • 2010-10-31
  • 2013-01-10
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多