H2熵编码具体算法
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
1.C百度文库VLC概念
CAVLC即基于上下文的自适应变长编码。CAVLC的本 质是变长编码,它的特性主要体现在自适应能力上, CAVLC可以根据已编码句法元素的情况动态的选择编码中 使用的码表,并且随时更新拖尾系数后缀的长度,从而获 得极高的压缩比。H.264标准中使用了CAVLC对4*4模块的 亮度和色度残差数据进行编码。
∴经查表可知码流为0000100 ∴code=0000100
4.3 编码每个拖尾系数的符号 对于每个拖尾系数(±1)只需要指明其符号,
其符号用一个比特表示(0表示+ ,1表示-)。编 码的顺序是按照反向扫描的顺序,从高频数据 开始。 例:设有一个4*4块数据(假定NC=0)
0 3 -1 0
0 -1 1 0
例:设有一个4*4块数据(假定NC=0) 0 3 -1 0 0 -1 1 0 1000 0000
∵按照反向扫描顺序进行编码 Level[1]=1 且 Level[1]>0
∴levelCode=(Level[1]<<1)–2=0 ∵初始化suffixLength=0 ∴level_prefix =levelCode/(1<<suffixLength)=0
变量suffixLength 是基于上下文模式自适应更新 的,suffixLength 的更新与当前的suffixLength
的值以及已经解码好的非零系数的值(Level)有关。
suffixLength数值的初始化以及更新过程如下所
示: 普通情况下suffixLength初始化为0 ,但是当块
中有多于10个非零系数并且其中拖尾系数的数目 少于3个,suffixLength 初始化为 1 。 编码在最高频率位置上的非零系数。 如果当前已经解码好的非零系数值大于预先定义 好的阈值,变量suffixLength加1 。
B A
nA和nB分别为在当前宏块左侧和 上侧的变换系数幅值blkA和blkB中 的非0变换系数幅值数量(由 TotalCoeff( coeff_token )给出)
例:设有一个4*4块数据(假定NC=0) 0 3 -1 0 0 -1 1 0 1000 0000
∵非零系数的数目(TotalCoeffs) = 5; 拖尾系数的数目(TrailingOnes)= 3; NC=0
2.CAVLC 的基本原理
CAVLC用于亮度和色度残差数据的编码。残差经 过变换量化后的数据表现出如下特性:
4*4块数据经过预测、变换、量化后,非零系数主 要集中在低频部分,而高频系数大部分是零;
量化后的数据经过zig-zag扫描,DC系数附近的非 零系数值较大,而高频位置上的非零系数值大部 分是+1和-1 ;
例:设有一个4*4块数据(假定NC=0)
0 3 -1 0
0 -1 1 0
1000
0000 非零系数的数目(TotalCoeffs) = 5; 拖尾系数的数目(TrailingOnes)= 3; 最后一个非零系数前零的数目(Total_zeros)=3;
对非零系数数目和拖尾系数数目的编码是通过 查表的方式,共有4个变长表格和1个定长表格可 供选择。表格的选择是根据变量NC(Number Current,当前块值)的值来选择的,在求变量NC 值的过程中,体现了基于上下文的思想。
1000
0000 ∵逆序编码,三个拖尾系数的符号依次是+,-,-; ∴码流为011 ∴code=0000100 011
4.4 编码除了拖尾系数之外的非零系数的幅 值(Levels)
非零系数的幅值(Levels)按照反向扫描顺序 进行编码,即从高频向低频顺序编码。
非零系数的幅值(Levels)的组成分为两个部分, 前缀(level_prefix)和后缀(level_suffix)。
相邻的4*4块的非零系数的数目是相关的。
CAVLC充分利用残差经过整数变换、量化后数 据的特性进行压缩,进一步减少数据中的冗余信 息,为H.264卓越的编码效率奠定了基础。
3.CAVLC 的上下文模型
利用相邻已编码符号所提供的相关性,为所 要编码的符号选择合适的上下文模型。利用合适 的上下文模型,就可以大大降低符号间的冗余度。
第6章 H.264/AVC 编码器原理
第6章 H.264/AVC 编码器原理
6.8 CAVLC(基于上下文自适应的可变 长编码)
6.9 CABAC(基于上下文的自适应二进 制算术熵编码)
6.10 码率控制 6.11 去方块滤波 6.12 其余特征
6.8 CAVLC(基于上下文自适应的可 变长编码)
例:设有一个4*4块数据(假定NC=0)
0 3 -1 0 0 -1 1 0 1000 0000
数据重排列: 0,3,0,1,-1,-1,0,1,0,0,0,0,0,0,0,0
4.2 编码非零系数的数目(TotalCoeffs)以及拖尾系 数的数目(TrailingOnes) 非零系数数目的范围是从0到16,拖尾系数数 目的范围是从0到3。如果±1的个数大于3个,只 有最后3个被视为拖尾系数,其余的被视为普通的 非零系数。
第一个阈值是0 ,表示在第一个非零系数被编码 后,suffixLength的值总是增加1 。
编码过程如下: ①将有符号的Level[i]转换成无符号的levelCode;
如果Level[i]是正的, levelCode=(Level[i]<<1)–2; 如果Level[i]是负的, levelCode=-(Level[i]<<1)–1; ②计算level_prefix: level_prefix =levelCode/(1<<suffixLength); ③计算level_suffix: level_suffix = levelCode %(1<<suffixLength); ④根据suffixLength的值来确定后缀的长度; ⑤suffixLength updata;
4.CAVLC 的编码过程
4.1 重排序 在编码器中,16*16帧内模式编码的宏块里,
每个已量化变换系数的4*4亮度块的DC系数首先以 图1所示的顺序扫描。剩余的15个AC系数从第二个 位置开始扫描。类似的,色度的2*2DC系数以光栅 顺序首先扫描,剩余的15个AC系数从从第二个位 置开始扫描。
图1
CAVLC即基于上下文的自适应变长编码。CAVLC的本 质是变长编码,它的特性主要体现在自适应能力上, CAVLC可以根据已编码句法元素的情况动态的选择编码中 使用的码表,并且随时更新拖尾系数后缀的长度,从而获 得极高的压缩比。H.264标准中使用了CAVLC对4*4模块的 亮度和色度残差数据进行编码。
∴经查表可知码流为0000100 ∴code=0000100
4.3 编码每个拖尾系数的符号 对于每个拖尾系数(±1)只需要指明其符号,
其符号用一个比特表示(0表示+ ,1表示-)。编 码的顺序是按照反向扫描的顺序,从高频数据 开始。 例:设有一个4*4块数据(假定NC=0)
0 3 -1 0
0 -1 1 0
例:设有一个4*4块数据(假定NC=0) 0 3 -1 0 0 -1 1 0 1000 0000
∵按照反向扫描顺序进行编码 Level[1]=1 且 Level[1]>0
∴levelCode=(Level[1]<<1)–2=0 ∵初始化suffixLength=0 ∴level_prefix =levelCode/(1<<suffixLength)=0
变量suffixLength 是基于上下文模式自适应更新 的,suffixLength 的更新与当前的suffixLength
的值以及已经解码好的非零系数的值(Level)有关。
suffixLength数值的初始化以及更新过程如下所
示: 普通情况下suffixLength初始化为0 ,但是当块
中有多于10个非零系数并且其中拖尾系数的数目 少于3个,suffixLength 初始化为 1 。 编码在最高频率位置上的非零系数。 如果当前已经解码好的非零系数值大于预先定义 好的阈值,变量suffixLength加1 。
B A
nA和nB分别为在当前宏块左侧和 上侧的变换系数幅值blkA和blkB中 的非0变换系数幅值数量(由 TotalCoeff( coeff_token )给出)
例:设有一个4*4块数据(假定NC=0) 0 3 -1 0 0 -1 1 0 1000 0000
∵非零系数的数目(TotalCoeffs) = 5; 拖尾系数的数目(TrailingOnes)= 3; NC=0
2.CAVLC 的基本原理
CAVLC用于亮度和色度残差数据的编码。残差经 过变换量化后的数据表现出如下特性:
4*4块数据经过预测、变换、量化后,非零系数主 要集中在低频部分,而高频系数大部分是零;
量化后的数据经过zig-zag扫描,DC系数附近的非 零系数值较大,而高频位置上的非零系数值大部 分是+1和-1 ;
例:设有一个4*4块数据(假定NC=0)
0 3 -1 0
0 -1 1 0
1000
0000 非零系数的数目(TotalCoeffs) = 5; 拖尾系数的数目(TrailingOnes)= 3; 最后一个非零系数前零的数目(Total_zeros)=3;
对非零系数数目和拖尾系数数目的编码是通过 查表的方式,共有4个变长表格和1个定长表格可 供选择。表格的选择是根据变量NC(Number Current,当前块值)的值来选择的,在求变量NC 值的过程中,体现了基于上下文的思想。
1000
0000 ∵逆序编码,三个拖尾系数的符号依次是+,-,-; ∴码流为011 ∴code=0000100 011
4.4 编码除了拖尾系数之外的非零系数的幅 值(Levels)
非零系数的幅值(Levels)按照反向扫描顺序 进行编码,即从高频向低频顺序编码。
非零系数的幅值(Levels)的组成分为两个部分, 前缀(level_prefix)和后缀(level_suffix)。
相邻的4*4块的非零系数的数目是相关的。
CAVLC充分利用残差经过整数变换、量化后数 据的特性进行压缩,进一步减少数据中的冗余信 息,为H.264卓越的编码效率奠定了基础。
3.CAVLC 的上下文模型
利用相邻已编码符号所提供的相关性,为所 要编码的符号选择合适的上下文模型。利用合适 的上下文模型,就可以大大降低符号间的冗余度。
第6章 H.264/AVC 编码器原理
第6章 H.264/AVC 编码器原理
6.8 CAVLC(基于上下文自适应的可变 长编码)
6.9 CABAC(基于上下文的自适应二进 制算术熵编码)
6.10 码率控制 6.11 去方块滤波 6.12 其余特征
6.8 CAVLC(基于上下文自适应的可 变长编码)
例:设有一个4*4块数据(假定NC=0)
0 3 -1 0 0 -1 1 0 1000 0000
数据重排列: 0,3,0,1,-1,-1,0,1,0,0,0,0,0,0,0,0
4.2 编码非零系数的数目(TotalCoeffs)以及拖尾系 数的数目(TrailingOnes) 非零系数数目的范围是从0到16,拖尾系数数 目的范围是从0到3。如果±1的个数大于3个,只 有最后3个被视为拖尾系数,其余的被视为普通的 非零系数。
第一个阈值是0 ,表示在第一个非零系数被编码 后,suffixLength的值总是增加1 。
编码过程如下: ①将有符号的Level[i]转换成无符号的levelCode;
如果Level[i]是正的, levelCode=(Level[i]<<1)–2; 如果Level[i]是负的, levelCode=-(Level[i]<<1)–1; ②计算level_prefix: level_prefix =levelCode/(1<<suffixLength); ③计算level_suffix: level_suffix = levelCode %(1<<suffixLength); ④根据suffixLength的值来确定后缀的长度; ⑤suffixLength updata;
4.CAVLC 的编码过程
4.1 重排序 在编码器中,16*16帧内模式编码的宏块里,
每个已量化变换系数的4*4亮度块的DC系数首先以 图1所示的顺序扫描。剩余的15个AC系数从第二个 位置开始扫描。类似的,色度的2*2DC系数以光栅 顺序首先扫描,剩余的15个AC系数从从第二个位 置开始扫描。
图1