电子商务网站建设一体化教案,企业建网站服务商,网站制作易捷网络,新乡网站建设设计H#xff0e;264#xff0f;AVC标准采用了很多新技术和新方法#xff0c;大大提高了视频编码效率#xff0c;其中CABAC便是H#xff0e;264#xff0f;AVC采用的新型熵编码方法之一。CABAC采用了高效的算术编码思想#xff0c;同时充分考虑了视频流相关统计特性#xf…H264AVC标准采用了很多新技术和新方法大大提高了视频编码效率其中CABAC便是H264AVC采用的新型熵编码方法之一。CABAC采用了高效的算术编码思想同时充分考虑了视频流相关统计特性大大提高了编码效率。概括起来CABAC有三个丰要特点 (1)上下文建模提供编码符号条件概率分布的估计。利用适当的上下文模型在编码当前符号时根据已编码的临近符号的概率统计在不同的概率模型间转换借此去掉符号间的冗余。 (2)算术编码可以给每一个符号字母分配非整数比特因此符号能以接近它的熵率被编码。这对概率大于O5的符号很有效。如果选择了高效的概率模型符号概率常常大于O5这时分数比特就比UVLC的整数比特(至少1比特)高效得多。 (3)自适应的算术编码可以使熵编码器自适应动态符号的概率统计。一般情况下运动矢量的概率统计随空间、时间的不同或序列、码牢的不同可以发生较大的变化。因此自适应模型由于充分利用已编码符号的概率统计可使算术编码更好地适应当前符号的概率从而提高了编码效率。
CABAC包括三个部分二进制化、上下文建模和二进制算术编码 下面对每个部分进行详述(1)二进制化 CABAC是二进制算术编码对非二进制符号如运动矢量、宏块类型、参考帧号以及变换量化后的残差数据需要预先进行二进制化。在H264AVC标准中CABAC二进制化方案由基本方案和串接方案组成。基本方案有一元码(Unary binarizationU)截断一元码(Truncatedunary binarization,TU)K阶指数哥伦布码(Kthorder Exp_golomb binarizationUEGK)和定长码(Fixed1ength binarizationFL)四种。串接方案由基本方案串接而成。不同的二进制化方案适用于不同类型的语法元素。对于数值变化范围较大的残差数据(如运动矢量与运动矢量预测值间的残差数据MVD)用UEGK码表示对于简单的符号标志元素用FL码表示。下面是四种基本方案的编码方法
U二进制化编码此方法将一个无符号整数X编码为X个“1”并加上一个后缀位“0”。例如整数3转换为“lllO”。
TU二进制化编码此方法根据参数cMax采用不同的转换方法。如果无符号整数xcMax用Unary binarization方法转换如果xcMaxX被转换成X个“1”。
UEGK二进制化编码用此方法转换后的码字由两部分构成前缀和后缀。前缀部分由Unary binarization转换得到。
FL二进制化编码此方法为语法元素工设定固定的长度。假如0≤XcMax其长度L CABAC把待编码的语法元素按照一定的规则转换为只用“0”和“l”表示的二进制比特流称为比特流(bin string)然后采用不同的概率模型对bin string进行编码充分考虑了视频流的相关性能适应信号统计特性的变化容易达到渐进性能。在编码过程中bin string的信源符号被分为大概率符号(Most Probability SymbolMPS)和小概率符号(Least Probability SymbolLPS)。若MPS为“0”则LPS为“l。反之若NIPS为“l则LPS为“0”。但当MPS与LPS的出现概率相差比较大时根据信息熵的原理bin string的熵值比较小压缩效果比较好。如果MPS与LPS出现概率相当或者相等bin string的熵值就比较大则压缩效果不明显。
(2)上下文建模 编码符号具有上下文相关性利用已编码符号提供的上下文信息为编码符号选择合适的概率模型这就是上下文建模。它是为了对与运动、模式和结构信息相关的句法元素进行编码而设计的。通过对上下文模型的构建摹本概率模型能够适应随视频图像而改变的统计特性降低符号间的冗余度并大大减少运算开支。 CABAC将片作为算术编码的牛命周期H264AVC标准将一个片内可能出现的数据划分为399个上下文模型每个模型均有自己的上下文序号(Ctxldx)每个不同的字符依据对应的上下文模型来索引自身的概率查找表。即收到字符后先索引该字符的Ctxldx才能找到它的概率查找表(TransldxLPS)。这些模型的划分精确到比特几乎大多数的比特和它们邻近的比特处于不同的上下文模型中。查找每个比特所对应的上下文模型有两个步骤 第一步确定该比特所属的句法元素。CABAC为每个句法元素分配了一个上下文模型区间详见Table91l。 第二步按照某一个法则为当前比特在上一步中得到的区间中找到对应的Ctxldx。该法则对不同的句法元素各不相同它通常用表来表示。那些399个上下文模型模型分为4种类型第一种类型根据左边和上边的语法元素对当前的语法元素进行预测。第二种类型仅用于宏块类型和予宏块类型。其中第n比特的类型要参考前面已编码的n-1比特所采用的类型。第三、四种类型只用于残差。第三种类型不依赖前面的编码数据而是依赖扫描路径的位置。第四种类型还包括对编码积聚数量的计算。在CABAC中用“个有代表性的概率值来表示LPS的概率。这64个概率值通过公式(31)和(32)来计算产生
值可以用7个比特来表示。 前文提到CABAC的生命期是片每个片开始要对399种上下文模型全部过行初始化工作初始化的步骤是 (3)二进制算术编码 概率估计和编码器构成了一个自适应二进制算术编码器。概率估计是在前一次上下文建模阶段更新后的概率估计。在对每个二进制数值编码过后这个概率估计的值又要根据刚刚编码的二进制符号进行调整。二进制算术编码是算术编码的特殊情况其原理与一般算术编码一样。所不同的是在二进制算术编码中编码序列只有“0和“l一两种符号所涉及的概率也只有P(0)和P(1)。概率区间分成两份一份是MPS的编码区间一份是LPS的编码区间。区间长度由每个信源符号的概率决定LPS的编码区间总应该小于MPS的编码区间。若把LPS的概率记为Q则MPS的概率记为PI-Q。在编码进程中如果有连续的LPS输入有可能出现QP的情况此时MPS和LPS所代表的信源符号要互换以确保MPS所代表的信源符号的概率始终大于LPS所代表的信源符号的概率。在每个片开始时CABAC进行初始化建立了一个概率状态表。在进行二进制算术编码时每一位的概率状态值通过查概率状态表得到。而且每编码完一位就要对概率状态表中的状态值进行更新。概率状态值的更新是这样实现的如果编码的比特位(binval)是NIPS概率状态值a加l这意味着R值减小(1R)值增大这实际就是表示下一次出现MPS的概率增大出现LPS的概率减小。如果a62表示(1n)已经达到最大这时a不再改变直到出现LPS。如果编码的比特位biIlvm是LPS且a0表示MPS和LPS的概率相等MPS和LPS的值进行互换。具体的概率值更新参考公式(33 为了方便观察我们给出CABAC概牢估计与更新模型图(如图32)。在处理binval时概率的刷新有两个方向如果binval是LPS则LPS的概率变大顺着下图中的虚线向左寻找如果binval是MPS则LPS的概率变小顺着下图中的实线向右寻找。我们可以看到当出现MPS时的更新值都只是简单地指向当前值的下一位即al。也即当前处理的字符为MPS时区间递进只是了区间的长度发生了改变而作为影响实际输出值的L却没有发生改变这个现象意味着如果输入流中连续出现大量的MPS或者MPS相对LPS出现的概率比较高时可以达到极高的压缩效果编码输出的码率也更接近熵率。