You are on page 1of 32

03 数据压缩技术

多媒体应用普及的难题:海量数据的存储、处理和传输。
解决途径:
① 大容量的光盘存储技术(如: CD-ROM )
② 高速 CPU / Cache / DSP — 芯片集成
③ 宽带网络通信技术
④ 数据压缩技术(软件算法,专用芯片)

3.1 数据压缩的基本原理
压缩目的:① 减少存储量,以节省存储开销
② 降低实时传输量,以提高数据传输效率

Page: 1
3.1.1 数据压缩的必要性与可能性
1. 数据压缩的必要性
①音频数据量:根据采样定理数字电话的速率:
Adata = 4KHz×2 × 8bit / s = 64Kbit / s

② 视频数据量: NTSC 电视信号进行数字化:


Vdata = 6MHz×2×8bit / s = 96Mbit / s
可见,数字图像是数字音频数据量的 1000 倍以上

③ 光盘存储能力: CD_ROM 光盘容量是 650MB ;


由于每字节含 2 位校验位,即附加数据占 25% ,故
视频存放量= 650×8 / (96×(1 + 0.25)) = 43sec

结论:即使拥有大容量的光盘存储设备和高速 CPU 的计算机,


仍需采用数据压缩技术。

Page: 2
2. 数据压缩的可能性
各种媒体数据内部存在冗余 ( 相关性 ) 。所以可采用不同编码与
解码算法以减弱冗余,达到压缩目的。
数据冗余类型:是有效采用各种压缩算法的基本依据。
⑴ 空间冗余
相邻区域图像灰度或颜色等特性基本相同。
例:像素点 P(x,y) 具有邻域强相关性 — 空间冗余

Page: 3
(2) 时间冗余
① 人眼视觉暂留特性
例: F1 和 F2 之间时域相关 — 具有时间冗余

F2

② 相邻帧间或相邻音域间是渐变的或局部相同的;

(3) 熵冗余 编码符号序列中的码字冗余,称信息熵冗余


(4) 其它冗余:结构冗余 ( 如纹理 ) ;知识冗余 ( 如人脸 )

Page: 4
3. 压缩的指标
⑴ 压缩比
输出数据与输入数据之比。
(2) 压缩质量 : 压缩后在多大程度上接近压缩前
压缩分为有损压缩和无损压缩;
有损压缩采用主观 ( 感受 ) 和客观方式(信噪比等)。
(3) 压缩和解压缩速度

与压缩和解压缩算法密切相关

(4) 压缩和解压缩标准化

Page: 5
3.1.2 压缩模型的构成原理
1. 压缩的基本思想
针对数据冗余类型采用合适的压缩方法;
建立以少代多或以局部代全体的数据变换关系;从而以最少的
数码表示信号。
⑴ 空间压缩:把相同视觉区当作一个整体进行表示。
⑵ 时间压缩:把连续帧间的相同部分
或渐变过程中的相似部分当作一个整体,
用极少的数据量表示。

Page: 6
2. 压缩过程的框架构成 ( 简 )
⑴ 编码过程:原始数据符号化;体现压缩算法及正变换
(有内容信息→无内容的信号序列)
① 信源编码器:完成大部分压缩任务;
② 信道编码器:侧重解决传输可靠性的问题
· 把压缩的位流转译成既适应存储又适合传输的信号
· 降低信号调制/解调过程中的误码率
⑵ 解码过程:码元恢复与信号合成;体现解压算法及逆变换
(无内容的编码数据→有内容的还原数据)
⑶ 对称/非对称:压/解实时;压缩非实时,解压实时

Page: 7
3.2 数据压缩编码方法分类

压缩类型 编码技术
行程编码
无损压缩 统计编码 霍夫曼
算术编码
快速傅里叶变换 (FFT)
变换编码 离散余弦变换 (DCT)
有损压缩 离散小波变换 (DWT)
重要性 子带编码
JPEG JPEG2000
MPEG-1 MPEG-2 MPEG-4 H.261-264

Page: 8
3.3 常用压缩编码方法
熵编码技术:利用数据的熵冗余 ( 统计冗余 ) 压缩。

熵编码的基本思想:
根据信源符号出现的概率分布特性,
用短码字表示出现概率大的信息,
用长码字表示出现概率小的信息;
从而减少符号序列中的冗余度,
提高符号的平均信息量,达到数据压缩的目的。
— 可变字长的统计编码方法

数据压缩标准中常用的熵编码方法:
· Huffman 编码
· 算术编码
· 行程编码

Page: 9
2. Huffman 编码方法
哈夫曼编码:无失真编码的优选算法;
已用于 JPEG 标准的基本系统
⑴ 算法流程
统计信源符号出现的频率,以建立 Huffman 码表。
① 把信源符号按概率递减排列,以建立二叉树
② 沿 H 树的路径赋予二进制值,以生成符号编码
③ 计算平均码长,以验证方案的合理性
⑵ 算法实现实例
例:设有一组待编码符号 {Xi|i=1,2,…8}, 其出现频度为

{15 , 10 , 8 , 6 , 6 , 2 , 2 , 1} ,进行 Huffman 编码。


Page: 10
讨论:
① 求出信源符号集 { Xi } 中符号概率 P(Xi) 以建立 Huffman 码
表。 8
P( X i )  X i  P( X )
i 1
i

Page: 11
讨论:
① 求出信源符号集 { Xi } 中符号概率 P(Xi) 以建立 Huffman 码
表。 8
P( X i )  X i  P( X )
i 1
i

11
00
101
100
011
0100
01011
01010
Page: 12
② 根据 P(Xi) 计算值,

按概率递减序把符号集 { Xi } 排列成一棵二叉树

a. 设置各符号 Xi 的叶节点位置;

自底向上计算两个最小概率项之和,
作为新的复合项,且以中间节点表示
其中,底层叶节点的概率值为左大右小
b. 沿二叉树逐次计算两个最小概率项之和,
并逐次归并成一个复合项,
以作为中间节点;直至最后一项到达顶层的根节点
c. 可以验证:根节点的概率值必为 1 ;即
ΣP(Xi)=1
Page: 13
信源符号 : X1 X2 X3 X4 X5 X6 X7 X8
概率 : 0.30 0.20 0.16 0.12 0.12 0.04 0.04 0.02

X1 X3 X4 X5 X6 X7 X8 X2 X1= 11
0.30 0.16 0.12 0.12 0.04 0.04 0.02 0.20 X2 =00
1 0
X3 =101
0 1 0.06
1 0 X4 =100
1 0 0.10
1 0 0.28 1 0.22 0 X5=011
1 0.58 0 0.42 X6 =0100
1.00 X7=01011
X8=01010
Page: 14
③ 生成码字
a. 从根节点开始遍历树,按从左到右顺序
依次给每个节点的路径赋予二进制代码( 1 , 0 )值
b. 取出从根节点到每个叶节点的路径上的代码组合,
得到该叶节点的码字;这就是信源符号 Xi 的编码结果

c. 各信源符号的码字及码长 Li 可填列在 Huffman 码表中

Page: 15
编码方案的效率如何评判?
信息量:某信息消除不确定性的度量。设信源 X 的符号集为
Xi ( i=1,2,…N ), Xi 出现的概率为 P(Xi) ;则 Xi 的信息量为:
S ( X i )   log 2 P ( X i )

式中底为 2 则单位为 bit (binary digit) 。

信息熵:信源数据所携带的平均信息量。故信源
n X 的熵定义为:
S ( X )   P ( X i ) log 2 P ( X i )
i 1
若信源 X 的熵为 2bit ,意味着为 X 编码需要的平均码长为 2 。
这就是熵编码原理的数学依据:信源符号集的平均码长→ S(X) 。
按熵值定义信源符号集的最小平均码长,设计编码方案。

Page: 16
④ 计算信源符号集 {Xi} 的平均码长,并与 {Xi} 的最小码长比较
平均码长 :
n
La   li P ( X i )  2  0.30  2  0.20  3  0.16  3  0.12
i 1

 3  0.12  4  0.04  5  0.04  5  0.02


 2.66

最小平均码长:
n
S ( X )   P ( X i ) log 2 P ( X i )  2.63
i 1

Page: 17
⑶ Huffman 算法小结
① 适用场合:可用于非均匀概率分布的信源编码
只要码表以大量统计数据为基础,就能获得好的压缩效果。
注意:均匀概率的信源,编码会产生定长码 — 失效。
② Huffman 树及编码不唯一,与信源初始条件和左右节点
赋值 {(0,1),(1,0)} 有关;
但平均码长应相等,故压缩效率相同。

Page: 18
3. 行程编码方法
行程:具有相同灰度值的连续符号的长度;
实例:把一幅二维图像划分成许多 8×8 子块时,每个子块含有 64 个像
素的灰度值如下;水平扫描后的行程为:

编码结果:用 13 对( N,L )数值取代了 64 个像元的灰度值以少代


多思想:编码后,只要存储或传输两个数值( N,L ),就可取代 L
个像元的相同灰度值 N ;从而代替大量邻域冗余。
Page: 19
3. 行程编码方法
适用场景:适用于二值图像压缩,是传真编码的压缩方法;
在 JPEG 编码中,用于处理 DCT 交流系数。

扫描方式:行程越长压缩率越高。
应选择行程长的扫描方向:
水平,垂直,之字形 (Zig-Zag) 。

Page: 20
4. 算术编码方法
在 JPEG 扩展系统中取代 Huffman 编码。优点:
① 用在数据概率分布较均匀的场合;与 Huffman 编码形成互补;
② 压缩效率高出 Huffman 编码约 5% 。
⑴ 算术编码的基本原理
基本思想:基于递归概率区间划分的二进制编码。具体过程:
① 把信源符号序列 {Xi|i=1,2,…,n} 发生的概率

用实数区间 [0 , 1] 上的间隔( Xi 的取值范围)来表示;

② 按符号概率大小来分配符号间隔,
使 [0 , 1] 随迭代计算次数的增加而逐次变窄;
③ 最后范围便是替代 {Xi} 符号串编码的取值范围。
Page: 21
算术编码图解
信源符号,概率和初始编码区间
符号 (X0) (X1) (X2) (X3)
概率 0.1 0.4 0.2 0.3
初始编码区间 [0, 0.1) [0.1, 0.5) [0.5, 0.7) [0.7, 1]

要发送符号序列:
X2 X0 X3 X0 X2 X3 X1

Page: 22
算术编码图解
信源符号,概率和初始编码区间
符号 (X0) (X1) (X2) (X3)
概率 0.1 0.4 0.2 0.3
初始编码区间 [0, 0.1) [0.1, 0.5) [0.5, 0.7) [0.7, 1]

X2 X0 X3 X0 X2 X3 X1
从区间中选择一个数作为这串码元的代表,如 0.51439 。
Page: 23
算术编码的解码
信源符号,概率和初始编码区间

符号 (X0) (X1) (X2) (X3)


概率 0.1 0.4 0.2 0.3
初始编码区间 [0, 0.1) [0.1, 0.5) [0.5, 0.7) [0.7, 1]

接收到: 0.51439 ,对其解码:


步骤 区间 解码判决 (0.514 39 处于的区间 ) 解码结果
1 [0.5,0.7) 在 [0.5,0.7) 区间 X2
2 [0.5,0.52) 在 [0.5,0.7) 的第 1 个 1/10 区间 X0
3 [0.514,0.52) 在 [0.5,0.52) 的第 7 个 1/10 区间 X3
4 [0.514,0.5146) 在 [0.514,0.52) 的第 1 个 1/10 区间 X0
5 [0.5143,0.51442) 在 [0.514,0.5146) 的第 5 个 1/10 区间 X2
6 [0.514 384,0.51442) 在 [0.5143,0.51442) 的第 7 个 1/10 区间 X3
7 [0.514 3876, 0.514 402) 在 [0.514 384,0.51442) 的第 2 个 1/10 区 X1

Page: 24
算术编码实例

设输入数据为 eaiou ,其出现的概率和设定的取值范围如下:


字符 a e i o u
概率 0.2 0.3 0.1 0.2 0.2
范围 [0 , 0.2) [0.2,0.5) [0.5,0.6) [0.6,0.8) [0.8,1.0]

设编码的数据串为 eaiou ,令 high 为编码间隔的高端, low 为


编码间隔的低端, range 为编码间隔的长度, rangelow 为编码
字符分配的间隔低端, rangehigh 为编码字符分配的间隔高端。
初始 high=1,low=0,range=high-low 一个字符编码后新的 low 和
high 按下式计算:
low=low+range × rangelow
high=low+range × rangehigh

Page: 25
算术编码实例
(1) 在第 1 个字符 e 被编码时 ,e 的 rangelow = 0.2 , rangehigh = 0.5
low = 0+1 × 0.2 = 0.2
high=0+1 × 0.5=0.5
range=high-low=0.5-0.2=0.3
此时分配给 e 的范围为 [0.2,0.5] 。

(2) 在第 2 个字符 a 被编码时使用新生成范围 [0.2,0.5],


a 的 rangelow=0,rangehigh=0.2, 因此:
low=0.2+0.3 × 0=0.2
high=0.2+0.3 × 0.2=0.26
range=high-low=0.26-0.2=0.06

此时分配给 ea 的范围为 [0.2,0.26] 。


Page: 26
算术编码实例
( 3 )在第 3 个字符 i 被编码时, i 的 rangelow=0.5,rangehigh=0.6, 因此:
low = 0.2+0.06 × 0.5=0.23
high=0.2+0.06 × 0.6=0.236
range=high - low=0.236-0.23=0.006
此时分配给 eai 的范围为 [0.23, 0.236]

(4) 在第 4 个字符 o 被编码时, o 的 rangelow=0.6,rangehigh=0.8, 因此:


low=0.23+0.006 × 0.6=0.2336
high=0.23+0.006 × 0.8=0.2348
range=high-low=0.2348-0.2336=0.0012
此时分配给 eaio 的范围为 [0.2336,0.2348] 。

(5) 在第 5 个字符 u 被编码时, u 的 rangelow=0.8,rangehigh=1.0, 因此:


low=0.2336+0.0012 × 0.8=0.23456
high=0.2348+0.0012 × 1.0=0.2360
range=high-low=0.2360-0.23456
此时分配给 eaiou 的范围为 [0.23456,0.2360] 。
由此,可用 [0.23456,0.2360] 表示数据串 eaiou, 换句话说 , 在此范围的数值代码
都唯一对应于字符串 eaiou 。
Page: 27
波形编码在数字声音编码中讲述
(1) PCM ( 电话 G.711 64Kb/s)
(2) APCM 根据输入信号幅度改变
量化幅度大小
(3) DPCM
(4) ADPCM (G.721 32Kb/s)
子带编码 , 线性预测编码

Page: 28
(1)DPCM 的框架原理:

① 对预测误差进行编码前,需选取合适的量化器与预测器
② 将采样获得的样本值序列 Xn 送入量化器进行量化处理

③ 量化数据送预测器并产生一个预测值 ,加到差分比较点
④ 在输入与反馈比较点,实际样本值与预测值进行差值比较,
从而获得误差值 en ,即

⑤ 对预测误差 e 进行量化处理后,送编码器进行编码处理
Page: 29
⑵ DPCM 预测编码算法
算法设计:根据原理框图来设计预测器的预测模型
设: tn 时刻的采样信号即样本值为 Xn ,

根据 tn 以前的采样序列 {Xi|i=1 , 2 ,…, n-1} 所作出的

预测值为 ;则 的预测方程为:

其中: a ( i=1 , 2 ,…, n-1 )为预测系数


对于线性预测, a 是与 x 无关的常数
再设:采样输入的实际样本值与预测样本值的误差值为 en ,

误差信号的量化输出为 en’ ,接收端的输出信号为 Xn’ ;

则 en 的预测误差为:
Page: 30
• 子带编码 (SB-ADPCM 可视电话
G.722 64Kb/s , 7KHz 声音信号 , MPEG
系列 )
• 线性预测编码 (MPEG-4)
p
x p (n)   ai x(n  1)
i 1

p
e(n)  x(n)  x p (n)   ai x(n  1)
i 0

Page: 31
Page: 32

You might also like