【问题标题】:Why is the GIF format not the most compact format for natural images?为什么 GIF 格式不是自然图像最紧凑的格式?
【发布时间】:2012-05-26 20:26:21
【问题描述】:

我们的样卷试卷中的完整问题:

通过突出显示算法的相关部分来解释为什么 GIF 格式不是用于表示具有自然内容的图像的最紧凑格式。

我知道使用 GIF 不太适合自然图像,因为它仅限于 256 种颜色,但为什么不能提供足够紧凑的文件呢?如果有的话,你会认为更少的颜色意味着更小的文件大小。

在我们的笔记中,我们被告知使用的 LZW 压缩比 Huffman 更好,原因有几个(包括它只通过一次的事实)。霍夫曼编码/压缩会导致文件更小吗?

According to Wikipedia,PNG 格式提供比 GIF 更好的压缩。 LZW 很可能是罪魁祸首,但是为什么?哪些“算法部分”支持它“不是表示图像的最紧凑格式”的论点,尤其是对于自然图像?

【问题讨论】:

  • 如果您要将 8 位 GIF 与 24 位 PNG 进行比较,那不公平吗?

标签: image algorithm compression gif


【解决方案1】:

我不太确定 LZW 编码的细节,但我相信它通过构建公共位序列字典(每次出现时都必须相同)来压缩数据。这意味着线条图等压缩得非常好,因为它们包含许多“纯”颜色区域(即相同的像素颜色重复相同,连续多次。)如果你有一个100 个白色像素的区域,您可以通过说它是“连续 100 个相同白色像素”来压缩它。

“自然图像”,例如由数码相机产生的图像,不包含纯色区域。一张蓝色墙壁的照片实际上会包含许多不同深浅的蓝色——相机噪点至少会使每个像素与其相邻像素略有不同。 LZW 将无法找到许多重复序列,因此无法对数据进行太多压缩。


JPEG 的文件大小比 GIF 更小,因为它不怕丢失图片中的一些信息 - 它是有损的。诀窍在于,JPG 的设计目的是只丢失人类无论如何都不好看到的信息。(见注 1。)我们擅长在图片的“平滑”区域看到伪影,但不是很好看到图像中急剧过渡附近的伪影。

它也是一种完全不同的压缩算法,基于将图像编码为二维频域表示(数字信号处理类型的东西),而不是试图找到重复的比特子序列。


注 1:JPEG 是一种“感知”压缩方法。它发挥了人类视觉的优势和劣势 - “平滑”颜色区域的小错误很容易看到,但图像“繁忙”区域的小错误很容易在细节中被忽略。

MP3 音频的工作原理相同。它丢弃了我们听不到的信息;例如,如果有一个响亮的声音,然后是一个安静的声音,我们通常听不到安静的声音 - 我们的耳朵已经被大声的声音淹没了,并且不会听到它之后的安静声音。 MP3 编码抛弃了安静的声音,专注于正确处理响亮的声音。


注2:

我才意识到我实际上并没有解决 PNG。

PNG 比 GIF 实现了更好的压缩,因为它在无损压缩之前应用了预过滤步骤(即DEFLATE,大致相当于 LZW。)请参阅Wikipedia's explanation of PNG filtering。

这个想法是相邻像素可能彼此略有不同(由于噪声),但它们将大致具有相同的值。

假设我们有数据:

132 133 134 135 136 137 138

LZW 看着这个并说“这些值都是不同的;我无法压缩它。”

PNG 根据值之间的差异来看待这一点:

132 +1 +1 +1 +1 +1 +1 +1

即第一个数据元素为132,后面的元素是1相加得到的。 这个表示用 LZW 压缩得很好。

【讨论】:

  • 谢谢。注 2 中的“此表示与 LZW 压缩得相当好”是什么意思?你真的是说在一起吗?有趣的是,论文的下一个问题是关于 JPG 如何利用人类视觉系统。
  • @AdamLynch:该技术称为增量编码。 (参见:delta 脉冲编码调制。)这个想法是可能值的范围可能是0-255(8 位),但信号可能只会缓慢变化。如果相邻值之间的最大 difference 仅为 0-15,您可以将 difference 编码为每个值 4 位。当我说“这压缩得更好”时,我的意思是 delta 编码更有效,因此 LZW(或 DEFLATE)必须压缩的位数更少。
猜你喜欢
  • 1970-01-01
  • 2014-02-19
  • 2018-05-04
  • 2013-05-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-01-31
  • 1970-01-01
相关资源
最近更新 更多