过滤PNG文件格式的图像数据的目的是什么

信息处理 图像处理
2022-02-11 00:28:03

我正在阅读PNG 文件格式的 W3C 描述,特别是关于过滤过滤器功能:9

  • None(x) : 身份过滤器
  • Sub(x) : 将的像素值减去 x之前位置的像素值x
  • up(x):将的扫描线之前的扫描线中的像素值xx
  • Average(x):用 Su 和 Up 中描述的减去值的平均值减去x
  • Paeth(x) :在三个值处用 Paeth Predicator 的结果减去x

应用于图像的不同扫描线;过滤器功能应用于一行中的每个像素。

毫无根据地声明:

过滤转换 PNG 图像以提高压缩率

我的问题是为什么应用这些过滤器可以提高压缩率?

1个回答

这里使用词过滤有点用词不当。滤波操作通常与各种应用的波形处理相关联,例如发射器中的脉冲整形或接收器中的噪声抑制。图像过滤器也被使用,但主要不是为了更好地压缩图像文件。在您引用 PNG 文件格式标准的上下文中,此操作可能更恰当地命名为数据预处理。

一篇关于 PNG 文件格式的 Wikipedia 文章更明确地说明了过滤后的 PNG 图像数据的可压缩性:

以这种方式过滤的图像线通常比原始图像线更可压缩,特别是如果它与上面的线相似,因为与预测的差异通常会聚集在 0 附近,而不是分布在所有可能的图像值上。

为了进一步阐明PNG数据过滤对数据可压缩性的影响,我引用了LZ77算法文章

LZ77 算法通过将重复出现的数据替换为对未压缩数据流中较早存在的数据的单个副本的引用来实现压缩。

“聚集在 0 附近”的“与预测的差异”的可变性越小,“未压缩的数据流”中存在的“重复出现的数据”就越多。因此,更有效的是LZ77算法的工作。

LZ77 是 PNG 标准用于压缩的算法。

另请注意 W3C 对 PNG 文件格式的描述中的声明:

过滤器应用于字节,而不是像素,无论图像的位深度或颜色类型如何。

同样,Wikipedia 文章有助于更好地理解此声明 wrt 可压缩性:

以这种方式过滤的图像线通常比原始图像线更可压缩,特别是如果它与上面的线相似,因为与预测的差异通常会聚集在 0 附近,而不是分布在所有可能的图像值上。这在关联单独的行时尤其重要,因为 DEFLATE 不了解图像是 2D 实体,而只是将图像数据视为字节流。