在JPEG中,DC和AC系数幅度是否不会被霍夫曼压缩?

时间:2017-03-22 01:11:14

标签: jpeg huffman-code image-compression

据我所读:

  1. 每块的DC系数,我们创建一个存储差分幅度类别的字节,如ITU-T T.81的附录F表F.1所示。存储差异的实际DC系数存储在此霍夫曼编码的幅度类别信息字节之后的原始位中。
  2. 类似于AC系数,

    1. 首先对AC系数进行编码以包含零游程长度。然后,我们对这些字节进行霍夫曼编码,其中高4位为零游程长度,低4位为AC系数幅度类别,如ITU-T T.81的附录F表F.2所示。包含零长度和幅度类别数据的霍夫曼编码字节后跟原始位,其中包含实际的AC系数幅度。
    2. 基本上我的问题是,在这两种情况下,为什么我们为系数存储未编码的未压缩原始位,但幅度类别信息是霍夫曼编码的?为什么?这毫无意义。

3 个答案:

答案 0 :(得分:2)

这是另一种看待它的方式。压缩可变长度的位值时,需要对位数和位本身进行编码。系数长度具有相对小的值范围,而系数具有宽范围的值。

如果你对Huffman编码系数值,代码长度可能非常大,表格难以管理。

JPEG然后Huffman编码系数的长度部分而不是系数本身。在此阶段,有一半数据被压缩。

答案 1 :(得分:1)

在这些情况下存储原始位是有意义的。

当您尝试压缩的数据足够接近'随机' (平坦/均匀的概率分布),然后熵编码不会给你很多编码增益。对于诸如霍夫曼编码器的简单熵编码方法尤其如此。在这种情况下,跳过熵编码将为您提供类似的压缩比,并将减少时间复杂度。

答案 2 :(得分:0)

我的观察方式是将DC差异量分类为这些“桶”,将这些值拆分为一个字节,该字节将始终压缩为最多4位(DC Huffman编码表最多编码12个可能的值),然后是由最多11位的字符串组成,其长度具有均匀的概率分布。

另一种选择是直接对完整的DC系数差使用霍夫曼编码。如果这些值不太可能重复,那么这样做会为每个代码产生不同的霍夫曼代码,不会产生太大的压缩增益。

我的猜测是,编写此规范的人们对某些图像数据集进行了实验测试,并得出12个幅度类别的压缩效果足够好。他们可能还测试了您所说的与数据格式无关的内容,并得出结论,他们的方法可以更好地压缩图像。到目前为止,我还没有阅读过支持该规范的论文,但是也许可以在此处找到该实验数据。


注意:当使用12位样本精度时,将有16个量级类别,但使用霍夫曼编码最多仍可以将其编码为4位。