- H.264中的熵编码基本方法
-
熵编码具有消除数据之间统计冗余的功能,在编码端作为最后一道工序,将语法元素写入输出码流
-
熵解码作为解码过程的第一步,将码流解析出语法元素供后续步骤重建图像使用
-
H.264针对不同的语法元素定义了不同的熵编码方法
H.264中的语法元素描述符
image.png- 指数哥伦布编码
-
指数哥伦布编码同哈夫曼编码一样,都属于变长编码的一种;
-
二者的显著区别:
-
信源相关性:哈夫曼编码依赖于信源的概率分布;指数哥伦布编码与信源无关;
-
额外信息:哈夫曼编码的数据必须额外携带与该信源匹配的码表;指数哥伦布编码无需携带任何额外信息;
-
指数哥伦布编码的分类
- H.264中定义的指数哥伦布编码共分四类:
分类 | 名称 |
---|---|
ue(v) | 无符号指数哥伦布编码 |
se(v) | 有符号指数哥伦布编码 |
te(v) | 截断指数哥伦布编码 |
me(v) | 映射指数哥伦布编码 |
- 其中ue(v)是其他变型算法的基础,其他算法的结果由ue(v)的结果进一步处理得到
0阶无符号指数哥伦布编码
-
ue(v)的码字分为三部分:[prefix] + 1 + [surfix]
-
其中,[prefix]部分为连续n个0,[surfix]部分为表示实际数值的信息位,其长度与[prefix]一致;
-
[prefix]和[surfix]的长度由码元取值确定;
ue(v)编码方法
image.png image.png左右两边的位数相等
se(v)编码方法
-
有符号指数哥伦布编码通过无符号指数哥伦布编码换算得到,换算个关系为:se = (-1)k+1 ×Ceil(k/2)
-
se和ue的相互关系可表示为下表:
CodeNum | Syntax Element Value |
---|---|
0 | 0 |
1 | 1 |
2 | -1 |
3 | 2 |
4 | -2 |
5 | 3 |
6 | -3 |
7 | 4 |
8 | -4 |
... | ... |
k | (-1)k+1 ×Ceil(k/2) |
te(v)和me(v)
-
te(v):截断指数哥伦布编码。解码时首先判断语法元素的取值范围[0, x], x≥1 :
-
若x>1,解析方法同ue(v)相同;
-
若x=1,语法元素值等同于下一位bit值的取反。
-
-
me(v):映射指数哥伦布编码,适用于预测模式为Intra_4x4, Intra_8x8或Inter的宏块的coded_block_pattern
- 无指定的换算公式,通常由查表的方式进行
3 .指数哥伦布编码与哈夫曼编码的比较
-
哈夫曼编码依赖于信源的概率分布特性,不同信源的哈夫曼编码码表不同;指数哥伦布编码对所有信源统一;
-
哈夫曼编码在解码前必须额外获得一份当前信源的码表;指数哥伦布编码不需要任何额外信息;
-
指数哥伦布编码的压缩率通常较低,甚至毫无压缩效果;而在不考虑码表的情况下,哈夫曼编码压缩效率更高
通过代码实现指数哥伦布编码ue
0xA6,0x42,0x98,0xE2,0x04,0x8A 编码为0 1 2 3 4 5 6 7 8 9
image.png
网友评论