CABAC中的二值化方法
1.二值化的一般性要求
- 在对片进行编码的过程中,相应的二值化方案要满足快速精确的条件误差估计原则
- 二值化的结果要方便进行条件概率的计算以及后续的算术编码
2.为什么要进行二值化
对于传统的算术编码过程,如果不考虑上下文的影响,假设一共有m个元素,则在一开始需要计算m个元素的概率,这种情形对于0阶上下文自适应还勉强能使用,如果使用n阶的上下文自适应条件概率,则需要计算m^n个概率值,那么这个计算量就非常大了,不适合用来直接计算和编码。
3.二值化的一般方法
- unary code 最简单的一种二值化实现方式,对于无符号整数x,且x>=0,那么unary code为”x”个1和一个0组成。
- Truncated Unary Binarization Scheme 这种方法实际上是unary code的一种优化,同样对于无符号整数x,且0<=x<=S,当x小于S时,使用unary code,对于x=S,只使用”x”个1,不需要最后的0.
- k阶指数哥伦布二值化方案EGK,这种方法对于每一个待二值化的x,首选需要计算lx=log2(x/2^k +1),并对lx向下取整,然后将lx按unarycode进行二值化;接下来计算x+2^k(1-2^lx)以及k+lx,使用k+lx位的定长对x+2^k(1-2^lx)进行二值化。举例说明如下,假设x=5,k=0,那么lx=2,k+lx=2,则二值化为11010.
- 定长二值化方法,即使用固定的位数对整数值进行二值化
4.CABAC中使用的二值化方法
在CABCA中,将上面的两种或多种方法串联起来使用,第一种是使用4-bit的定长前缀来描述块的亮度编码方式加上S=2的TU对色度块的编码方式进行二值化。运动向量残差使用的是TU做前缀加EGK做后缀的二值化方式。