返回 医学论文 首页
浅析H.264标准中的CAVLC编码

  【摘 要】本文是在阅读了讲解H.264/AVC中熵编码相关内容的书籍后的感想,主要介绍了熵编码的基本原理,H.264/AVC中熵编码的方法,重点介绍了基于上下文自适应的可变长编码(CAVLC),并将它和基于上下文二进制算术编码(CABAC)进行了比较。
  【关键词】熵编码;编码算法;编码比较
  H.264是在网络技术和视频业务不断发展的情况下产生的新一代视频压缩编码标准,它是由国际标准化组织与国际电讯联盟组成的联合视频小组开发的。与原有标准相比,H.264提出了许多新技术,在诸多方面都超越了原有的视频技术,减少了占用的硬件资源,降低了实现复杂性。其中就包括全新的熵编码技术。
  1、熵编码编码
  使用长度不同的比特串对字母进行编码有一定的困难。尤其是几乎所有几率的熵都是一个有理数。
  使用整数位元(bit)
  哈夫曼编码建议了一种将位元进位成整数的算法,但这个算法在特定情况下无法达到最佳结果。为此有人加以改进,提供最佳整数位元数。这个算法使用二叉树来设立一个编码。这个二叉树的终端节点代表被编码的字母,根节点代表使用的位元。
  熵编码模型
  要确定每个字母的比特数算法需要尽可能精确地知道每个字母的出现机率。模型的任务是提供这个数据。模型的预言越好压缩的结果就越好。此外模型必须在压缩和恢复时提出同样的数据。在历史上有许多不同的模型。
  静态模型
  静态模型在压缩前对整个文字进行分析计算每个字母的机率。这个计算结果用于整个文字上。
  优点:编码表只需计算一次,因此编码速度高。除在解码时所需要的机率值外结果肯定不比原文长。
  缺点:计算的机率必须附加在编码后的文字上,这使得整个结果加长。计算的机率是整个文字的机率,因此无法对部分地区的有序数列进行优化。
  动态模型
  在这个模型里机率随编码过程而不断变化。多种算法可以达到这个目的:
  前向动态:机率按照已经被编码的字母来计算,每次一个字母被编码后它的机率就增高。
  反向动态:在编码前计算每个字母在剩下的还未编码的部分的机率。随着编码的进行最后越来越多的字母不再出现,它们的机率成为0,而剩下的字母的机率升高,为它们编码的比特数降低。压缩率不端增高,以至于最后一个字母只需要0比特来编码。
  优点:模型按照不同部位的特殊性优化;在前向模型中机率数据不需要输送。
  缺点:每个字母被处理后机率要重算,因此比较慢。计算出来的机率与实际的机率不一样,在最坏状态下压缩的数据比实际原文还要长。
  一般在动态模型中不使用机率,而使用每个字母出现的次数。除上述的前向和反向模型外还有其它的动态模型计算方法。比如在前向模型中可以不时减半出现过的字母的次数来降低一开始的字母的影响力。对于尚未出现过的字母的处理方法也有许多不同的手段:比如假设每个字母正好出现一次,这样所有的字母均可被编码。
  模型度
  模型度说明模型顾及历史上多少个字母。比如模型度0说明模型顾及整个原文。模型度1说明模型顾及原文中的上一个字母并不断改变其机率。模型度可以无限高,但是对于大的原文来说模型度越高其需要的计算内存也越多。
  熵编码基本原理
  熵编码是无损压缩编码方法,它生成的码流可以经过解码无失真地恢复出原数据。熵编码是建立在随机过程的统计特性基础上的。
  对信息源X的各符号的自信息量取统计平均,可得到平均信息量H(X)。H(X)称为信息源X的熵(entropy),单位是bit/符号。
  H.264标准中定义了三种熵编码,分别是指数哥伦布编码(Exp-Golomb)、基于上下文的自适应可变长编码(CAVLC)、基于上下文的自适应二进制算术编码(CABAC)。指数哥伦布编码用于对句法元素的编码,把所有句法元素映像到统一的可扩展码字表,不单独对每个句法元素设计不同的码字表,这有助于降低编解码的复杂度。对于量化后的差值变换系数,可以根据不同的档次来决定使用CAVLC还是CABAC。CABAC的压缩率与CAVLC相比较高,但计算量也更大。
  下面主要介绍CAVLC。
  2、CAVLC(基于上下文自适应的可变长编码)
  2.1 CAVLC是用于亮度和色度残差数据的编码
  利用相邻已编码符号所提供的相关性,为所要编码的符号选择合适的上下文模型。利用合适的上下文模型就可以大大降低符号间的冗余度。在CAVLC中,上下文模型的选择主要体现在两个方面:非零系数编码所需表格的选择以及拖尾系数后缀长度的更新。
  CAVLC之所以代替早期草案中提出的UVLC(统一的可变长编码)对残差数据进行熵编码,它的根本原因有如下几点:
  1.CAVLC可以全面的提高编码的质量。
  2.应用锯齿形(zig-zag)扫描的方法,将非零系数值(Level)和零行程(Run)分开编码,可提高编码的自适应性,有助于提高编码的效率。
  3.将Level和Run分开编码可降低对存储数据的复杂度。
  CAVLC熵编码的对象是经DCT变换和量化后得到的亮度和色度残差数据,量化后的4×4块残差数据具有如下特征:
  (1)经过帧间、帧内预测、DCT变换、量化后,残差块仅仅含有少许能量,除了低频部分含有非零系数外,宏块系数基本上为0。CAVLC使用游程编码的方式来表示连续的零,有效的提高了编码的压缩效率。
  (2)量化的数据经Zigzag扫描之后,低频部分非零系数幅值较大,而高频部分经常是由+1、-1等拖尾系数组成的序列,CAVLC对此类拖尾系数采用了与其他非零系数不同的编码方式。
  2.2 CAVLC编码算法分析
  2.2.1 CAVLC涉及的语法元素分析
  CAVLC 算法共涉及到5个语法元素需要编码,即coeff_token,total_zeros,level_prefix,level_suffix,run_before,每一个语法元素的具体含义如下:


【相关论文推荐】
  • H.264视频编码的研究
  • H.264熵编码的技术研究及H.264的应用展望
  • 基于CUDA的H.264视频编码实现
  • H.264标准二进制算术编码IP核设计
  • H.264在手机视频监控系统中的应用浅析
  • H.264标准介绍及其在IPTV中的应用
  • H.264视频压缩标准的研究
  • H.264的几种高质量色彩空间编码方法的分析
  • H.264/AVC网络视频编码失真评估的比特流层模型