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



我在数十篇文章、科学论文和玩具实现中读到,JPEG 压缩的步骤大致如下

  1. 采用 8x8 DCT
  2. 除以量化矩阵
  3. 舍入为整数
  4. Run-length & Hufmann

然后反之亦然。到目前为止,我发现的有关该主题的所有内容中遗漏的是数据的大小和相应的序列化。

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

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

要阅读的第一手资料当然是ITU-T T.81标准文件。 看起来第一个谷歌链接指向付费墙..不过,它在W3网站上:https://www.w3.org/Graphics/JPEG/itu-t81.pdf

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

直流系数存储为差值,因此它们可以有 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的来源。

最新更新