霍夫曼编码是一种采用符号(例如字节,DCT系数等)并使用根据统计概率分配的可变长度代码对其进行编码的方法.经常使用的符号将使用仅占用几个比特的代码进行编码,而很少使用的符号由需要更多比特来编码的符号表示.
JPEG文件包含多达4个霍夫曼表,用于定义这些可变长度代码(占用1到16位)和代码值(8位字节)之间的映射.创建这些表通常涉及计算每个符号(DCT代码字)出现在图像中的频率,并相应地分配位串.但是,大多数JPEG编码器只使用JPEG标准中提供的霍夫曼表.一些编码器允许人们优化这些表,这意味着创建了一个最佳二叉树,它允许生成更有效的霍夫曼表.
请查看http://www.cs.duke.edu/csed/poop/huff/info/以获得更深入的解释
只是为了完成david99world给出的答案:
霍夫曼编码只是jpeg压缩的最后一步.重要的压缩来自应用于DCT 的量化矩阵.这是什么?嗯,DCT转换只是一种通过频率显示图像信息的方法.而不是像这样的像素值的矩阵:

你将有一个带有DCT系数的矩阵,显示频率信息,将大部分信息集中在左上角:

现在你有了DCT系数,它就是真正的压缩步骤,它将所有值除以基于人眼视觉的量化矩阵.该矩阵将使那些包含与人眼无关的信息的系数归零,并使重要的信息几乎相同.

为什么这一步对压缩很重要?因为现在你有很多零,所以霍夫曼编码会用很小的代码字组合大量的零,所以你节省了存储空间.

您可以尝试使用Matlab编程整个算法,您将更好地理解它.请注意,如果多次应用Q矩阵,则会有更多压缩(更多零),但质量图像质量也会更低.
我希望这能让你更清楚.
| 归档时间: |
|
| 查看次数: |
4024 次 |
| 最近记录: |