第二章、视频压缩技术与原理

2.1.1 熵及熵编码基本原理

  1. 信息量的概念
  2. 熵编码的概念
  3. 平均码长定义
  4. 无失真编码定理
  5. 编码效率的定义

信息量的概念

信息量:表示该符号所需要的位数

  • 考虑用0、1组成的二进制数码
  • 是为含有n个符号的某条信息编码
  • 假设符号aj在整条信息中重复出现的概率为Pj,则该符号的信息量定义为:{\color{Blue} }En = - log_{2}(P_{j})信息量表示以2为底的对数,是正值 

Eg:输入信源字符串为aabbaccbaa,abc出现的概率分别为0.5\0.3\0.2,它们的信息量分别为多少,总信息量也即表达整个字符串需要的位数为多少?

 

 如果用二进制等长编码,需要20位。

 熵编码的概念

  • 数据压缩的基石——Shannon创建的信息论
  • Shannon第一定律(率失真定律)确定了在编码过程中不损失任何信息,即在无损编码条件下数据压缩的理论极限是信息的熵,并指出了如何建立最优数据压缩编码方法。
  • 这类保存信息熵的编码方法统称为熵编码(Entropy coding),熵编码的结果经解码后可无失真地恢复出原始信息

 平均码长的概念

如果对字符a_{j}编码长度L_{j},则信号L的平均码长为:L_{avg}=\sum_{j=1}^{m}p_{j}*L_{j}(m为信号中所出现不同字符的个数)

无失真编码定理

熵是平均码长的下限,这是以信息论为基础的编码方式的一个最重要的理论。

编码的基本思想就是用较少的比特数表示出现概率较大的码源符号,用较多的比特数表示出现概率小的码源符号。最常用:霍夫曼编码

编码效率的定义

熵H(x)除以平均码长Lavg,即表示 编码效率

(熵是编码的极限,所以\eta<=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)对输入的每个信源符号,重复如下步骤:

  1. 将第一个信源符号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、算术解码步骤

解码过程是对按照当前的编码进行识别的过程。

当得到一个图像的编码后,根据其各个信源符号的概率进行分析,找到当前编码所符合的概率空间,逐步求精,即可得到原始符号序列信息。

解码过程示例如下:

  1. 通过比较各个信源符号与已编码序列区间的数值范围,找到序列中第一个信源符号。

上例中,0.2158在区间[0.2, 0.3)之间,所以第一个符号是a2

      2. 从编码数值中消去第一个符号a2的影响,即首先减去a2的左端点的值,然后除以a2对应范围的宽度,即

 0.158再次比较与哪一个符号对应的数值范围符合,得到a1。

      3. 重复步骤1、2,直到解出整个符号流。

注意: 一个符号的末尾应该有一个结束符作为标志,它随信源符号一起被编码。

 4、算术编码的分析

算术编码是一种从整个符号系列出发,采用递推形式连续编码的方法。在算术编码中,字母表中的符号和码字间不再存在一一对应关系,一个算术码字要赋给整个信源符号序列(即不是一次编一个号),而码字本身确定0和1之间的一个实数区间。

不论是否是二元信源,也不论数据的概率分布如何,其平均码长均能逼近信源的熵。

算术编码和Huffman编码的区别:
        在算术编码中,输入序列(即被赋给单个码字的符号块)的长度,是可变的。可以说算术编码是将可变长码字赋给可变长符号块。

正是由于算术编码不需要为定长符号块分配整数长的码字,采用算术编码每个符号的平均编码长度可以为小数,理论上能达到无损编码定理所规定的最低限。

算法编码从全序列出发,采用递推形式的连续编码,它不是将单个的信源符号映射成一个码字,而是将整个符号序列映射为实数轴上[0,1)区间内的一个小区间,其长度等于该序列的概率。

随着输入符号越来越多,子区间分割越来越细,因此表示其左端点的数值的有效位数也越来越多。

如果等整个符号序列输入完毕后再将最终得到的左端点输出,将遇到两个问题:

  1. 当符号序列很长时,将不能实时编解码;
  2. 有效位太长的数难以表示。为了解决这个问题,

通常采用两个有限精度的移位寄存器存放码字的最新部分,随着序列中符号的不断输入,不断地将其中的高位移出到信道上,以实现实时编解码。

 5、算术编码的效率

  • 算术编码最大的优点之一在于它具有自适应性和高编码效率
  • 算术编码的模式直接影响编码效率。其模式:固定模式(基于概率分布模型)和自适应模式(其各符号的初始概率都相同,但随着符号顺序的出现而改变,在无法进行信源概率模型统计的条件下,非常适于使用自适应模式的算术编码。)

 在信道符号概率比较均匀的情况下,算术编码的编码效率高于Huffman编码,但在是实现上比Huffman编码的计算过程复杂。

算术码也是边长码,编码过程中的移位和输出都不均匀,因此也需要有缓冲存储器。

在误差扩散方面,算术码比分组码严重。

算术码流的传输也要求高质量的信道,或者采用检错反馈重发的方式。

 小结:

  • 算数编码的原理:编码从序列出发,将各信源序列的概率映射到[0,1]区间上,使得每个序列对应该区间内的一个点,即一个二进制的小数。这些点将[0,1]区间分成许多小段,每段的长度等于某一序列的概率,整个编码过程就是单位区间[0,1]内的子分过程。
  • 是将一个算术码字,赋给整个信源符号序列,而码字是在0和1之间的一个实数区间。

2.2.4 游程编码 

  1. 游程(行程)编码的概念
  2. 二元信源的游程(行程)编码
  3. 多元信源的游程(行程)编码
  4. 游程(行程)编码的优缺点
  5. (图像)游程编码

 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中,综合使用了游程编码以及哈夫曼编码。

猜你喜欢

转载自blog.csdn.net/m0_46303430/article/details/125919431