digital_video_introduction的一节中讲解 视频编解码器是如何工作的?提到了 DCT,此前没有太关注,最近有对相关的原理进行学习了解,本文对 DCT 离散余弦变换相关的内容进行整理总结。
JPEG 使用的是 二维 DCT,因为它处理的是图像(二维信号),理解二维 DCT 的基础是一维 DCT。

一维离散余弦变换

一维 DCT 将一个长度为 N 的信号序列(例如一行像素值)从空间域转换到频域。最常用的是 DCT-II 类型,这也是 JPEG 标准所使用的。

正变换: 从空间域到频域

其中:

  • 是输入信号在位置 的值(例如,像素亮度)。
  • 是变换后得到的第 个频率分量(DCT 系数)。
  • 是信号的长度(在 JPEG 中,通常是 8)。
  • 是频率索引,
  • 是空间位置索引,
  • 是一个归一化系数,定义为:

关键点:

  • 时, 被称为 直流系数。它实际上是整个信号块的平均值。
  • 时, 被称为 交流系数。它们代表了信号中不同频率的振荡模式。 越大,代表的频率越高。

二维离散余弦变换

JPEG 将图像分割成 8x8 的小块,然后对每个块独立进行二维 DCT。二维 DCT 可以看作先对每一行进行一维 DCT,然后再对每一列进行一维 DCT(顺序可互换)。

正变换: 从空间域到频域

其中:

  • 是 8x8 图像块中在位置 的像素值。在计算前,通常会先将像素值减去 128(即 -128 到 127 的范围),使其围绕零对称。
  • 是变换后得到的在频率 上的 DCT 系数。
  • (对于标准的 JPEG)。
  • 是频率索引,
  • 是空间位置索引,
  • 的定义与一维情况相同:

同理于

关键点:

  • 直流系数,代表整个 8x8 块的平均亮度。
  • 所有其他的 都是 交流系数
  • 系数 值越大,代表在水平和垂直方向上的频率越高。
  • 在变换后的 8x8 系数矩阵中,左上角是低频系数,右下角是高频系数。图像的大部分能量(信息)都集中在低频区域,这是 JPEG 能够实现高压缩比的关键。

逆离散余弦变换

为了从频域数据重建图像,需要使用逆 DCT。

逆变换: 从频域回到空间域

公式中的各项含义与正变换完全相同。

简单理解

DCT的本质与核心直觉

DCT可以看作离散傅里叶变换(DFT)的一种特殊形式,主要处理实数信号,并且有很好的能量集中特性。

它的核心思想是:任何一个8x8的像素块,都可以看作是64种不同频率的标准余弦波(即“基础图案”)按照特定权重(也就是DCT系数)叠加而成的。

在这些基础图案中:

  • 低频成分(对应于系数矩阵左上角,u和v值较小的部分)代表了图像块的大致轮廓和平滑变化的背景。

  • 高频成分(对应于系数矩阵右下角,u和v值较大的部分)代表了图像块的细节、锐利边缘和纹理。

图像的大部分视觉能量(信息) 通常都集中在低频区域。这意味著,我们往往只需要少数几个大的低频系数,就能大致描述出图像块的主要样貌。

用二进制分解来类比DCT的能量集中

如果我们将所有的0系数也补上

那么对应的系数数组为:[1,0,1,0,1,0,1,1]

如果我们简单将数组低索引称之为”低频”,高索引为”高频”,将数据压缩只包含”低频”系数
[1,0,0,0,0,0,0,0]=>2^7=128 大概丢了25%的信息
[1,0,1,0,0,0,0,0]=>2^7+2^5=160 大概丢了6%的信息
[1,0,1,0,1,0,0,0]=>2^7+2^5=160 大概丢了1%的信息
……

可以看到“高频”信号对整个数据的影响比较小,这与DCT的思想不谋而合:我们保留对整体影响大的主要成分(低频系数),而舍弃或粗略表示那些影响细微的成分(高频系数),从而实现压缩。

总结 JPEG 压缩的流程

  1. 颜色空间转换:将图像从 RGB 转换到 YCbCr。
  2. 分块:将每个分量(Y, Cb, Cr)图像分割成 8x8 的块。
  3. 前向 DCT:对每个 8x8 块应用上述的二维 DCT 公式,得到频率系数。
  4. 量化:将 DCT 系数除以一个对应的量化步长(来自量化表),并四舍五入到整数。这一步是有损的,是信息丢失的主要来源。高频系数通常会被量化为 0。
  5. 熵编码:对量化后的系数进行 Zigzag 扫描、差分脉冲编码调制和霍夫曼编码,生成最终的 .jpg 文件。

当解码时,过程是反过来的:熵解码 -> 反量化 -> 逆 DCT -> 合并块 -> 转换回 RGB。

参考

《影像算法解析——JPEG 压缩算法》
《白话文理解DCT离散余弦变换》
《离散余弦变换》
视频
The Unreasonable Effectiveness of JPEG: A Signal Processing Approach
中文翻译版本《离散余弦变换可视化讲解》