Matlab - JPEG 压缩。霍夫曼编码

Matlab - JPEG Compression. Huffman Encoding

我一直在尝试在 Matlab 上实现 JPEG 压缩算法。 我唯一难以实现的部分是霍夫曼编码。我确实理解 DCT 对 8x8 矩阵的量化和曲折处理。一般来说,我也了解霍夫曼编码是如何工作的。 我不明白的是,在我有一个输出比特流和一个将连续比特转换为原始形式的字典之后,我该如何处理输出?我如何告诉计算机使用我为它创建的字典来翻译输出比特流? 此外,每个 8x8 矩阵都有自己的输出和字典。如何将所有这些输出组合成一个?因为归根结底,结果应该是图像。 我可能误解了某些步骤,在这种情况下,对于由此造成的任何混淆,我深表歉意。 非常感谢任何帮助!

编辑:对不起,我的问题似乎不够清楚。假设我使用 Matlabs 内置的霍夫曼函数(huffmanenco 和 huffmandict),我应该如何处理 huffmanenco returns 的值? 就霍夫曼编码在其他 IDE 和编程语言中的作用而言,我还不清楚如何处理输出字符串的部分。

哈夫曼编码有两种选择。

  1. 使用预制哈夫曼table。
  2. 对数据进行两次传递,第一次传递生成霍夫曼tables,第二次传递编码。

您不能为每个 MCU 使用不同的字典。

你说你有 运行 长度的编码值。您对这些进行霍夫曼编码并写入输出流。

编辑:

您需要确保 matlab huffman 编码器与 JPEG 兼容。霍夫曼编码有不同的方式。

您需要将来自编码器的位写入 JPEG 流。这意味着您需要一个位级别 I/O 例程。另外,您需要将压缩数据中的 FF 值转换为 JPEG 流中的 FF00 值。

我建议获取一份

http://www.amazon.com/Compressed-Image-File-Formats-JPEG/dp/0201604434/ref=pd_sim_14_1?ie=UTF8&dpID=41XJBED6RCL&dpSrc=sims&preST=_AC_UL160_SR127%2C160_&refRID=1DYN5VCQQP0N88E64P5Q

展示编码是如何完成的。