CAVLC和CABAC简介

本文介绍了H.264中的两种熵编码方式——CAVLC和CABAC。CAVLC是简单但效率较低的编码,而CABAC则利用上下文相关概率模型实现更高压缩率。详细讲述了CAVLC的编码流程,包括计算非零系数、拖尾系数、level编码和0的个数编码。CABAC则依赖于上下文模型和算术编码,提供更精细的数据压缩。
摘要由CSDN通过智能技术生成

CABAC/CAVLCin H.264

什么是熵编码?

熵编码压缩是一种无损压缩,其实现原理是使用新的编码来表示输入的数据,从而达到压缩的效果。常用的熵编码有游程编码,哈夫曼编码和CAVLC编码等。

CAVLC

CAVLC(Context Adaptive VariableLength Coding)是在H.264/MPEG-4AVC中使用的熵编码方式。在H.264中,CAVLCzig-zag顺序用于对变换后的残差块进行编码。CAVLCCABAC的替代品,虽然其压缩效率不如CABAC,但CAVLC实现简单,并且在所有的H.264profile中都支持。

CAVLC的编码过程如下:

  1. 计算非零系数(TotalCoeffs)和拖尾系数(TrailingOnes)的数目。

    拖尾系数指值为 +1/-1的系数,最大数目为 3。如果超过 3个,那么只有最后三个被视为拖尾系数。拖尾系数的数目被赋值到变量 TrailingOnes
    非零系数包括所有的拖尾系数,其数目被赋值到变量 TotalCoeffs)

  2. 计算nC(numberCurrent,当前块值)

    nC值由左边块的非零系数 nA和上面块非零系数 nB来确定,计算公式为: nC=round((nA+nB)/2);若 nA存在 nB不存在,则 nC=nA;若 nA不存在而 nB存在,则 nC=nB;若 nAnB都不存在,则 nC=0
    nC值用于选择 VLC编码表,如下图所示。这里体现了上下文相关 (contextadaptive)的特性,例如当 nC值较小即周围块的非零系数较少时,就会选择比较短的码,从而实现了数据压缩。
  1. 查表获得coff_token的编码。

    根据之前编码和计算过程所得的变量 TotalCoeffs TrailingOnes nC 值可以查 H.264 标准附录 CAVLC 码表,即可得出 coeff_token 编码序列。

  2. 编码每个拖尾系数的符号,按zig-zag的逆序进行编码。

    每个符号用 1bit位来表示, 0表示“ +”, 1表示“—”。
    当拖尾系数超过三个时只有最后三个被认定为拖尾系数,引词编码顺序为从后向前编码。

  3. 编码除拖尾系数之外非零系数的levelLevels)。

    每个非零系数的 level包括 signmagnitude,扫描顺序是逆 zig-zag序。
    level的编码由前缀 (level_prefix)和后缀 (level_suffix)组成。前缀的长度在 06之间,后缀的长度则可通过下面的步骤来确定:
    将后缀初始化为 0。(若非零系数的总数超过 10且拖尾系数不到 3,则初始化为 1)。
    编码频率最高(即按扫描序最后)的除拖尾系数之外的非零系数。
    若这个系数的 magnitude 超过某个门槛值 (threshold) ,则增加后缀的长度。下表是门槛值的列表:

  4. 编码最后一个非零系数之前0的个数(totalZeos)。

    TotalZeros 指的是在最后一个非零系数前零的数目,此非零系数指的是按照正向扫描的最后一个非零系数
    根据 TotalCoeffs 值, H.264 标准共提供了 25 个变长表格供查找,其中编码亮度数据时有 15 个表格供查找,编码色度 DC2 × 2 块( 4 2:0 格式)有 3 个表格、编码色度 DC2 × 4 块(
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值