转自:https://www.cnblogs.com/TaigaCon/p/5304563.html

CABAC编码的是slice data中的语法元素,在进行算术编码前,需要把这些语法元素按照一定的方法转换成适合进行二进制算术编码的二进制串,这个转换的过程被称为二值化(binarization)。

二值化的方案共有7种

1. 一元码(Unary)

对于一个非二进制的无符号整数值符号x个“1”位外加一个结尾的“0”组成,见下表。例如,输入的语法元素值为3,其二值化结果为1110

value of syntax element Unary
0 0          
1 1 0        
2 1 1 0      
3 1 1 1 0    
4 1 1 1 1 0  
5 1 1 1 1 1 0
           
binIdx 0 1 2 3 4 5

 

2. 截断一元码(TU,Truncated Unary)

一元码的变体,用在已知语法元素的最大值cMax的情况。对于语法元素值为5的二进制串为11111

 

3. k阶指数哥伦布编码(kth order Exp-Golomb,EGk)

指数哥伦布编码由前缀和后缀组成。其中前缀部分由指数哥伦布编码,请注意两者前缀区别。

 

4. 定长编码(FL,Fixed-Length)

用定长编码二进制的无符号语法元素, 语法元素的最大值cMax已知,那么定长编码的长度为近似均匀分布的语法元素的二值化

 

5. mb_type与sub_mb_type特有的查表方式

详情请查看h.264标准中9.3.2.5小节

 

6. 4位FL与截断值为2的TU联合二值化方案

这种方案只用于对语法元素CBP的二值化。4位的FL(cMax=15)的前缀用于编码亮度CBP,2位的TU用于编码色度CBP(当色彩格式为4:2:0或4:2:2时才会存在这个后缀)

 

7. TU与EGk的联合二值化方案(UEGk,Unary/kth order Exp-Golomb)

这种方案的前缀使用一元截断码,后缀使用k阶哥伦布编码。但是在取值较小的范围内,只用一元码表示(即只有前缀部分)。对于不同的语法元素,有不同的截断值与阶数。如下表为abs_level_minus1的二值化表(cMax=14的TU、0阶哥伦布编码)

* Suffix (EG0)
0 0                                    
1 1 0                                  
2 1 1 0                                
3 1 1 1 0                              
4 1 1 1 1 0                            
                         
             
12 1 1 1 1 1 1 1 1 1 1 1 1 0            
13 1 1 1 1 1 1 1 1 1 1 1 1 1 0          
14 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0        
15 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0    
16 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1    
17 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0
18 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 1
                                     
binIdx 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18

*:abs_level_minus1Prefix (TU)

 

具体哪个语法元素选择哪种二值化方案,请查看标准9.3.2中d第一个表格。

相关文章:

  • 2021-11-13
  • 2021-05-18
  • 2022-12-23
  • 2021-07-11
  • 2021-05-27
  • 2021-04-02
  • 2021-11-09
  • 2022-12-23
猜你喜欢
  • 2022-12-23
  • 2021-06-25
  • 2022-12-23
  • 2021-06-02
  • 2021-07-25
  • 2022-12-23
  • 2021-10-01
相关资源
相似解决方案