H.264(三)熵编码和指数哥伦布编码

                                                                H.264中的语法元素符

H.264(三)熵编码和指数哥伦布编码_第1张图片

编码器

H.264(三)熵编码和指数哥伦布编码_第2张图片

解码器

H.264(三)熵编码和指数哥伦布编码_第3张图片

 

1. 熵编码(Entropy encoding)

熵(shang)编码属于无损编码,它听着很高大上,其实简单来说,就是代表了一类编码方法。熵编码包括的编码方法有:香农-范诺编码、哈夫曼编码、算术编码、指数哥伦布编码、CAVLC、CABAC等,这一类编码方法的宗旨,就是找到一种编码,使得码字的平均码长达到熵极限。

具体实施起来就是,对出现概率较大的符号,取较短的码长,而对出现概率较小的符号取较大的码长。这就是熵编码的中心思想,只要我们记住这一点,即使不了解“熵”是指啥,也能掌握上述几种熵编码。

不过我们还是简单介绍一下,“熵”是指啥?

1.1 熵

熵在热力学中,是表示分子状态混乱程度的物理量,这时的熵称为热熵。后来信息论之父香农(C. E. Shannon)把“熵”这一词引入到信息论中,称为“信息熵”,信息越是随机,它的熵值越高。信息熵也是我们在h264这样的数字图像编码中使用的概念。因为我们待编码的图像像素信息、码流的各个句法元素值,其实都属于信息。

而信息熵,就是为了解决信息的量化度量问题,它描述了整个信源的平均信息量。信息熵在我们的熵编码中,表示了信源无损编码后平均码长的下限。所以我们上面才说,熵编码就是为了使编码后,码字的平均码长尽量达到熵极限。而且平均码长越接近熵,说明熵编码的压缩效率越高。

1.2 熵和熵编码

如果第一次接触熵,确实不好理解。因为它不仅涉及到信息学的知识,还有概率论的知识。不过虽然熵不好理解,但是熵编码很好掌握。熵其实就相当于内功,而熵编码是招式。待我们学过熵编码,再来理解熵,就容易多了。

1.3 熵编码分类

为了便于理解,上述说的多个熵编码方法,还可以分为以下两类:

(1)变长编码:香农范诺编码、哈夫曼编码、指数哥伦布编码、CAVLC

(2)算术编码、CABAC等算术编码

而且这些熵编码方法中,在H.264中应用的有:指数哥伦布编码、CAVLC、算术编码、CABAC。

2. 指数哥伦布编码(编码过程)

指数哥伦布编码和哈夫曼编码一样,都属于变长编码的一种。
二者的显著区别:

  •     信源无关性:哈夫曼编码依赖于信源的概率分布;指数哥伦布编码与信源无关。
  •     额外信息:哈夫曼编码的数据必须额外携带关于该信源匹配的码表;指数哥伦布编码无需携带任何额外信息。

H.264中定义的指数哥伦布编码共分四类:

H.264(三)熵编码和指数哥伦布编码_第4张图片

其中ue(v)是其他变型算法的基础,其他算法的结果由ue(v)的结果进一步处理得到。

ue(v)的码字分为三个部分:
            [prefix] + 1+ [surfix]
其中,[prefix]部分为连续n个0,[surfix]部分为表示实际数值的信息位,其长度与[prefix]一样。
[prefix] 和 [surfix]由码元取值确定。

                                   无符号指数哥伦布编码:ue(v)编码方法

H.264(三)熵编码和指数哥伦布编码_第5张图片

计算公式:           LeadingZeroBits前面有多少个零。

H.264(三)熵编码和指数哥伦布编码_第6张图片

                                                 有符号指数哥伦布编码:se(v)编码方法

有符号指数哥伦布编码通过无符号指数哥伦布编码换算得到,换算关系为

                             K = code_num ,ceil():表示向上取整

H.264(三)熵编码和指数哥伦布编码_第7张图片

                                                 截断(舍位)指数哥伦布编码:te(v)

tel(v):截断指数哥伦布编码。解码时首先判断语法元素的取值范围[0, x], x >= 1:
    若x > 1,解析方法同ue(v)相同;
    若x = 1,语法元素值等同于下一位bit值的取反。

也就是:

  • 如果语法元素的值为0,则编码为1,如果语法元素值为1,则编码为0,此时占用1个比特位。
  • 如果语法元素的值大于1,则使用ue(v)进行编码。

                                                映射指数哥伦布编码:me(v)

适用于预测模式为Intra_4x4,Intra_8x8或inter的宏块的coded_block_pattern

  • 无指定的换算公式,通常查表的方式进行。

指数哥伦布编码与哈夫曼编码的比较

  • 哈夫曼编码依赖于信源的概率分布特性,不同信源的哈夫曼编码码表不同;指数哥伦布编码对所有信源统一;
  • 哈夫曼编码在解码前必须额外获得一份当前信源的码表;指数哥伦布编码不需要任何额外信息;
  • 指数哥伦布编码的压缩率通常较低,甚至毫无压缩效果;而在不考虑码表的情况下,哈夫曼编码压缩效率更高。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

你可能感兴趣的:(音视频学习)