修改版:基于上下文的自适应变长编码CAVLC原理与流程

本文深入探讨了基于上下文的自适应变长编码(CAVLC)在H.264标准中的应用。CAVLC是一种用于4×4模块亮度和色度残差数据熵编码的技术,旨在提高压缩效率。通过理解CAVLC的编码流程,包括TotalCoeffs和TrailingOnes的编码、NC值计算、coeff_token编码、非零系数符号编码、非零系数幅值编码和前零个数编码,可以更好地掌握视频编码的精髓。文章还提供了详细的编码和解码实例,以帮助读者理解这一复杂过程。
摘要由CSDN通过智能技术生成

原文链接:点击打开链接

阅读原文的过程中发现一些不太对的地方,现把我的修改版发布到这里。

CAVLC概念

CAVLC的全称是Context-Adaptive Varialbe-Length Coding,即基于上下文的自适应变长编码。CAVLC的本质是变长编码,它的特性主要体现在自适应能力上,CAVLC可以根据已编码句法元素的情况动态的选择编码中使用的码表,并且随时更新拖尾系数后缀的长度,从而获得极高的压缩比。H.264标准中使用CAVLC对4×4模块的亮度和色度残差数据进行编码。

CAVLC原理

在H.264标准编码体系中,视频图像在经过了预测、变换及量化编码后表现出如下的特性:4×4块残差数据块比较稀疏,其中非零系数主要集中在低频部分,而高频系数大部分是零;量化后的数据经过zig-zag扫描,DC系数附近的非零系数值较大,而高频位置上的非零系数值大部分是+1和-1;相邻的4×4块的非零系数的数目是相关的。CAVLC就是利用编码后残差数据的这些特性,通过自适应对不同码表的选择,利用较少的编码数据对残差数据进行无损的熵编码,进一步减少了编码数据的冗余和相关性,提高了H.264的压缩效率。

CAVLC编码流程

视频图像在经过预测、变换和量化编码后,需要经过Zig-zag扫描和重新的排序过程,为后序的CAVLC编码进行准备。一个残差数据块的CAVLC熵编码的流程如图所示:


CAVLC熵编码处理流程

1、TotalCoeffs和TrailingOnes的编码

从码流的起始位置开始计算整个编码块中非零系数的数目(TotalCoeffs),非零系数的数目为从0~16,非零系数的数目被赋值给变量TotalCoeffs。

拖尾系数是指码流中正或者负1的个数(+/-1)。拖尾系数的数目(TrailingOnes)被限定在3个以内,如果+/-1的数目超过3个,则只有最后3个被视为拖尾系数,其余的被视为普通的非零系数,拖尾系数的数目被赋值为变量TrailingOnes。

2、判断计算NC值

NC(Number Current 当前块值)值的计算集中体现了CAVLC的基于上下文的思想,通过NC值选择不同H.264标准附录CAVLC码表。

3、查表获得coeff_token编码

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

4、编码每个拖尾系数的符号:

前面的coeff_token编码中已经包含了拖尾系数的总数,还需进一步对拖尾系数的符号进行编码。由于拖尾系数符合为正(+)或负(-),因此,在H.264标准中规定用0表示(+1)、1表示(-1)。当拖尾系数的数目超过3个只有最后3个被认定为拖尾系数,因此对符号的编码顺序应按照反向扫描的顺序进行。

5、编码除拖尾系数之外的非零系数的幅值(Levels)

非零系数的幅值(Levels)由两个部分组成:前缀(level_prefix)和后缀(level_suffix)。levelCode、levelSuffixsSize和suffixLength是编码过程中需要使用的三个变量,其中levelCode是中间过程中用到的无符号数,levelSuffixsSize表示后缀长度位数,suffixLength代表Level的码表序号。

通常情况下变量levelSuffixsSize的值等于变量suffixLength的值,但有两种情况例外:

(1)当前缀等于14时,suffixLength等于0,levelSuffixsSize等于4。

(2)当前缀等于15时,levelSuffixsSize等于12。

变量suffixLe

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值