JA EN ZH

深入图像压缩算法 - DCT、小波变换与预测编码

· 9 分钟阅读

图像压缩的基本原理 - 冗余消除与信息理论

图像压缩的本质是消除数据中的冗余信息。原始图像数据包含大量冗余,通过识别和消除这些冗余可以大幅减小文件体积。

三种冗余类型:

  • 空间冗余: 相邻像素之间高度相关,颜色值变化通常很小
  • 频率冗余: 人眼对高频细节不敏感,可以丢弃部分高频信息
  • 编码冗余: 固定长度编码未利用符号出现概率的差异

无损压缩 vs 有损压缩:

  • 无损压缩: 仅消除编码冗余和空间冗余,可完全还原原始数据。PNG、GIF 采用此方式
  • 有损压缩: 额外消除频率冗余 (丢弃人眼不敏感的信息),压缩率更高但不可逆。JPEG、WebP、AVIF 采用此方式

有损压缩的通用流程:

  1. 色彩空间转换 (RGB → YCbCr)
  2. 色度下采样 (利用人眼对色度分辨率低的特性)
  3. 变换编码 (DCT 或小波变换,将空间域转为频率域)
  4. 量化 (降低精度,这是信息丢失的主要步骤)
  5. 熵编码 (对量化后的系数进行无损压缩)

DCT (离散余弦变换) - JPEG 的核心技术

DCT 将图像从空间域转换到频率域,是 JPEG 压缩的核心。转换后,图像的能量集中在少数低频系数上,高频系数可以被量化为零而不显著影响视觉质量。

JPEG 的 DCT 流程:

  1. 将图像分割为 8x8 像素块
  2. 对每个块进行二维 DCT 变换
  3. 得到 64 个频率系数 (左上角为 DC 系数,其余为 AC 系数)
  4. 使用量化矩阵对系数进行量化 (除以量化步长并取整)
  5. 对量化后的系数进行 Zigzag 扫描排列
  6. 使用游程编码和 Huffman 编码进行熵编码

量化矩阵的作用:

量化矩阵决定了每个频率系数的精度保留程度。低频系数 (左上角) 使用较小的量化步长以保留更多信息,高频系数 (右下角) 使用较大的步长允许更多信息丢失。JPEG 质量参数本质上是对量化矩阵的缩放。

DCT 的局限性:

  • 8x8 块边界在低质量时产生明显的块效应
  • 固定块大小无法适应图像内容的局部特性
  • 对于边缘和纹理区域,块效应尤为明显

改进方案:

JPEG 2000 使用小波变换替代 DCT 消除块效应。现代编解码器 (HEVC、AV1) 使用可变大小的变换块 (4x4 到 64x64),根据内容自适应选择最优块大小。

小波变换 - JPEG 2000 与下一代压缩的基础

小波变换将图像分解为不同尺度和方向的分量,提供比 DCT 更灵活的多分辨率分析能力。JPEG 2000 采用小波变换作为核心,消除了 DCT 的块效应问题。

小波变换的基本原理:

对图像分别在水平和垂直方向进行滤波和下采样,得到四个子带: LL (低频近似)、LH (水平细节)、HL (垂直细节)、HH (对角细节)。对 LL 子带递归执行相同操作,形成多级分解。

与 DCT 的对比:

  • 无块效应: 小波变换作用于整幅图像,不存在块边界
  • 多分辨率: 天然支持渐进式传输,先传低分辨率再逐步细化
  • 空间自适应: 不同区域可以分配不同的比特数
  • 计算复杂度: 与 DCT 相当,但内存需求更大

JPEG 2000 的特性:

  • 支持无损和有损压缩 (使用不同的小波滤波器)
  • 感兴趣区域 (ROI) 编码: 对重要区域分配更多比特
  • 渐进式解码: 从低质量到高质量逐步显示
  • 在低比特率下质量明显优于 JPEG

实际应用:

JPEG 2000 在医学影像 (DICOM)、数字电影 (DCI) 和卫星图像等专业领域广泛使用。但在 Web 领域,由于浏览器支持有限和编解码速度较慢,未能取代 JPEG。WebP 和 AVIF 在 Web 场景中提供了更好的替代方案。

预测编码与帧内预测 - AV1/HEVC 的高效压缩机制

预测编码利用已编码的相邻像素来预测当前像素的值,只编码预测残差 (实际值与预测值的差)。残差通常接近零,可以用更少的比特表示。

帧内预测模式:

现代编解码器提供多种预测方向:

  • HEVC: 35 种帧内预测模式 (33 个角度方向 + DC + Planar)
  • AV1: 56 种帧内预测模式,加上调色板模式和滤波帧内预测
  • DC 模式: 使用相邻像素的平均值作为预测,适合平坦区域
  • Planar 模式: 使用双线性插值预测,适合渐变区域
  • 角度模式: 沿特定方向外推相邻像素值,适合边缘和纹理

编码器的模式决策:

编码器对每个块尝试所有可用的预测模式,选择率失真代价 (Rate-Distortion Cost) 最低的模式。这是编码器计算量最大的部分,也是编码速度远慢于解码速度的主要原因。

变换块大小自适应:

  • 平坦区域使用大块 (32x32 或 64x64),减少开销
  • 细节丰富区域使用小块 (4x4 或 8x8),保留细节
  • 编码器通过递归分割找到最优的块划分方案

对图像压缩的意义:

AVIF (基于 AV1) 和 HEIC (基于 HEVC) 将视频编解码器的帧内预测技术应用于静态图像压缩,在相同质量下比 JPEG 节省 50% 以上的文件大小。

熵编码 - Huffman 编码与算术编码原理

熵编码是压缩流程的最后一步,对量化后的系数进行无损压缩。其目标是使编码后的平均比特数接近信息论中的熵下界。

Huffman 编码:

  • 为出现频率高的符号分配短码字,频率低的分配长码字
  • 码字长度为整数比特,因此无法完全达到熵下界
  • JPEG 基线使用 Huffman 编码,实现简单且解码速度快
  • 需要预先构建码表,通常使用标准码表或两遍扫描

算术编码:

  • 将整个符号序列编码为一个分数,理论上可以达到熵下界
  • 比 Huffman 编码多压缩 5-10%,但计算复杂度更高
  • JPEG 2000、HEVC、AV1 均使用算术编码的变体
  • 上下文自适应: 根据已编码的相邻符号动态调整概率模型

上下文建模:

现代编解码器使用上下文自适应二进制算术编码 (CABAC)。根据当前符号的上下文 (相邻已编码符号的值) 选择不同的概率模型,使概率估计更准确,从而提高压缩效率。

ANS (非对称数字系统):

ANS 是近年来兴起的熵编码方法,结合了算术编码的压缩效率和 Huffman 编码的解码速度。Zstandard (zstd) 和部分图像编解码器已采用 ANS。

压缩质量评估指标 - PSNR、SSIM、VMAF 的区别与应用

评估图像压缩质量需要客观指标。不同指标从不同角度衡量压缩失真,选择合适的指标对于压缩参数优化至关重要。

PSNR (峰值信噪比):

  • 基于像素级均方误差 (MSE) 计算,单位为 dB
  • 计算简单快速,是最传统的质量指标
  • 局限: 与人眼感知相关性较低,相同 PSNR 的图像视觉质量可能差异很大
  • 参考值: 30dB 以下质量较差,40dB 以上几乎无法察觉失真

SSIM (结构相似性):

  • 从亮度、对比度、结构三个维度评估相似性
  • 比 PSNR 更符合人眼感知,是目前最广泛使用的指标
  • 取值范围 0-1,1 表示完全相同
  • 变体: MS-SSIM (多尺度) 在不同分辨率下评估,相关性更高

VMAF (视频多方法评估融合):

  • Netflix 开发的机器学习质量指标
  • 融合多种底层指标,通过主观评分数据训练
  • 与人眼感知相关性最高,但计算成本也最高
  • 取值范围 0-100,93 以上被认为是优秀质量

实际应用建议:

  • 快速批量评估: 使用 SSIM
  • 精确质量优化: 使用 VMAF
  • 学术论文对比: PSNR 和 SSIM 并用
  • Web 图像优化: 以 SSIM > 0.95 或 VMAF > 90 为目标

Related Articles

图像压缩原理详解 - JPEG、PNG 和 WebP 的工作机制

通俗易懂地讲解图像压缩的工作原理。涵盖 JPEG 的 DCT 变换、PNG 的滤波与 Deflate,以及 WebP 的技术特点。

图像格式对比 - JPEG/PNG/WebP/AVIF/GIF/BMP 的特性与适用场景

全面对比主流图像格式的特性、压缩效率和适用场景。从传统格式到新一代格式,提供基于用途的最佳选择指南。

小波变换与 JPEG 2000 - 图像压缩的多分辨率分析

深入讲解小波变换在图像压缩中的应用。涵盖离散小波变换、JPEG 2000 编码流程、EBCOT 位平面编码机制及实际应用。

图像频率域分析基础 - 理解空间频率与频谱

系统讲解图像频率域分析的基础概念。涵盖空间频率、傅里叶变换、频谱解读和频率域处理的应用。

无损压缩与有损压缩 - 如何选择正确的图像压缩方式

深入对比无损压缩与有损压缩的原理、优缺点和适用场景。帮助你为不同用途选择最佳的图像压缩策略。

傅里叶滤波去噪 - 频率域图像处理

系统讲解利用傅里叶变换进行图像去噪的技术。涵盖低通滤波、高通滤波、陷波滤波、维纳滤波及 Python 实现。

Related Terms