HEVC 熵编码 需要理解和学习的内容? 学习的目的还是主要用于回顾,后续如果用到相关的知识,希望能够看到文章之后,能够迅速的了解
1、熵编码是什么?熵编码的目的?熵编码的通用流程?
2、熵编码的方法有哪些?
3、HEVC 中的熵编码的方法有哪些,具体的流程是怎样的?
一、熵编码是什么?熵编码的目的?熵编码的通用流程?
了解熵编码,首先要了解熵是什么? 熵是衡量某个事件的信息量在编解码中就是码流的信息量。熵跟码流的概率成反比。 码流中某个符号出现的概率越大,那么对应的熵就越小。也就是说在这个符号传输之前我就已经很大概率知道会是传输这个了。所以出现这个符号给我的信息是少的,而如果传输的这个符号是我基本上不会去猜的,那这个符号传递的信息就很多的,对应的熵就很多了。
熵编码的目的和视频编解码的目的是一致的,都是为了减少码流的数据量,使得能够减少数据传输的带宽。在之前的编解码框架体系中,比如帧内用的是空间上的冗余,帧间利用的是时间上的冗余来达到压缩的目的。 而熵编码是从码流整体的统计特性去考虑的。熵编码通过去除码流中的统计冗余达到对数据的压缩的。
不同编码的流程不一样,但总的来说编码需要满足唯一可译性。对于使用者来说,只需要知道协议中具体用到的编码方法的流程即可。
二、 熵编码方法有哪些?
2.1 变长编码(指数哥伦布编码)
变长编码的特点:对信源输出的消息(一个信源符号或者固定数目的多个信源符号)采用不同长度的码字表示,这种编码方式称为变长编码。为了提高编码效率,需要根据符号出现的概率大小设计码长,即对于大概率符号采用较短的码字表示,小概率符号采用较长的码字表示,以达到平均码长最短的目的。
-
指数哥伦布编码过程
指数哥伦布码由前缀和后缀两部分构成,前缀和后缀都跟指数哥伦布码的阶数k有关。非负整数N的k阶指数哥伦布码可用如下步骤生成。
①将数字N以二进制形式写出,去掉最低的k个比特位,之后加1。
②计算①所得到二进制数的比特数,将比特数减一得到需要增加的前缀零的个数n。
然后在①得到的比特串加上n个0。
③将步骤①中去掉的最低k个比特位补回到②得到的比特串尾部就得到最后编码的数据了。
以4的一阶指数哥伦布编码为例:
①4的二进制表示为100, 去掉最低1个比特位0变成10,加1后得到11。
②11的比特数为2,因此前缀中0的个数为1。将0补到11前面 得到011。
③在比特串最低比特位补上步骤①中去掉的0,最终码字为0110。
-
指数哥伦布解码过程
解码原理:解析k阶指数哥伦布码时,首先从比特流的当前位置开始寻找第一个非零比特,并将找到的零比特个数记为m,