470 likes | 817 Views
第 7 章 无损压缩算法. 内容. 基本概念 行程长度编码 变长度编码 字典编码 算术编码 无损图像压缩. 一、基本概念. 数据压缩的必要性. 中(低)等质量图像: 640 x480x16bits = 5Mb / 帧 中(高)等质量图像: 1024 x768x24bits = 18Mb / 帧 CCIR 601 数字电视: 720 x576x16bitsx25 = 158Mb /s 高清晰度数字电视: 1280 x720x24bitsx50= 1.05Gb /s. 数据压缩的必要性. 存储: 硬盘 传输
E N D
内容 • 基本概念 • 行程长度编码 • 变长度编码 • 字典编码 • 算术编码 • 无损图像压缩
数据压缩的必要性 中(低)等质量图像: 640x480x16bits = 5Mb /帧 中(高)等质量图像: 1024x768x24bits = 18Mb /帧 CCIR 601数字电视: 720x576x16bitsx25 = 158Mb /s 高清晰度数字电视: 1280x720x24bitsx50= 1.05Gb/s
数据压缩的必要性 存储:硬盘 传输 PC机系统总线:5MB/s(ISA),133MB/s(PCI) CD-ROM 读出速率:40 x 150KB/s = 6MB/s ETHERNET 传输速率:10~100Mb~1Gb/s 普通电话接入速率:28.8 , 33.3 , 56 Kb/s ADSL速率:512kb~2Mb/s,
图像数据压缩的可能性 (1) 时间、空间冗余 (2) 信息熵冗余 (3) 视觉冗余 • 眼睛空间综合能力的局限性(亮度等级,可区分弧度,高频成分的非线性,...) • 思维(mind)的时间综合能力的局限性 (4) 其他冗余,包括结构冗余、知识冗余等。 因此,在允许存在一定失真的前提下,可以对图象数据进行很大程度的压缩。
图像的信息熵 设一个信号源S={s1, s2, … , sn},第i个符号的出现概率为pi,每个符号用d比特表示,则按信息论中信息熵的定义,该信号源的熵由下式定义: 对于一种编码方法,设第i个符号的码字长度为Li,则该信号源的平均码字长度L为:
例 • 假设一个文本由7个符号组成: a1, a2, a3, a4, a5, a6, a7 它们出现的概率是: 0.2, 0.19, 0.18, 0.17, 0.15, 0.1, 0.01 则: 信息熵=-0.2log2(0.2) -0.19log2(0.19) -0.18log2(0.18) -0.17log2(0.17) -0.15log2(0.15) -0.1log2(0.1) -0.01log2(0.01) = 2.61 如果每一个符号使用bi个二进位表示,则: 平均码长= ∑ai*bi 平均码长=0.2×2+0.19×2+0.18×3+0.17×3+0.15×3+0.1×4+0.01×4= 2.72
数据压缩技术的性能指标 • 压缩比(compression ratio) • 压缩倍数 • 压缩效率 • bits per pixel(bpp) • 算法复杂度 • 计算量/存储量 • 时间延迟(计算延迟、存储延迟) • 编码/解码算法的对称性 • 重建图象的质量
重建图像的像素 原始图像的像素 原始图像信号均值 均方误差: 信噪比: 其中 误差图像信号均值 峰值信噪比: 原始图像信号峰值 重建图象的质量评价 客观评价法
重建图像(声音)的质量 分值 非常好,丝毫看(听)不出失真 5 好,虽能看(听)出失真,但没有什么影响 4 3 一般,清楚地看(听)出有失真,对视听稍有影响 2 差,失真明显,对视听有影响 1 非常差,失真严重,非常严重地妨碍视听 重建图象的质量评价 • 主观评价法(MOS) 受评价者的经验、爱好、观察图像的内容、观察条件等影响
压缩方法的分类 • lossless(无损压缩) • run-length coding(RLC) • 预测编码 • Huffman(哈夫曼编码) • Arithmetic coding(算术编码) • Lempel-Ziv & Welch ( LZW编码, 词典编码 ) • lossy (有损压缩) • 亚取样 • 变换编码 • 矢量编码 • 特征抽取(分析--合成法) (模型编码)
第一代压缩编码技术 • 统计(熵)编码。统计编码的基本原理是给出现概率较大的符号赋予一个短码字,而给出现概率较小的符号赋予一个长码字, 从而使得最终的平均码长很小。 • 预测编码。预测编码是基于图像数据的空间或时间冗余特性,用相邻的已知像素(或像素块)来预测当前像素(或像素块)的取值,然后再对预测误差进行量化和编码。 • 变换编码。变换编码通常是将空间域上的图像经过正交变换映射到另一变换域上,使变换后的系数之间的相关性降低。图像变换本身并不能压缩数据,但变换后图像的大部分能量只集中到少数几个变换系数上,采用适当的量化和熵编码就可以有效地压缩图像。
第二代压缩编码技术 • 神经网络(Artificial Neural Network, ANN) • 分形编码(Fractal Coding) • 基于对象的压缩编码(Object Based Coding) • 基于模型的压缩编码(Model Based Coding) • 小波变化编码
基本思想 检测符号序列中连续重复出现的符号,并使用其长度(run length)进行表示。 例:压缩前28位: 0 0 0 3 3 7 7 7 7 0 0 0 0 0 0 0 0 5 6 6 6 6 6 0 0 0 0 0 压缩后14位: 3 0 2 3 4 7 8 0 1 5 5 6 5 0 分析:仅仅在游程长度>3时才有效益 1 2 3 4 5 6 1 1 1 2 1 3 1 4 1 5 1 6 1 1 2 2 3 3 4 4 5 52 1 2 2 2 3 2 4 2 5
RLC的应用 适用于:二值图像的编码,如 000011001111100011100000 4225335 • 黑白文稿 • 工程图纸 • 传真机(FAX) RLC+Huffman
RLC的分析 • 方法直观,简单,速度快。 • 是一种无损压缩技术。 • 压缩比取决于图像本身的特点: • 如果图像中具有相同颜色的图像块越大,且图像块数目越少,获得的压缩比就越高。反之,压缩比就越小。 • 特别适合于扫描产生的黑白文稿和工程图纸,对颜色丰富的自然图像效果较差。 • 不仅用于图像数据的压缩,也可应用于其他数字媒体的压缩。
Shannon-Fano算法 • 首先统计出每个符号出现的概率; • 从左到右对上述概率从大到小排序; • 从这个概率集合中的某个位置将其分为两个子集合,并尽量使两个子集合的概率和近似相等,给前面一个子集合赋值为0, 后面一个子集合赋值为1; • 重复步骤3,直到各个子集合中只有一个元素为止; • 将每个元素所属的子集合的值依次串起来,即可得到各个元素的香农-范诺编码。
3 Huffman 编码 基本原理:将在图象中出现次数多的像素值给一个短的编码,将出现次数少的像数值给一个长的编码。 哈夫曼编码的一般算法如下: (1) 首先统计信源中各符号出现的概率, 按符号出现的概率从大到小排序。 (2) 把最小的两个概率相加合并成新的概率, 与剩余的概率组成新的概率集合。 (3)对新的概率集合重新排序, 再次把其中最小的两个概率相加, 组成新的概率集合。如此重复进行, 直到最后两个概率的和为1。 (4) 分配码字。码字分配从最后一步开始反向进行, 对于每次相加的两个概率,给大的赋“0”, 小的赋“1”
a1 (0.2) 0 1 1 a2 (0.19) 0.39 0 a3 (0.18) 1.0 0 1 0.35 a4 (0.17) 0 0 a5 (0.15) 0.61 1 a6 (0.1) 0 0.26 1 1 a7 (0.01) 0.11 Huffman 编码举例 例:设有7个符号: a1, a2, a3, a4, a5, a6, a7 出现的概率是: 0.2, 0.19, 0.18, 0.17, 0.15, 0.1,0.01 a1 10 a2 11 a3 000 a4 001 a5010 a60110 a70111
1 a1 (0.4) a1 1 1.0 1 a2 (0.2) a2 01 0 0 a3 000 a3 (0.2) 0 0.6 0 a4 (0.1) 1 a4 0010 0.4 1 a5 (0.1) 0.2 a50011 0 a1 (0.4) a1 00 1 0 a2 (0.2) 1.0 a2 10 0.4 0 1 a3 11 a3 (0.2) 0.6 0 a4 (0.1) 1 a4 010 1 a5 (0.1) 0.2 a5011 两种Huffman 编码的比较 例:设有5个符号: a1, a2, a3, a4, a5, 出现的概率是: 0.4, 0.2, 0.2, 0.1, 0.1,
Huffman 编码的分析 • 每个编码均非其它码的前缀,因此唯一可译 ( a1=10,a2=11,a3= 000, a4= 001,a5= 010,a6= 0110,a7=0111 ) 11010100011011100111 a2 a5 a1 a4 a1 a2 a1 a7 • 编码方式不唯一,但平均码长相同 • 编码效率受信源概率分布影响 • 传输中误码影响较大 • 必须先存储/传输码表 • 必须预先知道信源的统计特性 • 图像过大时,应划分成小块编码
4. 自适应Huffman编码 • 很难获取符号概率 • 传送码表浪费资源 • AADCCDD的自适应Huffman编码过程:
LZW编码 • 时间: • 1977年,LZ77,LZ78 • 1984年,LZW • 应用:gif,tif • 压缩比:1:1.5~1:1.3 • 原理: • LZW压缩算法的基本思想是建立一个编码表(转换表),韦尔奇称之为串表,将输入字符串映射成定长的码字输出,通常码长设为12bit。
A 1 B 2 AB 4 B 2 C 3 ABB 6 A 1 BA 5 AB 4 LZW编码 试对一个最简单的三字符A,B,C组成的字符串“ABABBABCABABBA”进行LZW编码。 码表 A 1 B 2 C 3 AB 4 BA 5 ABB 6 BAB 7 BC 8 CA 9 ABA 10 ABBA 11 输出编码
A 1 B 2 AB 4 B 2 C 3 ABB 6 A 1 BA 5 AB 4 LZW解码 • 1 2 4 5 2 3 4 6 1 码表 A 1 B 2 C 3 AB 4 BA 5 ABB 6 BAB 7 BC 8 CA 9 ABA 10 ABBA 11 输出编码
LZW简单法的失效 • ABABBABCABBABBAX • 1 2 4 5 2 3 6 10
算法思想 • Huffman编码中每个符号都用整数个bits来表示,影响编码效率。 • 算术编码把一串符号(称为“符号串”)作为一个编码单位,使编码效率得到进一步提高。 • 由m个符号组成的一个符号串为:S1 S2 ······ Sm把它映射成为[0,1)中的一个半开子区间:
1.0 0.5 0.34 0.334 0.3322 0.3322 0.9 0.85 0.55 0. 5 0.3 0.2 0.3 0.3 0.322 0.3268 0.33184 Symbol Probability Range A 0.2 [0, 0.2) B 0.1 [0.2, 0.3) C 0.2 [0.3, 0.5) D 0.05 [0.5, 0.55) E 0.3 [0.55, 0.85) F 0.05 [0.85, 0.9) $ 0.1 [0.9, 1.0) 待编码符号串:CAEE$
0.3322 0.33184 待编码符号串:CAEE$ 编码结果:0.01010101
$ 1.0 F 0.9 E 0.85 D 0.55 C 0. 5 B 0.3 A 0.2 算数编码解码 编码结果:0.01010101 十进制:0.33203125 C 0.16015625 A 0.80078125 E 0.8359375 E 0.953125 $
算术编码的实现 • 困难 • 编码过程中区间的表示(小数)会越来越长,最终导致无法实现 • 区间再分时需进行乘法运算,影响速度 • 解决方法 • 区间长度A用规格化形式表示,始终保持在0.75~1.5之间 • 使起点位置与区间长度保持同步变化 • 使用近似公式,简化计算, 避免乘法运算
算术编码与Huffman编码的比较 • 压缩效率可提高 5~10% • 硬件实现稍复杂 • 通信过程中差错会扩散 • 不必使用码表 • 自适应算术编码能够根据已经编码的信息串来调整当前符号的概率估计,从而更有效地进行编码
差分编码 • 自然世界中的灰度变化是连续的 • 差分运算后的图像的直方图分布较窄,信息熵较低,有可能达到较低的平均码长 • 常用的差分算子有:
原理: 1 利用相邻象素之间的相关性进行预测: 预测值=a1*A+a2*B+a3*C 2 计算预测误差,预测误差=当前象素数值-预测值 3 对预测误差进行编码 JPEG无损编码
预测公式 P1 A P2 B P3 C P4 A+B-C P5 A+(B-C)/2 P6 B+(A-C)/2 P7 (A+B)/2