Encode 我应该对单个帧、该帧的颜色通道还是8x8宏块进行编码?

Encode 我应该对单个帧、该帧的颜色通道还是8x8宏块进行编码?,encode,huffman-code,dct,Encode,Huffman Code,Dct,关于几天前我提出的关于 我有DCT、量化、Z字形和RLE步骤,这些步骤似乎输出了合理的值,所以我现在需要知道我应该在整个帧、该帧的颜色通道还是在8x8宏块级别上运行哈夫曼编码?给出一个明确的答案很难,因为它实际上取决于您的数据,以及你希望解码器有多复杂 您可能不想对流中所有不同类型的数据使用单一的哈夫曼编码,因为使用的符号不同,并且以不同的频率出现(即交流分量与直流分量不同,如果您使用了非RGB颜色空间,亮度与色度也不相同)。JPEG方法是对不同的数据项使用不同的表,但数据在流中是交错的(因此仍

关于几天前我提出的关于


我有DCT、量化、Z字形和RLE步骤,这些步骤似乎输出了合理的值,所以我现在需要知道我应该在整个帧、该帧的颜色通道还是在8x8宏块级别上运行哈夫曼编码?

给出一个明确的答案很难,因为它实际上取决于您的数据,以及你希望解码器有多复杂

您可能不想对流中所有不同类型的数据使用单一的哈夫曼编码,因为使用的符号不同,并且以不同的频率出现(即交流分量与直流分量不同,如果您使用了非RGB颜色空间,亮度与色度也不相同)。JPEG方法是对不同的数据项使用不同的表,但数据在流中是交错的(因此仍然按顺序解析)。这些表不一定是为数据动态计算的,而是通常只使用默认值


除此之外,我不认为如何分解或交错数据会有多大区别。

如果可以,请使用范围编码器。它们总是比哈夫曼编码器提供更好的结果。你为什么不看看现有的编解码器(如JPEG)做什么呢?谢谢你的评论。在我查找之前,我还没有听说过距离编码器。我将不得不在这个项目中使用哈夫曼,因为我必须模拟一些使用哈夫曼编码的内部软件所使用的编码/解码过程。@OliCharlesworth我已经完成了这项工作,它让我达到了这一点。但是很难弄清楚哈夫曼步骤的范围。i、 e.我是否应该对整个帧的运行级别值进行调整,或者一次只调整一个通道或一个8x8块。@我所读取的FUZxxl范围编码是算术编码的子集?正如我提到的,我使用的哈夫曼系统使用了超快速的查找表,这在我的使用场景中比最终结果是否完美像素更重要。谢谢你的建议,尽管非常感谢。谢谢你的回复。我已经准备好使用哈夫曼查找表集,这是我试图模拟的系统。我的问题是知道应用它们的范围,即基于整个帧运行级对或单通道生成huff代码,或生成DCT范围(8x8宏块级别)的代码。希望这是有道理的。我认为这无关紧要。至少,不会影响输出的大小——除非出于某种原因引入额外的填充,我想不出你为什么要这样做,除非你添加了用于错误恢复或其他的同步点。否则,这只是一个你希望你的数据按什么顺序排列的问题。不,我没有引入填充或额外的数据。我目前在宏块级别生成运行级别对,因此对于后续8x8块,我可能有[4,1]、[10,45]、[12,0]、,。。。在区块1和区块2中:[6,1],[5,13],[18,0],。。。所以知道应用哈夫曼的范围也会对我生成的概率产生影响。请注意,组合两个块运行级别对会产生不同的概率[4+6/55,1],[10/55,45],[5/55,13],[30/55,0],…您说过您有表。如果你正在生成它们,我无法想象在每个块的基础上这样做会有效率,因为需要以某种方式实际存储哈夫曼表,除非你运行某种自适应方案,除非每个块都有完全不同的符号频率,这将向我表明,你的压缩首先被破坏,因为使数据可压缩是量化的目标。简单的答案是,你应该使用这些表来编码数据,这些数据的频率与它生成的频率非常相似。其他任何事情都不可能产生好的结果。除此之外,您还可以按照自己的喜好组织数据。