如何在 JPEG 中序列化量化 DCT 系数?

How are quantized DCT coeffiecients serialised in JPEG?

我看了几十篇文章、科学论文和玩具实现,JPEG压缩的步骤大致如下

  1. 采用 8x8 DCT
  2. 除以量化矩阵
  3. 四舍五入为整数
  4. 运行-长度 & Hufmann

然后反过来也差不多。到目前为止,我发现的关于该主题的所有内容都遗漏了数据量级和相应的序列化。

似乎隐含地假设所有系数都存储为无符号字节。但是,据我了解,DC系数在0-255范围内,而AC系数可以为负。 AC 系数是否在 ±255、±127 或其他范围内?

以紧凑的方式存储这些系数的常用方法是什么?

阅读的第一手资料当然是ITU-T T.81标准文档。 看起来第一个 Google link 通向付费专区.. 它在 w3 站点上,但是:https://www.w3.org/Graphics/JPEG/itu-t81.pdf

  1. 取 8 位输入样本 (0..255)
  2. 减去 128 (-128..127)
  3. 执行 N*N fDCT,其中 N=8
  4. 输出可以有 log2(N)+8 位 = 11 位 (-1024..1023)

DC系数存储为差值,因此它们可以有12位。

编码过程取决于您是顺序扫描还是逐行扫描。编码过程的细节太复杂了,不适合在这里回答。

强烈推荐这本书:

https://www.amazon.com/Compressed-Image-File-Formats-JPEG/dp/0201604434/ref=sr_1_2?ie=UTF8&qid=1531091178&sr=8-2&keywords=JPEG&dpID=5168QFRTslL&preST=_SX258_BO1,204,203,200_QL70_&dpSrc=srch

据我所知,这是唯一用通俗易懂的语言对 JPEG 进行端到端解释的来源。