CABAC是H264的一种熵编码方案,相比如H264的另外一种熵编码方案CAVLC而言,在可接受的视频质量(30dB到38dB之间)内变化时,前者可节约平均9%到14%的码流。CABAC有以下几个特性:
1, 对多数符号使用了自适应概率模型。
2, 通过使用上下文关系,利用了符号相关性。
3, 限制为二进制算术编码(binary arithmetic coding),基于只用查表和移位方式的快速二进制算术编解码器。(CABAC本来是非常耗时的一种算法,在h264中应用了查表的方法,节约了很多的时间)
4, 399 种预定义的上下文模型,分成了各种不同的模型组,例如模型 14-20 用于帧间宏块类型的编码,模型的选择基于前面编码的信息(上下文关系),每个上下文模型适应实验分布。(每一种语法元素对应的上下文模式都是对应好了的,遵循一定得规则)
先大致介绍CABAC的实现过程,然后对一些技术做细节介绍
下面是CABAC的编码流程图
1,转化成二进制(Binarization)
CABAC使用二值算术编码,也就是说只对二进制的判决(0或者1)进行编码。非二进制符号(例如转换后的系数或者运动矢量)在编码前先要进行二进制转换。这一过程和变长编码(VLC)中将信息符号转化为变长编码一样,所不同的是,算术编码器在将信息送去传输之前还要进一步对这些二进制符号进行编码。
2, 选择基于内容的模型:
“基于内容的模型”是二进制符号中一个或多个比特的概率模型。根据对先前已编码符号的统计,从可选模型中选择适当的概率模型。(根据与同一片中语法元素的类型,周围编码块的情况,编码过程中同一SE的值...有相应的规则,遵循即可)
3, 算术编码:
根据选择的概率模型对每个比特进行算数编码。
4, 更新模型
上图中的bypass coding是指对于一些特定语法元素的二进制比特符号,为了加快编码速度而不使用上下文模型的形式,也就没有相应的更新模式的过程
使用CABAC的熵编码方式在时间耗费方面大于CAVLC,为了达到一个折中,在实际编码中,并不是对所有的语法元素都使用CABAC编码方案,有许多表征视频序列本身固有参数特征的语法元素的熵编码还是使用CAVLC。下图是一些需要用</