H.264使用了多种编码方式来对语法元素进行编码。其中CAVLC与CABAC是H.264/AVC标准中两种用来对残差系数进行熵编码的方式。
一、CAVLC
H.264标准中,CAVLC(基于上下文自适应的可变长编码)被用于亮度和色度的残差数据的编码。
1.相关原理
编码宏块的残差经过变换量化后的数据表现出如下特性:
- 编码宏块的残差经过变换量化后,其非零系数主要集中在低频部分,高频系数大部分是零。
- DC系数附近的非零系数值较大,而高频位置上的非零系数值有不少是+1和-1.
- 非零系数的幅值变化有一定的规律性和相关性,非零系数的游程也具有一定特性。
- 相邻的4×4块的非零系数的数目是相关的。CAVLC有效的利用了相邻已编码符号所提供的相关性为当前要编码符号选择合适的上下文模型,降低了编码符号间的信息冗杂度。
在CAVLC中,上下文模型的选择主要体现在:对各类非零量化系数的大小、位置给以独立编码;自适应更新编码非零系数所需码表与系数后缀长度。
编码过程:
1.对非零系数的数目(TotalCoeffs)以及拖尾系数(TrailingOnes)的数目进行编码。
2.对每个拖尾系数的符号进行编码。
3.对除了拖尾系数之外的非零系数的幅值(Level)进行编码。
二、CABAC
cabac是将自适应的二进制算术编码与一个设计精良的上下文模型结合起来得到的方法。与CAVLC相比较,它有如下特点:
- CABCA提供了对当前编码的语法元素条件概率的估计。CABAC会为当前编码的语法元素选择合适的上下文模型。基于这个上下文的概率模型