您的位置:首页 > 其它

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 HEVC H264 二值化