Compression 哈夫曼vs.安

Compression 哈夫曼vs.安,compression,huffman-code,image-compression,data-compression,Compression,Huffman Code,Image Compression,Data Compression,我有自己的JPEG实现。它只使用了Huffman,直到我发现我也实现了ANS。使用这两种算法压缩的测试图像得到了以下压缩比: 哈夫曼:10.48倍 答复:10.56x 事实证明,ANS确实更好,但只是稍微好一点。我不是压缩专家,但读到ANS应该比哈夫曼式的算术编码更好,基于这一点的应该是5-7%。在我的情况下,改善只有1%。这是我应该期待的吗?JPEG标准指定了算术编码器(QM编码器),但实现通常不支持它。与哈夫曼相比,这使压缩效果提高了约10%。使用jpegtran,您可以在不同的编码方法之间

我有自己的JPEG实现。它只使用了Huffman,直到我发现我也实现了ANS。使用这两种算法压缩的测试图像得到了以下压缩比:

哈夫曼:10.48倍

答复:10.56x


事实证明,ANS确实更好,但只是稍微好一点。我不是压缩专家,但读到ANS应该比哈夫曼式的算术编码更好,基于这一点的应该是5-7%。在我的情况下,改善只有1%。这是我应该期待的吗?

JPEG标准指定了算术编码器(QM编码器),但实现通常不支持它。与哈夫曼相比,这使压缩效果提高了约10%。使用jpegtran,您可以在不同的编码方法之间进行转码

至于为什么用自定义ANS后端替换默认的Huffman没有多大帮助,可能是建模,可能是头的大小与有效负载,可能是其他原因

8位输入的DCT系数的大小可以高达+-2048(DC),并且这些系数被哈夫曼编码为8位rrsss符号。只有系数的大小(4位SSSS部分)得到哈夫曼编码,低阶位在不建模的情况下存储。如果只更换了编码器,而没有其他变化,那么任何改进都仅限于哈夫曼编码部分

此外,更精确的编码器需要更精确的概率。传输ANS报头的成本总是高于等效的规范传输哈夫曼码长度。如果没有足够的数据来抵消标头的大小,结果可能是净损失


还有一个与“数据不足”相反的问题。如果输入数据分布不一致,则概率可能会混淆在一起,这给编码效率带来了硬限制。QM编码器是自适应的,没有这个问题。在这种情况下,静态编码器需要更频繁地重新启动流。

JPEG标准指定了算术编码器(QM编码器),但实现通常不支持它。与哈夫曼相比,这使压缩效果提高了约10%。使用jpegtran,您可以在不同的编码方法之间进行转码

至于为什么用自定义ANS后端替换默认的Huffman没有多大帮助,可能是建模,可能是头的大小与有效负载,可能是其他原因

8位输入的DCT系数的大小可以高达+-2048(DC),并且这些系数被哈夫曼编码为8位rrsss符号。只有系数的大小(4位SSSS部分)得到哈夫曼编码,低阶位在不建模的情况下存储。如果只更换了编码器,而没有其他变化,那么任何改进都仅限于哈夫曼编码部分

此外,更精确的编码器需要更精确的概率。传输ANS报头的成本总是高于等效的规范传输哈夫曼码长度。如果没有足够的数据来抵消标头的大小,结果可能是净损失

还有一个与“数据不足”相反的问题。如果输入数据分布不一致,则概率可能会混淆在一起,这给编码效率带来了硬限制。QM编码器是自适应的,没有这个问题。在这种情况下,静态编码器需要更频繁地重新启动流