JPEG 中的 DC 和 AC 系数幅度不是霍夫曼压缩的吗?
Are DC and AC coefficient magnitude not huffman compressed in JPEG?
据我了解:
- 每个块的直流系数,我们创建一个字节存储差异幅度类别,如 ITU-T T.81 的附件 F Table F.1 所示。存储差异的实际 DC 系数存储在 原始位 中,跟在这个霍夫曼编码幅度类别信息字节之后。
AC系数类似,
- AC 系数首先被编码为包含零 运行 长度。然后,我们对这些字节进行霍夫曼编码,其中高 4 位是零 运行 长度,低 4 位是 AC 系数幅度类别,如 ITU-T T 的附件 F Table F.2 所示。 81.包含零长度和幅度类别数据的霍夫曼编码字节后跟包含实际 AC 系数幅度的 原始位 。
我的问题基本上是这样的,在这两种情况下,为什么我们为系数存储未编码未压缩的原始位,但幅度类别信息是霍夫曼编码的?为什么?这没有意义。
在这些情况下存储原始位确实有意义。
当您尝试压缩的数据足够接近 'random'(flat/uniform 概率分布)时,熵编码不会给您带来太多编码增益。这对于简单的熵编码方法尤其如此,例如霍夫曼编码器。在这种情况下,跳过熵编码会给你类似的压缩率,并会降低时间复杂度。
这是另一种看待它的方式。当您压缩可变长度的位值时,您需要对位数和位本身进行编码。系数长度具有相对较小的取值范围,而系数具有较宽的取值范围。
如果您要对系数值进行霍夫曼编码,代码长度可能会非常长,并且表格难以管理。
JPEG 然后霍夫曼编码系数的长度部分而不是系数本身。一半的数据在这个阶段被压缩。
我的看法是,将 DC 差异幅度分类到这些“桶”中,将这些值拆分为一个字节,该字节将始终压缩为最多 4 位(DC Huffman 编码表最多编码 12 个可能的值) , 后跟最多 11 位的字符串,其长度具有均匀的概率分布。
另一种选择可能是直接对完整的 DC 系数差异使用霍夫曼编码。如果这些值不太可能重复,这样做会为每个值生成不同的霍夫曼代码,这不会产生太多压缩增益。
我的猜测是编写规范的人对一些图像数据集进行了实验测试,并得出结论,12 个震级类别产生了足够好的压缩。他们可能还测试了您所说的关于数据格式不可知论的内容,并得出结论,他们的方法可以更好地压缩图像。到目前为止,我还没有阅读支持该规范的论文,但也许可以在那里找到这个实验数据。
注意:当使用12位采样精度时,会有16个幅度类别,但它们仍然可以使用最多4位使用霍夫曼编码进行编码。
据我了解:
- 每个块的直流系数,我们创建一个字节存储差异幅度类别,如 ITU-T T.81 的附件 F Table F.1 所示。存储差异的实际 DC 系数存储在 原始位 中,跟在这个霍夫曼编码幅度类别信息字节之后。
AC系数类似,
- AC 系数首先被编码为包含零 运行 长度。然后,我们对这些字节进行霍夫曼编码,其中高 4 位是零 运行 长度,低 4 位是 AC 系数幅度类别,如 ITU-T T 的附件 F Table F.2 所示。 81.包含零长度和幅度类别数据的霍夫曼编码字节后跟包含实际 AC 系数幅度的 原始位 。
我的问题基本上是这样的,在这两种情况下,为什么我们为系数存储未编码未压缩的原始位,但幅度类别信息是霍夫曼编码的?为什么?这没有意义。
在这些情况下存储原始位确实有意义。
当您尝试压缩的数据足够接近 'random'(flat/uniform 概率分布)时,熵编码不会给您带来太多编码增益。这对于简单的熵编码方法尤其如此,例如霍夫曼编码器。在这种情况下,跳过熵编码会给你类似的压缩率,并会降低时间复杂度。
这是另一种看待它的方式。当您压缩可变长度的位值时,您需要对位数和位本身进行编码。系数长度具有相对较小的取值范围,而系数具有较宽的取值范围。
如果您要对系数值进行霍夫曼编码,代码长度可能会非常长,并且表格难以管理。
JPEG 然后霍夫曼编码系数的长度部分而不是系数本身。一半的数据在这个阶段被压缩。
我的看法是,将 DC 差异幅度分类到这些“桶”中,将这些值拆分为一个字节,该字节将始终压缩为最多 4 位(DC Huffman 编码表最多编码 12 个可能的值) , 后跟最多 11 位的字符串,其长度具有均匀的概率分布。
另一种选择可能是直接对完整的 DC 系数差异使用霍夫曼编码。如果这些值不太可能重复,这样做会为每个值生成不同的霍夫曼代码,这不会产生太多压缩增益。
我的猜测是编写规范的人对一些图像数据集进行了实验测试,并得出结论,12 个震级类别产生了足够好的压缩。他们可能还测试了您所说的关于数据格式不可知论的内容,并得出结论,他们的方法可以更好地压缩图像。到目前为止,我还没有阅读支持该规范的论文,但也许可以在那里找到这个实验数据。
注意:当使用12位采样精度时,会有16个幅度类别,但它们仍然可以使用最多4位使用霍夫曼编码进行编码。