2.1.1 熵及熵编码基本原理
- 信息量的概念
- 熵编码的概念
- 平均码长定义
- 无失真编码定理
- 编码效率的定义
信息量的概念
信息量:表示该符号所需要的位数
- 考虑用0、1组成的二进制数码
- 是为含有n个符号的某条信息编码
- 假设符号aj在整条信息中重复出现的概率为Pj,则该符号的信息量定义为:信息量表示以2为底的对数,是正值
Eg:输入信源字符串为aabbaccbaa,abc出现的概率分别为0.5\0.3\0.2,它们的信息量分别为多少,总信息量也即表达整个字符串需要的位数为多少?
如果用二进制等长编码,需要20位。
熵编码的概念
- 数据压缩的基石——Shannon创建的信息论
- Shannon第一定律(率失真定律)确定了在编码过程中不损失任何信息,即在无损编码条件下数据压缩的理论极限是信息的熵,并指出了如何建立最优数据压缩编码方法。
- 这类保存信息熵的编码方法统称为熵编码(Entropy coding),熵编码的结果经解码后可无失真地恢复出原始信息
平均码长的概念
如果对字符的编码长度为,则信号L的平均码长为:(m为信号中所出现不同字符的个数)
无失真编码定理
熵是平均码长的下限,这是以信息论为基础的编码方式的一个最重要的理论。
编码的基本思想就是用较少的比特数表示出现概率较大的码源符号,用较多的比特数表示出现概率小的码源符号。最常用:霍夫曼编码
编码效率的定义
熵H(x)除以平均码长Lavg,即表示 编码效率
(熵是编码的极限,所以<=1)
小结:
- 数据压缩的理论极限是信息熵
- 只要信源不是等概率分布,就存在着数据压缩的可能性
- 数据压缩的基本途径之一:使各字符的编码长度尽可能等于字符的信息量
2.2.1 Huffman编码
简介:
Huffman编码是1952年为压缩文本文件所设计的编码方法,也是目前消除视频信息冗余最常使用的方法之一。
对出现概率最大的符号附以最短的码字,概率越小表示的码字越长,从而使表示每个符号的平均比特数最小。
编码步骤:
编码特点:
Huffman编码是瞬时唯一的可解块编码
- 瞬时:符号串中每个码字无需参考后继符号就可解码
- 唯一可解码:任何符号串只能以一种方式解码
- 块编码:每个信源符号都映射到一个编码符号的固定序列中
Huffman编码是为一个可译码。短的码不会成为更长码的起始部分
Huffman编码的平均码长接近于熵
与计算机的数据结构不匹配
需要多次排序耗费时间
注意:
Huffman编码的算法是确定的但是编出的码并非是唯一的
Huffman编码的依据是信源符号的概率分布,故其编码效率取决于信源的统计特性
Huffman编码局限性:只适用于离散信源
编码时需要知道输入符号集的概率分布
Huffman编码计算量大而复杂,尤其译码复杂度高
Huffman编码没有错误保护功能
由于码长不等还存在输入输出的速率匹配问题
压缩比=等长编码的编码长度/平均码长
按照熵的定义,它表示平均信息量
2.2.3 算术编码
算术编码是1980年代发展起来的一种熵编码方法。
1、原理:
2、算术编码步骤
算术编码是从整个符号序列出发,采用递推式连续编码的方法。
解码时,根据该区间判断信源各个符号出现的顺序和类型。
以多符号的算术编码为例,来分析算术编码(基于固定模式)步骤:
设信源符号表是{al,,a2, a3,a4},其符号出现的概率分别为{0.2,0.1,0.4,0.3},请按照序列{a2, a1, a4, a3}进行算术编码。
解:(1)首先确定算法空间为[0,1]
(2)确定各个字符的区间分配,建立码点。
码点要满足两条规则:
(a)每个码点值是它前面所出现的概率之和。第一个码点值为0,因为它前面没有码字
(b)将每一个码点值作为右端点,每个子分过程中所得区间的宽度对应于该符号的概率。
(3)对输入的每个信源符号,重复如下步骤:
- 将第一个信源符号a2出现的概率空间[0.2,0.3)扩展为新的算法子空间,将当前区间分割为长度正比于信源集内各个符号概率的空间(也就是说在[0.2,0.3)这个新的概率空间中,符号a1因为它所出现的概率是0.2,所以符号a1在新的算法子空间中所出现的概率也占整个新算法子空间的0.2);
接下来确定第二个符号是a1的子区间,即序列a2a1的子空间:
将信源符号序列a2a1的概率空间[0.2,0.22)扩展为新的算法子空间;
然后确定信源符号序列a2a1a4的新算法子空间[0.214,0.22)
将信源符号序列a2a1a4的概率空间[0.214,0.22)扩展为新的算法子空间;
确定信源符号序列a2a1a4a4的新算法子空间
那么,任何一个该区间中的实数,如,0.2160就可以用来表示序列{a2a1a4a3}的编码
3、算术解码步骤
解码过程是对按照当前的编码进行识别的过程。
当得到一个图像的编码后,根据其各个信源符号的概率进行分析,找到当前编码所符合的概率空间,逐步求精,即可得到原始符号序列信息。
解码过程示例如下:
- 通过比较各个信源符号与已编码序列区间的数值范围,找到序列中第一个信源符号。
上例中,0.2158在区间[0.2, 0.3)之间,所以第一个符号是a2。
2. 从编码数值中消去第一个符号a2的影响,即首先减去a2的左端点的值,然后除以a2对应范围的宽度,即
0.158再次比较与哪一个符号对应的数值范围符合,得到a1。
3. 重复步骤1、2,直到解出整个符号流。
注意: 一个符号的末尾应该有一个结束符作为标志,它随信源符号一起被编码。
4、算术编码的分析
算术编码是一种从整个符号系列出发,采用递推形式连续编码的方法。在算术编码中,字母表中的符号和码字间不再存在一一对应关系,一个算术码字要赋给整个信源符号序列(即不是一次编一个号),而码字本身确定0和1之间的一个实数区间。
不论是否是二元信源,也不论数据的概率分布如何,其平均码长均能逼近信源的熵。
算术编码和Huffman编码的区别:
在算术编码中,输入序列(即被赋给单个码字的符号块)的长度,是可变的。可以说算术编码是将可变长码字赋给可变长符号块。
正是由于算术编码不需要为定长符号块分配整数长的码字,采用算术编码每个符号的平均编码长度可以为小数,理论上能达到无损编码定理所规定的最低限。
算法编码从全序列出发,采用递推形式的连续编码,它不是将单个的信源符号映射成一个码字,而是将整个符号序列映射为实数轴上[0,1)区间内的一个小区间,其长度等于该序列的概率。
随着输入符号越来越多,子区间分割越来越细,因此表示其左端点的数值的有效位数也越来越多。
如果等整个符号序列输入完毕后再将最终得到的左端点输出,将遇到两个问题:
- 当符号序列很长时,将不能实时编解码;
- 有效位太长的数难以表示。为了解决这个问题,
通常采用两个有限精度的移位寄存器存放码字的最新部分,随着序列中符号的不断输入,不断地将其中的高位移出到信道上,以实现实时编解码。
5、算术编码的效率
- 算术编码最大的优点之一在于它具有自适应性和高编码效率
- 算术编码的模式直接影响编码效率。其模式:固定模式(基于概率分布模型)和自适应模式(其各符号的初始概率都相同,但随着符号顺序的出现而改变,在无法进行信源概率模型统计的条件下,非常适于使用自适应模式的算术编码。)
在信道符号概率比较均匀的情况下,算术编码的编码效率高于Huffman编码,但在是实现上比Huffman编码的计算过程复杂。
算术码也是边长码,编码过程中的移位和输出都不均匀,因此也需要有缓冲存储器。
在误差扩散方面,算术码比分组码严重。
算术码流的传输也要求高质量的信道,或者采用检错反馈重发的方式。
小结:
- 算数编码的原理:编码从序列出发,将各信源序列的概率映射到[0,1]区间上,使得每个序列对应该区间内的一个点,即一个二进制的小数。这些点将[0,1]区间分成许多小段,每段的长度等于某一序列的概率,整个编码过程就是单位区间[0,1]内的子分过程。
- 是将一个算术码字,赋给整个信源符号序列,而码字是在0和1之间的一个实数区间。
2.2.4 游程编码
- 游程(行程)编码的概念
- 二元信源的游程(行程)编码
- 多元信源的游程(行程)编码
- 游程(行程)编码的优缺点
- (图像)游程编码
1、游程编码基本概念
游程编码的基本原理:
将具有相同值的连续串,用其串长和一个代表值来代替,该连续串就称为游程,串长称为游程长度
编码思想:
去除像素冗余,游程编码用游程的灰度和游程的长度来代替游程本身。
2、二元信源的游程编码
二元信源只有两个不同的信源,只有“0”和“1”符号
“0”游程和“1”游程总是交替出现(比如:规定某二元序列是从“0”开始,第一个游程是“0”第二个是“1”然后又是“0”等等)
“0”游程:连续出现“0”符号的段 => “0”游程的长度L(0)
“1”游程:连续出现“1”符号的段 => “0”游程的长度L(1)
这样游程序列就可以用自然数标记游程的长度,映射成交替出现的游程长度序列。
3、多元信源的游程(行程)编码
多元信源:顾名思义在这个信源中,里面的符号是多个不同的符号,不是只有两个不同的符号。
Eg:对多元序列aabbbcddddd用游程编码
解:游程长度编码为2a3b1c5d
- 定长游程编码:编码的游程长度所用的二进制位数固定。
- 变长游程编码:不同范围的游程长度用不同编码位,需要增加标志位来表明所使用的二进制位数。
4、游程编码的优缺点分析
缺点:
- 游程编码仍然是变长编码,有其固定的缺点,需大量的缓冲和优质的信道。
- 编程长度可以从1一直到无限,这在码字的选择和码表的建立方面都有困难,实际应用是尚需采用某些措施来改进。
- 只适用于二元序列,对于多元信源,一般不能直接利用游程编码
游程越长出现的概率越小;游程长度趋于无穷时,其出现的概率也趋向于0。
按照霍夫曼编码的规则,概率越小,码长越长,但小概率的码字对平均码长的影响较小。
所以在实际应用时,对长游程一般采用截断处理的方法,将大于一定长度的长游程统一用等长码编码。
5、(图像)游程编码
对某些相同灰度级成片连续出现的图像,游程编码也是一种高效的编码方法。特别是对二值图像,效果尤为显著。
- 游程编码所能获得的压缩比主要取决于图像本身的特点。
- 若图像中具有相同颜色的图像块越大图像块数目越少,则压缩比就越高。反之压缩比就越小。
通常为了达到比较好的压缩效果,一般不单独使用游程编码,而是和其他编码方法结合使用。比如:在JPEG中,综合使用了游程编码以及哈夫曼编码。