我有自己的JPEG实现。它只使用了Huffman,直到我发现了ANS,我也实现了ANS。我使用这两种算法压缩的测试图像产生了以下压缩比:
霍夫曼: 10.48x
ANS: 10.56x
事实上,ANS被证明是更好的,但只是稍微好一点。我不是压缩专家,但我读到ANS应该比哈夫曼编码更好,比如算术编码,基于这个https://en.wikipedia.org/wiki/JPEG的应该是5-7%。在我的例子中,改进只有1%。这是我应该预料到的吗?
发布于 2018-01-06 00:21:46
JPEG标准指定了算术编码器(QM-编码器),但实现通常不支持它。这使你的压缩比Huffman好10%左右。使用jpegtran,您可以在不同的编码方法之间进行转码。
至于为什么用自定义的ANS后端替换默认的Huffman没有太多帮助-可能是建模,可能是头部的大小与有效负载的大小,也可能是其他的东西。
用于8位输入的DCT系数的大小可以高达+-2048 (DC),并且这些系数被霍夫曼编码为8位RRRRSSSS符号。只对系数的大小(4位SSSS部分)进行哈夫曼编码,并在不建模的情况下存储低阶位。如果只有编码器被替换,而其他部分没有变化,那么任何改进都仅限于霍夫曼编码部分。
此外,更精确的编码器需要更精确的概率。发送ANS报头总是要比等效的规范发送的霍夫曼码长花费更多的成本。如果没有足够的数据来抵消报头的大小,结果可能是净损失。
还有一个与“数据不足”相反的问题。如果输入数据不是均匀分布的,概率可能会混淆在一起,这给编码效率带来了硬限制。QM-编码器是自适应的,没有这个问题。在这种情况下,静态编码器需要更频繁地重新启动流。
https://stackoverflow.com/questions/48112920
复制相似问题