变换编码(Transform Coding)是现代视频压缩技术中消除空间冗余(帧内冗余)和残差冗余的核心环节。无论是在独立编码的I帧中,还是在帧间预测后产生的残差块中,变换编码都是将空间域(像素值)的数据转化为更便于压缩的频率域数据的关键步骤。
变换编码
在视频编码器的整体流程中,变换编码位于预测(帧内或帧间)之后,量化之前。
1. 作用与目标
- 集中能量(Energy Compaction): 这是变换编码最核心的目标。大多数自然图像和视频帧的残差块在空间域上具有很强的相关性(相邻像素相似)。通过变换,可以将这些相关性转化为频域中的少数几个较大的系数(通常是低频系数),而大部分高频系数的值则趋近于零。
- 便于量化(Facilitation of Quantization): 将能量集中后,编码器可以在量化阶段对那些数值接近于零的高频系数进行粗量化,甚至直接置零,从而实现有损压缩,大幅减少需要存储和传输的数据量。
2. 处理对象
变换编码主要处理两种数据块:
- 帧内预测残差块: 在I帧或P/B帧的帧内编码模式下,由原始块减去帧内预测块所得的残差。
- 帧间预测残差块: 在P帧或B帧的帧间编码模式下,由原始块减去运动补偿预测块所得的残差。
核心原理:离散余弦变换(DCT)
在视频编码的早期标准(如MPEG-1/2/4、H.263)和当前主流标准(如H.264/AVC)中,**离散余弦变换(Discrete Cosine Transform, DCT)**是应用最广泛的变换编码方法。
1. DCT 的数学定义(二维)
对于一个 N * N 的像素块 f(x, y),其二维 DCT 变换 F(u, v) 定义为:

2. 变换结果的解释
经过 DCT 变换后,得到的 N * N 系数矩阵 F(u, v) 具有明确的频率含义:
- 直流(DC)系数 F(0, 0): 位于矩阵的左上角 ,代表原始块中所有像素值的平均值 (即图像块的基准亮度/颜色)。这是最重要的系数,通常数值最大,承载了块中大部分的能量。
- 交流(AC)系数 F(u, v), (u, v) \ne (0, 0): 矩阵中其余的系数,代表图像块在水平和垂直方向上的频率分量 。
- 靠近 F(0, 0) 的系数是低频系数,代表块中平滑、缓慢变化的区域。
- 远离 F(0, 0) 的系数是高频系数,代表块中细节、纹理和边缘等快速变化的信息。
3. 能量集中的体现
由于残差块的大部分像素值接近于零,经过 DCT 后,能量会高度集中在 F(0, 0) 及其周围的少数低频 AC 系数上。这使得后续的量化可以高效地"砍掉"矩阵右下角(高频)的系数,实现高压缩比。
变换编码在不同标准中的演进
随着视频编码标准的发展,变换编码从简单的 8×88 \times 88×8 DCT 演进到更灵活、更高效的整数变换和多尺寸变换。
1. H.264/AVC 中的整数变换(Integer Transform)
- 问题: 标准的 DCT 涉及到浮点数运算,会引入微小的反变换失配误差(IDCT Mismatch)。
- 解决方案: H.264 引入了整数变换,用整数运算来近似 4 * 4 或 8 * 8 的 DCT,消除了 IDCT 失配问题,并简化了硬件实现。
- 特点: H.264 主要使用4 * 4 块的整数变换,这种小尺寸的变换可以更好地适应复杂的、非平滑的残差信号。对于色度(Chroma)分量,它使用 2 * 2 的变换。
2. H.265/HEVC 中的多尺寸变换(Multi-size Transform)
为了追求更高的压缩效率,H.265/HEVC 进行了显著改进:
- 变换单元(Transform Unit, TU): 引入了灵活的变换单元 概念,尺寸不再固定。TU 的尺寸可以从最小的 4 * 4 扩展到8 * 8、 16 * 16 甚至 32 * 32。
- 动态选择: 编码器会根据编码树单元(Coding Tree Unit, CTU)的划分和残差块的特性,动态选择最合适的 TU 尺寸。例如,对于平坦区域,使用 32 * 32 变换可以更好地集中能量;对于细节丰富的区域,则使用 4 * 4 变换以避免过多引入振铃效应。
- 离散正弦变换(DST): 除了 DCT-II(标准的 DCT),HEVC 还引入了**离散正弦变换(Discrete Sine Transform, DST)**用于 4 * 4 块的帧内编码残差,因为实验证明 DST 在处理帧内残差时能提供略微更好的能量集中效果。
3. H.266/VVC 中的进一步优化
- 多模式变换(Multiple Transform Set, MTS): VVC 进一步扩展了可用的变换种类,并允许对同一个块的不同子块使用不同的变换。
- 非分离变换(Non-Separable Transform): 对于 4 * 4 块,VVC 引入了非分离变换,进一步优化了低频分量的编码效率。
- 低频补偿: VVC 还包含了一些机制来补偿变换编码对低频(DC)系数造成的损失。
变换编码与量化的协同作用
变换编码只是压缩的准备阶段,真正的有损压缩是在**量化(Quantization)**阶段完成的,两者紧密配合。
1. 量化过程
量化就是对变换后的系数 F(u, v) 进行除法和取整操作:

其中 Q 是量化步长(Quantization Step Size),其大小由量化参数(QP)决定。
2. 协同效果
- 低频系数: F(0, 0) 和相邻的低频 AC 系数数值大,即使被 Q 除后取整,其结果 F(u, v) 仍然是非零的,这部分信息得以保留,保证了图像的基本结构。
- 高频系数: 高频 AC 系数数值小,经过除以 Q 后,大部分会被量化为零。
- Z字形扫描(Zig-Zag Scanning): 量化后的系数矩阵通常采用 Z字形扫描转换为一维序列。由于能量集中,这个序列的开头是重要的非零系数,而结尾则是一长串的零。
3. 熵编码增益
Z字形扫描和量化操作后产生的序列,其特点是:前面是非零系数,后面是大量的零。这种序列结构非常适合进行熵编码(Entropy Coding) ,如霍夫曼编码或算术编码(CABAC/CAVLC),从而实现无损压缩,最终达到视频压缩的整体目标。
总结
变换编码是视频压缩流水线中不可或缺的组成部分,它通过以下步骤实现了空间冗余的有效消除:
- 数据转换: 将空间域的残差信号通过数学变换(主要是 DCT 或其整数近似)映射到频率域。
- 能量集中: 利用自然图像信号的特性,将大部分信号能量集中在少数低频系数上。
- 配合量化: 为后续的有损量化阶段创造条件,使得编码器能够高效地丢弃视觉上不重要的高频信息(将它们量化为零)。
- 序列优化: 通过 Z字形扫描,将量化后的稀疏矩阵转化为利于熵编码的高效序列。