CABAC中的TU与EGK的联合二值化方案

在Context-Based Adaptive Binary Arithmetic Coding in the H.264/AVC Video Compression Standard文献中的二值化中有TU与EGK的联合二值化方案。针对abs_level语法元素的二值化表如下:

CABAC中的TU与EGK的联合二值化方案_第1张图片

由于对指数哥伦布编码过程的印象一直都类似于下表所示。


因此觉得abs_level值为16-20时对应的EG0 suffix有误。查证以后发现H.264中的EGK编码过程和上表的编码过程是有区别的。

H.264中的EGK编码过程如下图所示:

CABAC中的TU与EGK的联合二值化方案_第2张图片

下面以输入的句法元素值为幅度的绝对值abs_level=20,对此使用截断值S=14,阶数k=0的UEG0二值化方案进行举例。

先编码前缀部分,按照编码规则易得二进制序列为11 1111 1111 1111(14个1)。

再编码后缀部分,下面按照伪C代码进行编码:

按照伪C代码进行编码过程:

x = 19 – S = 5。

进行第一次循环:5>1(即1<<0),因此put(1), x=5-1=4, k+1=1;

进行第二次循环:4>2(即1<<1),因此put(1), x=4-2=2, k+1=2;

进行第三次循环:2<4(即1<<2),因此put(0);

至此得到EG0的前缀一元码与截断位0。

进行第一次循环:k-1=1,因为(x>>k)&0x01=(2>>1)&0x01=1,所以put(1);

进行第二次循环:k-1=0,因为(x>>k)&0x01=(2>>0)&0x01=0,所以put(0);

至此得到EG0的后缀序列10。


可见,最终输出的二进制序列为11 1111 1111 1111 11010。


[转载请注明作者和出处]

你可能感兴趣的:(video,coding,HEVC,CABAC)