以前有人问我,为什么用一种特定的编码,比如哥伦布编码,之后数据位数明显变多了,为什么还要编码?
呵呵, 这就是没明白二值化的实质, 二值化的的目的就是要那些syntax elements的值为非二进制的情况,转化为二进制或者二进制串,这样才能进行下面的算术编码。
为什么要这样?可以参考惠普(HP)写的一本叫做二进制编码算法的书,里面讲的非常清楚。这也是一位北航的前辈的推荐的,在这里感谢下
纵观CABAC过程的syntax elements 的二值化过程表,大部分都是FL(Fixed length ) 编码,就是固定长度编码, 一部分是Truncated Rice ,只有一个是哥伦布,其他单独各自定义的情况,标准书里有详细说明。
几个主要的二值化过程被应用到HEVC中,下面是几个例子:
N | Unary | TU(cMax=7) | EGk(k=0) | FL(cMax=7) |
0 | 0 | 0 | 1 | 000 |
1 | 10 | 10 | 010 | 001 |
2 | 110 | 110 | 011< |