




已阅读5页,还剩2页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
此文档收集于网络,如有侵权,请联系网站删除CAVLC和CABAC简介 1. CABACCAVLCin H2641. 什么是熵编码2. CAVLC3. CAVLC之手把手教你编码2. CABAC1.2. 简介3. CABAC编码详情4. 编码过程CABAC/CAVLCin H.264什么是熵编码?熵编码压缩是一种无损压缩,其实现原理是使用新的编码来表示输入的数据,从而达到压缩的效果。常用的熵编码有游程编码,哈夫曼编码和CAVLC编码等。CAVLCCAVLC(Context Adaptive VariableLength Coding)是在H.264/MPEG-4AVC中使用的熵编码方式。在H.264中,CAVLC以zig-zag顺序用于对变换后的残差块进行编码。CAVLC是CABAC的替代品,虽然其压缩效率不如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;若nA和nB都不存在,则nC=0。nC值用于选择VLC编码表,如下图所示。这里体现了上下文相关(contextadaptive)的特性,例如当nC值较小即周围块的非零系数较少时,就会选择比较短的码,从而实现了数据压缩。3. 查表获得coff_token的编码。根据之前编码和计算过程所得的变量TotalCoeffs、TrailingOnes和nC值可以查H.264标准附录CAVLC码表,即可得出coeff_token编码序列。4. 编码每个拖尾系数的符号,按zig-zag的逆序进行编码。每个符号用1个bit位来表示,0表示“+”,1表示“”。当拖尾系数超过三个时只有最后三个被认定为拖尾系数,引词编码顺序为从后向前编码。5. 编码除拖尾系数之外非零系数的level(Levels)。每个非零系数的level包括sign和magnitude,扫描顺序是逆zig-zag序。level的编码由前缀(level_prefix)和后缀(level_suffix)组成。前缀的长度在0到6之间,后缀的长度则可通过下面的步骤来确定:将后缀初始化为0。(若非零系数的总数超过10且拖尾系数不到3,则初始化为1)。编码频率最高(即按扫描序最后)的除拖尾系数之外的非零系数。若这个系数的magnitude超过某个门槛值(threshold),则增加后缀的长度。下表是门槛值的列表:6. 编码最后一个非零系数之前0的个数(totalZeos)。TotalZeros指的是在最后一个非零系数前零的数目,此非零系数指的是按照正向扫描的最后一个非零系数根据TotalCoeffs值,H.264标准共提供了25个变长表格供查找,其中编码亮度数据时有15个表格供查找,编码色度DC22块(4:2:0格式)有3个表格、编码色度DC24块(4:2:2格式)有7个表格。7. 编码每个系数前面0的数目(run_before)。扫描顺序为zig-zag的逆序。若run_before= total_zeros,则不需再计算run_before扫描序中的最后一个元素不需要计算run_before每个run_before的VLC编码取决于run_before自身及未编码的0的个数ZerosLeft。例如若ZerosLeft= 2,那么run_before只可能是0,1或2,因此使用两个bit即可表示。CAVLC之手把手教你编码转自:/sunshine1314/article/details/1685948这篇博客使用实例对上述过程做了详细的说明,尤其是有关Levels的计算方面做了重要的补充。下面是全文的转载:首先声明本文并不是我写的,文章来自本人同学(Sunrise),都是一起做的H264,比较了解,文章内容都是自己整理的,比较可信,因此整理到一起,我也偷个懒哈再次声明:文中用的标准是BS的正式标准,如果大家发现序号不对,参考着改过来就是了!编码过程:假设有一个4*4数据块0,3,-1,0,0,-1,1,0,1,0,0,0,0,0,0,0数据重排列:0,3,0,1,-1,-1,0,1,01)初始值设定:非零系数的数目(TotalCoeffs)=5;拖尾系数的数目(TrailingOnes)=3;最后一个非零系数前零的数目(Total_zeros)=3;变量NC=1;(说明:NC值的确定:色度的直流系数NC=-1;其他系数类型NC值是根据当前块左边4*4块的非零系数数目(NA)当前块上面4*4块的非零系数数目(NB)求得的,见毕厚杰书P120表6.10)suffixLength=0;i=TotalCoeffs=5;2)编码coeff_token:查标准(BSISO/IEC14496-10:2003)Table9-5,可得:If(TotalCoeffs=5&TrailingOnes=3&0=NC2)coeff_token=0000100;Code=0000100;3)编码所有TrailingOnes的符号:逆序编码,三个拖尾系数的符号依次是(0),(1),(1);即:TrailingOnesigni-=0;TrailingOnesigni-=1;TrailingOnesigni-=1;Code=0000100011;4)编码除了拖尾系数以外非零系数幅值Levels:过程如下:(1)将有符号的Leveli转换成无符号的levelCode;如果Leveli是正的,levelCode=(Leveli1)2;如果Leveli是负的,levelCode=-(Leveli1)1;(2)计算level_prefix:level_prefix=levelCode/(1suffixLength);查表9-6可得所对应的bitstring;(3)计算level_suffix:level_suffix=levelCode%(1(3suffixLength-1)&suffixLength6)suffixLength+;回到例子中,依然按照逆序,Leveli-=1;(此时i=1)levelCode=0;level_prefix=0;查表9-6,可得level_prefix=0时对应的bitstring=1;因为suffixLength初始化为0,故该Level没有后缀;因为suffixLength=0,故suffixLength+;Code=00001000111;编码下一个Level:Level0=3;levelCode=4;level_prefix=2;查表得bitstring=001;level_suffix=0;suffixLength=1;故码流为0010;Code=000010001110010;i=0,编码Level结束。5)编码最后一个非零系数前零的数目(TotalZeros):查表9-7,当TotalCoeffs=5,total_zero=3时,bitstring=111;Code=000010001110010111;6)对每个非零系数前零的个数(RunBefore)进行编码:i=TotalCoeffs=5;ZerosLeft=Total_zeros=3;查表9-10:依然按照逆序编码ZerosLeft=3,run_before=1run_before4=10;ZerosLeft=2,run_before=0run_before3=1;ZerosLeft=2,run_before=0run_before2=1;ZerosLeft=2,run_before=1run_before1=01;ZerosLeft=1,run_before=1run_before0不需要码流来表示Code=000010001110010111101101;编码完毕。CABAC简介CABAC(ContextAdaptive Binary Arithmatic Coding)也是H.264/MPEG-4AVC中使用的熵编码算法。CABAC在不同的上下文环境中使用不同的概率模型来编码。其编码过程大致是这样:首先,将欲编码的符号用二进制bit表示;然后对于每个bit,编码器选择一个合适的概率模型,并通过相邻元素的信息来优化这个概率模型;最后,使用算术编码压缩数据。CABAC编码详情CABAC编码之所以能取得很高的压缩比,是因为:a)根据每一个语法元素的上下文来选取预测模型;b)使用本地的统计数据来估计概率;c)使用算术编码而不是变长编码。编码一个符号需要经过下面几步:1. 二值化。CABAC使用的算术编码是基于二进制的算术编码,因此非二进制形式的编码首先要转化为二进制的形式表示。下面的2、3、4步2. 选择上下文模型。“上下文模型”是指对二值化后的符号中的bit位进行编码时使用的概率模型。概率模型与最近编码的符号相关,会有多个概率模型可供选择。3. 算术编码。算术编码器根据第2步选择的概率模型对每个bit进行编码。需要注意的是每个bit的子范围只有两个数:0和1。4. 更新预测模型。根据实际编码的值来更新所选择的预测模型。例如,如果所编码的二进制bit为1,则预测模型中的1计数要增加。编码过程下面将以mxdx为例解释编码过程,mxdx是motionvector difference in the x-direction的简写,通过宏块的子块之间运算获得。1. 二值化。对于|mvdx|9的数,使用下表进行编码,超过9的数使用Exp-Golomb编码。在这里,我们称编码后的第一个bit为bin1,第二个bit为bin2,以此推之,可以得到bin3,bin4等。2. 为每个bin选择一个上下文模型。bin1可以在三个模型之间进行选择,选择的依据是相邻的两个mxdx的绝对值之和,ek:ek = mxdxA+ mxdxB(A和B分别是当前块的上方块和左边块)根据ek值从下表中为bin1选择上下文模型:除bin
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 三年级信息技术上册 第十二课 我做小玩具教学设计 华中师大版
- 七年级生物上册 第一单元 第1章 第1节 生物的特征教学设计 (新版)新人教版
- 人教版六年级音乐下册 第四单元唱歌《爱我中华》教学设计
- 妇幼保健院医疗保健技术培训
- 七年级地理下册 第四章 第二节 土地资源与农业教学设计 中图版
- 冀教版(2024)七年级上册(2024)5.3 解一元一次方程教学设计
- 七年级数学下册 第六章 实数6.2 立方根教学设计 (新版)新人教版
- 人教2011课标版地理七年级下:6.2 亚洲的自然环境 教学设计
- 人教版 (新课标)七年级下册第四单元 生物圈中的人第一章 人的由来第一节 人的起源和发展教案配套
- 初中政治思品人教部编版七年级上册(道德与法治)享受学习教案设计
- 基于“三新”背景下的2025届新高考物理复习备考策略-课件
- 2024人防工程设计指南医疗救护工程分册
- 2024年海洋知识竞赛题库及答案(共70题)
- 应急管理数据标准化与共享
- 风险控制岗位招聘笔试题与参考答案(某大型国企)2024年
- 药剂科考勤管理制度
- 学徒签约合同协议书
- 山东省济南市等2地2023-2024学年高一下学期5月期中物理试题(解析版)
- 07SG111-2 建筑结构加固施工图设计深度图样
- 最简单高空作业安全免责协议书
- 大棚建设承包合同范本一
评论
0/150
提交评论