【问题标题】:Jpeg encoding techniqueJpeg编码技术
【发布时间】:2025-12-20 04:25:07
【问题描述】:

我听说 Jpeg 使用 Hufman 代码。什么是霍夫曼码?

【问题讨论】:

  • 那是霍夫曼 编码。如果你用谷歌搜索,第一个答案会让你找到Wikipedia's page

标签: jpeg huffman-code


【解决方案1】:

霍夫曼编码是一种采用符号(例如字节、DCT 系数等)并使用根据统计概率分配的可变长度代码对它们进行编码的方法。经常使用的符号将使用仅占用几位的代码进行编码,而很少使用的符号将使用需要更多位进行编码的符号来表示。

一个 JPEG 文件包含多达 4 个霍夫曼表,这些表定义了这些可变长度代码(占用 1 到 16 位)和代码值(一个 8 位字节)之间的映射。创建这些表通常涉及计算每个符号(DCT 码字)在图像中出现的频率,并相应地分配位串。但是,大多数 JPEG 编码器只是使用 JPEG 标准中提供的霍夫曼表。一些编码器允许优化这些表,这意味着创建了一个最佳二叉树,从而可以生成更有效的霍夫曼表。

查看http://www.cs.duke.edu/csed/poop/huff/info/ 以获得更深入的解释

【讨论】:

  • 非常感谢,还有一个问题,你提到的DCT系数是什么?
【解决方案2】:

只是为了完成david99world给出的答案:

霍夫曼编码只是 jpeg 压缩的最后一步。重要的压缩来自应用于 DCT 的 量化矩阵。这是什么?好吧,DCT 变换只是一种按频率显示图像信息的方法。而不是像这样具有像素值的矩阵:

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

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

为什么这一步对压缩很重要?因为现在您有很多零,霍夫曼编码会将大量零分组为小的代码字,因此您可以节省存储内存。

您可以尝试在 Matlab 中编写整个算法,您会更好地理解它。请注意,如果多次应用 Q 矩阵,您将获得更多压缩(更多零),但图像质量也会降低。

我希望这能让你更清楚。

【讨论】: