图像压缩基本原理
数字图像压缩利用人类视觉系统的特性与图像数据的统计冗余,在可接受的失真范围内最大化压缩比。压缩过程分为三个核心步骤:变换编码、量化与熵编码。
压缩流程总览:
原始图像 (RGB/YCbCr)
│
▼
┌─────────────────┐
│ 色彩空间转换 │ RGB → YCbCr
│ Y: 亮度 │ • 人眼对亮度敏感
│ Cb: 蓝色差 │ • 对色度分辨率低
│ Cr: 红色差 │ • 允许色度下采样
└────────┬────────┘
▼
┌─────────────────┐
│ 分块处理 │ 划分为 8×8 像素块
│ Block Division │ • 局部特征捕捉
└────────┬────────┘ • 并行处理
▼
┌─────────────────┐
│ DCT变换 │ Discrete Cosine Transform
│ 空域 → 频域 │ • 能量集中
└────────┬────────┘ • 去相关
▼
┌─────────────────┐
│ 量化 │ Quantization
│ 精度降低 │ • 损失压缩核心
└────────┬────────┘ • 高频系数粗量化
▼
┌─────────────────┐
│ 之字形扫描 │ Zigzag Scan
│ 排列重组 │ • 低频→高频顺序
└────────┬────────┘ • 聚集零系数
▼
┌─────────────────┐
│ 熵编码 │ Entropy Coding
│ Huffman/算术 │ • 无损压缩
│ 编码 │ • 变长编码
└────────┬────────┘
▼
压缩数据流
DCT离散余弦变换
DCT将空间域的像素值转换到频率域的系数。低频系数代表图像的主要结构,高频系数代表细节与边缘。能量集中特性使得大部分信息聚集在少数低频系数中。
二维DCT正变换
对于8×8像素块 f(x,y):
F(u,v) = (1/4) C(u) C(v) Σ Σ f(x,y)
x=0 y=0
× cos[(2x+1)uπ/16]
× cos[(2y+1)vπ/16]
C(u) = { 1/√2, if u=0
{ 1, if u≠0
物理意义:
• F(0,0): DC系数,块平均亮度
• F(0,7): 水平高频
• F(7,0): 垂直高频
• F(7,7): 对角高频(噪声集中区)
能量分布特性
自然图像的DCT系数能量分布极不均匀:
| 低频区(左上3×3) |
85-90%能量 |
| 中频区 |
8-12%能量 |
| 高频区(右下) |
2-5%能量 |
这种能量集中性是压缩的理论基础:丢弃高频信息损失小,但压缩比显著提升。
DCT系数矩阵示例(8×8块):
原始像素值: DCT系数(取整):
┌─────────┐ ┌────────────┐
│ 52 55 │ │ 415 12 │ ← DC与低频AC
│ 60 63 │ │ 22 3 │
│ ......│ │ 8 1 │
│ 58 61 │ │ 2 0 │ ← 高频系数接近0
└─────────┘ └────────────┘
能量集中可视化:
███████░░ ← F(0,0) DC: 最大系数
███░░░░░░ ← F(0,1), F(1,0): 主要AC
██░░░░░░░
█░░░░░░░░
░░░░░░░░░ ← 高频:接近零
量化:有损压缩核心
量化将连续的DCT系数映射到离散级别,实现压缩与质量的权衡。量化表的设计基于人眼对频率的敏感度曲线。
标准量化表(Q50)
亮度量化矩阵(JPEG标准):
┌────────────────────────────────┐
│ 16 11 10 16 24 40 51 61│
│ 12 12 14 19 26 58 60 55│
│ 14 13 16 24 40 57 69 56│
│ 14 17 22 29 51 87 80 62│
│ 18 22 37 56 68 109 103 77│
│ 24 35 55 64 81 104 113 92│
│ 49 64 78 87 103 121 120 101│
│ 72 92 95 98 112 100 103 99│
└────────────────────────────────┘
特点:
• 左上角小:精细量化低频
• 右下角大:粗略量化高频
• 对角线递增:频率越高,量化越粗
量化过程
量化公式:
F_quantized(u,v) = round( F(u,v) / Q(u,v) )
反量化(解码时):
F_dequant(u,v) = F_quantized(u,v) × Q(u,v)
示例:
DCT系数 F(3,3) = 115
量化表 Q(3,3) = 29
量化后 = round(115/29) = 4
反量化 = 4 × 29 = 116
误差 = 116 - 115 = 1
质量因子(Quality Factor)调整:
QF=100(无损): Q(u,v) = 1(几乎无量化)
QF=50(标准): 使用标准量化表
QF=10(高压缩): Q(u,v) × 9(严重量化)
QF每降低10,文件大小约减半,但质量损失加速。QF<30时块效应明显。
熵编码:无损压缩阶段
Huffman编码
基于符号出现频率的变长编码:
符号频率统计:
符号 | 频率 | Huffman码
─────┼──────┼──────────
0 | 45% | 0
1 | 20% | 10
-1 | 15% | 110
2 | 10% | 1110
-2 | 7% | 11110
其他| 3% | 11111...
构建过程:
┌─(100%)─┐
│ │
(45%) (55%)
[0] ┌───┴───┐
(20%) (35%)
[1] ┌──┴──┐
(15%) (20%)
[-1] ┌─┴─┐
(10%)(10%)
[2] [...]
高频符号用短码,低频符号用长码,平均码长最小化。
游程编码(RLE)
之字形扫描后,连续零的游程编码:
量化后DCT系数(之字形顺序):
[415, 22, 12, 8, 3, 2, 1, 0, 0, 0, 0, ...]
↑____________↑
连续4个零
RLE表示:
(0,415) ← 0个零,值415
(0,22) ← 0个零,值22
(0,12)
(0,8)
(0,3)
(0,2)
(0,1)
(4,0) ← 4个零后,值0(实际是EOB标记)
EOB (End of Block): 剩余全零
自然图像高频系数量化后多为零,RLE大幅减少数据量。
压缩性能分析
| 极高质量 |
90-100 |
5:1 - 10:1 |
~500KB (1MB原图) |
几乎无损 |
专业摄影、印刷 |
| 高质量 |
80-90 |
10:1 - 15:1 |
~80KB |
优秀 |
网站展示图 |
| 标准质量 |
50-80 |
15:1 - 30:1 |
~40KB |
良好 |
社交媒体、一般网页 |
| 中等质量 |
30-50 |
30:1 - 50:1 |
~25KB |
可接受 |
缩略图、快速加载 |
| 低质量 |
10-30 |
50:1 - 100:1 |
~12KB |
明显块效应 |
占位图、极限环境 |
压缩伪影类型:
块效应(Blocking Artifact):8×8块边界可见,QF<40时显著
振铃效应(Ringing):边缘附近的波纹状失真,高频量化过粗导致
颜色失真:色度过度下采样(4:2:0),色彩边界模糊
蚊式噪声(Mosquito Noise):高对比边缘周围的动态噪声