熵编码(一)-熵编码概述
1. 什么是熵
熵是什么? 熵是系统混乱程度的度量。系统越混乱无序,则熵值越大;反之熵值越小
2. 信息熵
信息熵表示信息的规律程度。信息熵值越高,说明信息的规律越少,越杂乱,也就越难以压缩。信息熵概念通常应用在数字图像编码中,因为图像像素信息、码流的句法元素值都属于信息。信息熵是信息中排出冗余后的平均信息量,信息熵的提出解决了对信息的量化度量问题。
输入信源X={x1,x2,...xn},符号概率pi表示第i个符号的概率
符号的信息量数学定义:I(X) = -logpi
I(X)表示符号的信息量,对数的底是2的时候,熵的单位是比特bit,对数的底是e的时候,熵的单位是纳特(nat/symbol)
信息熵的数学定义:H(X) = E(I(X)) = - \(\sum_{i=0}^n\) pi*logpi
H(X)表示信源X的熵即信源的每个符号平均信号量,对数的底是2的时候,熵的单位是比特(bit/symbol),对数的底是e的时候,熵的单位是纳特(nat/symbol)
3. 熵编码
熵编码:利用信源的统计特性进行码率压缩的编码,称之为熵编码,也叫做统计编码。
熵编码基本思想:使前后的码字之间尽量更加随机,减少前后相关性,使编码后码字的平均码长逼近熵极限。
- 熵编码具有消除数据之间冗余的功能。编码器的最后一道工序,将句法元素写入输出码率
- 熵解码是解码器的第一道工序,将码流解析出句法元素用于后续的图像重建
编码后的平均码长越接近熵,熵编码的效率越高。熵编码是一种无损编码方法,包含:香农-范诺编码、哈夫曼编码、指数哥伦布熵编码,CAVLC、CABAC等
4. 熵编码分类
算法 | 代表 |
---|---|
变长编码 | 香农-范诺编码、哈夫曼编码、指数哥伦布编码、CAVLC |
算术编码 | CABAC |
5. 变长编码
变长编码是一种数据编码方式,采用一个码字代表一个输入信息符号,其中码字的长度根据需要变化。
- 指数哥伦布编码:属于可变长前缀码的一种
- 哈夫曼编码:属于可变字长编码(VLC)的一种,使用通过评估源码字出现的概率得到的变长码表对源码字进行编码
- CAVLC:基于上下文自适应的变长编码。根据已编码句法元素的情况动态的选择编码中使用的码表,并且随时更新拖尾系数的后缀长度,从而获得极高的压缩比
指数哥伦布编码 | 哈夫曼编码 | |
---|---|---|
信源相关性 | 信源无关性 | 依赖信源的概率分布 |
额外信息 | 无需携带额外信息 | 需存在与信源匹配的编码码表 |
压缩效率 | 压缩效率较低,甚至毫无压缩效果 | 压缩效率高 |
6. 算术编码
算术编码是图像压缩的主要算法之一,是一种熵编码算法。和其他熵编码方法不同,其他熵编码采用将输入信号分割成符号再对每个符号进行编码,而算术编码是直接将整个输入信号编码为一个满足(0.0<=n<1)的浮点数n
- CABAC:基于上下文自适应的二进制算术编码,CABAC是H264/AVC标准中两种熵编码的一种,它的核心编码算法就是算术编码