
1. 二值化在HEVC中主要包括截断莱斯编码(Truncated Rice)指数哥伦布编码(Exp-Golomb)和定长编码。1.1. TRTR二值化需要输入三个参数synVal表示将要进行TR二值化的值cRiceParam表示莱斯参数cMax表示门限值。TR二值化的结果由两部分组成前缀prefixVal是一元码后缀suffixVal是定长码后缀长度为cRiceParam。其中prefixVal synVal cRiceParamsuffixVal synVal − ( ( prefixVal ) cRiceParam)即synVal prefixVal cRiceParam suffixVal当prefixVal (cMax cRiceParam)时前缀长度为prefixVal1由prefixVal个1和一个0组成否则前缀由(cMax cRiceParam)个1组成如表1-1所示。表1-1 TR前缀表prefixVal前缀001102110……cMaxcRiceParamcMaxcRiceParam 1suffixVal按定长码计算位数为cRiceParam。有两种情况无后缀:a) cRiceParam0b) synVal cMax。以cRiceParam1,cMax7时TR二值化为例如表1-2所示。 当synVal6时(synVal cRiceParam)3(cMax cRiceParam)也等于3因此前缀由(cMax cRiceParam)3个1组成后缀suffixVal synVal − ( ( prefixVal) cRiceParam)6-(31)0因此二进制串为1110。表1-2 cRiceParam1,cMax7时TR二值化表cRiceParam1, cMax7synValbin string前缀后缀00010121003101411005110161110711111.2. 指数哥伦布指数哥伦布编码也是变长编码的一种指数哥伦布编码也是由前缀和后缀组成下面以非负整数的k阶指数哥伦布为例讲解二进制串的生成步骤。1. 将N以二进制形式表示去掉最低的k个比特之后加12. 计算剩余的比特数将此数减1即是需要增加的前缀0的个数3. 将1中去掉的最低k个比特补回比特串末尾。以数字6的一阶指数哥伦布编码为例1. 6的二进制串为110去掉最低位的1个比特变成11加上1变成1002. 100的比特数为3将此数减1得到前缀0的个数为23. 将比特串最低位的0补回比特串末尾得到00 100 0。解析k阶指数哥伦布码的方式如图1所示。图1(a)展示了指数哥伦布编码的组成由m个前导0m1个二进制串和k个末尾串组成但在指数哥伦布进行解析的时候是按照图1(b)所示形式进行解析的首先从比特流当前位置开始寻找第一个非零比特并将找到的0比特个数记为m第一个非零比特之后的mk个二进制串的十进制值记为Value如图1(c)所示根据步骤1所述去掉最低的k个比特之后加1相当于Value的值中包含了一个额外添加的2^k同时在进行码流解析时m个前导0之后的第一个非零比特没有被计算在Value值内。(a) 指数哥伦布编码组成 (b) 指数哥伦布解析形式(c) 指数哥伦布值的计算图1. 指数哥伦布编码因此解码值CodeNum的计算方式如下CodeNum 2^(mk) – 2^(k) Value在HEVC中常用的是0阶指数哥伦布编码分为无符号0阶哥伦布指数编码和有符号数0级哥伦布指数编码如表1-3所示其中CodeNum表示解码值有符号所对应的列表示无符号编码是所对应的值有符号表示采用有符号0阶指数哥伦布编码时所对应的十进制数。表1-3 0阶有符号和无符号指数哥伦布编码码字CodeNum无符号有符号100001011101122-1001003320010144-2001105530011166-3…………1.3. 定长编码定长编码比较简单再次不再详述。1.4. 二值化示例以上详细说明了TRk和EGk二值化算法的过程表1-4简单列举了各种二值化方法的结果。表1-4 二值化TRk、EGk和FL二值化结果NUnary(U)TruncatedUnary(TrU)TruncatedRice(TRk)Exp-Golomb(EGk)Fixed-Length(FL)cMax7k 1; cMax7k 0cMax70000010110100101012110110100011103111011101010010011411110111101100001011005111110111110110100110101611111101111110111000111110711111110111111111111000111