CABAC基础一-二值化
2016-08-28 17:28
162 查看
1. 二值化
在HEVC中主要包括截断莱斯编码(Truncated Rice),指数哥伦布编码(Exp-Golomb)和定长编码。1.1. TR
TR二值化需要输入三个参数:synVal表示将要进行TR二值化的值,cRiceParam表示莱斯参数,cMax表示门限值。TR二值化的结果由两部分组成:前缀prefixVal是一元码,后缀suffixVal是定长码,后缀长度为cRiceParam。其中,prefixVal =synVal >> cRiceParam
suffixVal = synVal − ( ( prefixVal ) << cRiceParam)
即:synVal = prefixVal << cRiceParam + suffixVal
当prefixVal < (cMax>> cRiceParam)时前缀长度为prefixVal+1,由prefixVal个1和一个0组成;否则前缀由(cMax >>cRiceParam)个1组成,如表1-1所示。
表1-1 TR前缀表
prefixVal | 前缀 |
0 | 0 |
1 | 10 |
2 | 110 |
… | … |
cMax>>cRiceParam | cMax>>cRiceParam "1" |
suffixVal按定长码计算,位数为cRiceParam。有两种情况无后缀:
a) cRiceParam=0;
b) synVal =cMax。
以cRiceParam=1,cMax=7时TR二值化为例,如表1-2所示。 当synVal=6时,(synVal>> cRiceParam)=3,(cMax>> cRiceParam)也等于3,因此前缀由(cMax >>cRiceParam)=3个1组成,后缀suffixVal = synVal − ( ( prefixVal) << cRiceParam)=6-(3<<1)=0,因此二进制串为1110。
表1-2 cRiceParam=1,cMax=7时TR二值化表
cRiceParam=1, cMax=7 | ||
synVal | bin string | |
前缀 | 后缀 | |
0 | 0 | 0 |
1 | 0 | 1 |
2 | 10 | 0 |
3 | 10 | 1 |
4 | 110 | 0 |
5 | 110 | 1 |
6 | 111 | 0 |
7 | 111 | 1 |
1.2. 指数哥伦布
指数哥伦布编码也是变长编码的一种,指数哥伦布编码也是由前缀和后缀组成,下面以非负整数的k阶指数哥伦布为例讲解二进制串的生成步骤。1. 将N以二进制形式表示,去掉最低的k个比特,之后加1;
2. 计算剩余的比特数,将此数减1,即是需要增加的前缀0的个数;
3. 将1中去掉的最低k个比特补回比特串末尾。
以数字6的一阶指数哥伦布编码为例:
1. 6的二进制串为110,去掉最低位的1个比特变成11,加上1变成100;
2. 100的比特数为3,将此数减1,得到前缀0的个数为2;
3. 将比特串最低位的0补回比特串末尾,得到00 100 0。
解析k阶指数哥伦布码的方式如图1所示。图1(a)展示了指数哥伦布编码的组成:由m个前导0,m+1个二进制串和k个末尾串组成;但在指数哥伦布进行解析的时候是按照图1(b)所示形式进行解析的,首先从比特流当前位置开始寻找第一个非零比特,并将找到的0比特个数记为m,第一个非零比特之后的m+k个二进制串的十进制值记为Value,如图1(c)所示,根据步骤1所述:去掉最低的k个比特,之后加1,相当于Value的值中包含了一个额外添加的2^k,同时,在进行码流解析时,m个前导0之后的第一个非零比特没有被计算在Value值内。
(a) 指数哥伦布编码组成 (b) 指数哥伦布解析形式
(c) 指数哥伦布值的计算
图1. 指数哥伦布编码
因此解码值CodeNum的计算方式如下:
CodeNum =2^(m+k) – 2^(k) + Value
在HEVC中常用的是0阶指数哥伦布编码,分为无符号0阶哥伦布指数编码和有符号数0级哥伦布指数编码,如表1-3所示,其中CodeNum表示解码值,有符号所对应的列表示无符号编码是所对应的值,有符号表示采用有符号0阶指数哥伦布编码时所对应的十进制数。
表1-3 0阶有符号和无符号指数哥伦布编码
码字 | CodeNum | 无符号 | 有符号 |
1 | 0 | 0 | 0 |
010 | 1 | 1 | 1 |
011 | 2 | 2 | -1 |
00100 | 3 | 3 | 2 |
00101 | 4 | 4 | -2 |
00110 | 5 | 5 | 3 |
00111 | 6 | 6 | -3 |
… | … | … | … |
1.3. 定长编码
定长编码比较简单,再次不再详述。1.4. 二值化示例
以上详细说明了TRk和EGk二值化算法的过程,表1-4简单列举了各种二值化方法的结果。表1-4 二值化TRk、EGk和FL二值化结果
N | Unary(U) | Truncated Unary(TrU) | Truncated Rice(TRk) | Exp-Golomb (EGk) | Fixed-Length (FL) |
cMax=7 | k = 1; cMax=7 | k = 0 | cMax=7 | ||
0 | 0 | 0 | 00 | 1 | 0 |
1 | 10 | 10 | 01 | 010 | 1 |
2 | 110 | 110 | 100 | 011 | 10 |
3 | 1110 | 1110 | 101 | 00100 | 11 |
4 | 11110 | 11110 | 1100 | 00101 | 100 |
5 | 111110 | 111110 | 1101 | 00110 | 101 |
6 | 1111110 | 1111110 | 1110 | 00111 | 110 |
7 | 11111110 | 1111111 | 1111 | 1000 | 111 |
相关文章推荐
- CABAC 基础三-M Coder
- CABAC中的TU与EGK的联合二值化方案
- CABAC 学习(1)二值化(Binarization)过程分析
- 图像基础二值化
- CABAC 基础二-算术编码
- 图像基础、OpenCV入门3——图像灰度化、二值化与图像加噪
- 图像处理理论(一)——直方图、二值化、滤波基础
- CABAC中的二值化方法
- CABAC基础四-CABAC熵解码算法FFmpeg实现
- TCP/IP基础文章(安全篇)
- WDM驱动程序设计之基础知识篇
- Java动画编程基础第四部分
- Java动画编程基础第一部分
- Java动画编程基础第二部分
- 网络安全基础(二) 口令的安全性
- Linux网络服务器配置基础(下) network
- Linux网络服务器配置基础(上) network inetd
- 路由器配置基础--设置对话过程
- ODBC 基础
- 加密和 PKI 基础知识