我听说Jpeg使用的是Hufman代码。什么是霍夫曼代码?
答案 0 :(得分:9)
霍夫曼编码是一种采用符号(例如字节,DCT系数等)并用根据统计概率分配的可变长度代码对其进行编码的方法。经常使用的符号将使用仅占用几位的代码进行编码,而很少使用的符号则由需要更多位进行编码的符号表示。
JPEG文件最多包含4个霍夫曼表,用于定义这些可变长度代码(占1到16位)和代码值(8位字节)之间的映射。创建这些表通常涉及计算每个符号(DCT代码字)出现在图像中的频率,并相应地分配位串。但是,大多数JPEG编码器只使用JPEG标准中提供的霍夫曼表。一些编码器允许人们优化这些表,这意味着创建了一个最佳二叉树,它允许生成更有效的霍夫曼表。
请查看http://www.cs.duke.edu/csed/poop/huff/info/以获得更深入的解释
答案 1 :(得分:7)
完成david99world给出的答案:
霍夫曼编码只是jpeg压缩的最后一步。重要的压缩来自应用于DCT的量化矩阵。这是什么?嗯,DCT转换只是一种通过频率显示图像信息的方法。而不是像这样的像素值的矩阵:
你将有一个带有DCT系数的矩阵,显示频率信息,将大部分信息集中在左上角:
现在你有了DCT系数,它就是真正的压缩步骤,它将所有值除以基于人眼视觉的量化矩阵。该矩阵将使那些包含与人眼无关的信息的系数归零,并使重要的信息几乎相同。
为什么这一步对压缩很重要?因为现在你有很多零,霍夫曼编码会以小代码字组合大量的零,所以你节省了存储空间。
您可以尝试使用Matlab编程整个算法,您将更好地理解它。请注意,如果您多次应用Q矩阵,您将获得更多压缩(更多零),但也会有更低质量的图像。
我希望这能让你更清楚。