变长编码方法及装置制造方法及图纸

技术编号:3585668 阅读:164 留言:0更新日期:2012-04-11 18:40
本发明专利技术公开了一种变长编码方法,包括:获得输入数据块的残差系数序列,对该残差系数序列进行游程编码,得到level序列和run序列后,对level序列和run序列分别进行游程编码,然后再对得到的两游程码字对分别进行变长编码。本发明专利技术同时公开了一种变长编码装置,包括:预处理模块和变长编码模块。本发明专利技术进一步利用了level序列中为1的level的特征信息,和run序列中为0的run的特征信息,降低了压缩码率,提高了峰值信噪比,本发明专利技术可以应用于各种编码器,同时也与现有的国际H.264标准和国内AVS标准完全兼容。

【技术实现步骤摘要】

本专利技术涉及数据传输与处理
,具体涉及一种变长编码方法及装置
技术介绍
熵编码早在1950年就应用于视频编码,作为整个视频编码框架的最后 一个模块。熵编码的对象是之前所有模块生成的一系列的语法元素,包括 宏块类型、参考帧索引、编码块模板(CBP, Coded Block Pattern)、量化 步长(QP)、运动矢量的残差、变换和量化后的残差系数等。在所有这些 语法元素中,残差系数的信息量及最终编码后的数据量都是最大的,同时它 也是最具编码压缩空间的,因而 一直以来都是熵编码研究的重点。80年代中期出现了一个新的针对离散余弦变换(DCT)系数编码的变 长熵编码:技术即二维变长编码(2D-VLC )才支术,该:技术通过zig-zag扫描 将块系数表示成(run, level)的形式,并采用 一个变长码对该(mn, level) 数对进行编码。为提高块结束符(EOB, End of Block)的编码效率,提出了三维VLC (3D-VLC)技术,该技术对(last, run, level)对进行联合编码,其中,last 表示当前块系数是否为块内的最后一个非零系数。同时出现了针对宏块采用 帧内(intra)预测还是帧间(inter)预测法而设计不同VLC码表的方法。变长熵编码技术是基于上下文的编码技术,主要是将level及run分开, 分别对level和run建立上下文和进行编码,或者基于2D-VLC的上下文进 行编码,该技术的核心是上下文信息的使用及码表切换的方法。图1为现有的H.264标准中提出的变长编码方法的流程图,如图l所示,其具体步骤如下步骤101:对当前块进行zig-zag扫描,得到残差系数序列。步骤102:对得到的残差系数序列进行游程编码,得到level和run。其中,level为当前块中的非零系数,mn为当前块中位于各非零系数之前的零系数的个数。步骤103:对各level和各run进行变长编码。现有技术的缺点是,对各个level和各个run分别进行变长编码,而没 有考虑到各level之间和各run之间的联系,因此,可能还有信息冗余,编 码效率还可进一步提高。
技术实现思路
有鉴于此,本专利技术的主要目的在于提供一种变长编码方法及装置,以降低 压缩码率。为达到上述目的,本专利技术的技术方案是这样实现的 一种变长编码方法,包括获得输入数据块的残差系数序列,对该残差系数序列进行游程编码,得到 非零系数level序列和出现在非零系数之前的零系数的个数run序列;对level序列和run序列分别进行游程编码,分别得到对应的游程码字对, 对得到的两游程码字对分别进行变长编码。一种变长编码装置,包括预处理模块,用于对收到的输入数据块的level序列进行游程编码,将 得到的游程码字对(level, lev_pos )输出到变长编码模块,对收到的输入 数据块的run序列进行游程编码,将得到的游程码字对(run, run—pos ) 输出到变长编码模块;变长编码模块,对收到的游程码字对进行变长编码。 与现有技术相比,本专利技术通过在对当前块进行扫描,得到残差系数序列, 对该残差系数序列进行传统游程编码,得到level序列和run序列后,根据level序歹'J中绝对值为1的level,以及run序歹'J中为0的run,对level序列 和mn序列分别进行游程编码,然后再对得到的两游程码字对分别进行变长 编码,进一步利用了 level序列中为1的level的特征信息,和mn序列中为 0的mn的特征信息,降低了压缩码率,提高了峰值信噪比,本专利技术可以应 用于各种编码器,同时也与现有的国际H.264标准和国内AVS标准完全兼 容。附图说明图1为现有的H.264标准中提出的变长编码的流程图; 图2为本专利技术实施例一提供的变长编码的流程图3为本专利技术实施例一中对(level, lev—pos)序列对进行变长编码的流 程图4为本专利技术实施例一中对(mn, mn_pos)序列对进行变长编码的流 程图5为本专利技术实施例二提供的变长编码的流程图; 图6为本专利技术实施例提供的变长编码的装置框图; 图7为本专利技术实施例一提供的变长编码模块的结构示意图; 图8为本专利技术实施例二提供的变长编码模块的结构示意图; 图9为本专利技术实施例一和二提供的非零系数个数编码模块结构示意图; 图10为本专利技术实施例一和二提供的(level, lev—pos)序列对编码模块 结构示意图11为本专利技术实施例一和二提供的(run, mn_pos)序列对编码模块结 构示意图。具体实施例方式下面结合附图及具体实施例对本专利技术再作进一步详细的说明。图2是本专利技术实施例一提供的变长编码的流程图,如图2所示,其具体步骤如下步骤201:编码端对当前块进行zig-zag扫描,得到残差系数序列。本步骤中,也可采用zig-zag以外的方式对当前块进行扫描。本实施例中提到的块的大小可为4x4或8x8等。具体选取哪种分块方式取决于整个编码器的需要。步骤202:编码端对得到的残差系数序列进行传统游程编码,得到level序列和run序列,统计当前块的非零系数个数numcoeff,即level序列中包含的系凄t个凄t。本步骤中的传统游程编码指的是,现有的H.264标准中提到的游程编码,即level为当前块中的非零系数,run为当前块中位于各非零系数之前 的零系数的个数。步骤203:编码端根据Level序列中包含的绝对值为1的level,对level 序列进行进一步地游程编码,得到(level, lev一pos)序列对;根据run序列 中包含的为0的run,对run序列进行进一步地游程编码,得到(run, mn_pos )序列对。这里,(level , lev_pos )序列对中的level指的是,level序列中从高频 端到低频端的各绝对值非1的level; level—pos指的是,各绝对值非1的level 的相邻低频侧绝对值连续为1的level的个数;(run, run_pos )序列对中的 run指的是,run序列中从低频端到高频端的各绝对值非0的run; run—pos 指的是,各绝对值非0的run的相邻高频侧连续为0的run的个数。因此,本步骤中提到的对level序列进行进一步游程编码的过程如下 从level序列的高频端向低频端扫描即从右向左扫描,将第一个绝对 值非1的level作为第一对(level, lev_pos )中的level,将该level的相邻 低频侧绝对值连续为1的level的个数作为第一对(level, lev_pos)中的 lev_pos,按照同样的方法获取之后的(level, levjos)序列对,直至扫描 结束。本步骤中提到的对run序列进行进一步游程编码的过程如下从mn序列的低频端向高频端扫描即从左向右扫描,将第一个非0的 run作为第一对(run, run_pos )中的run,将该run的相邻高频侧连续为0 的run的个数作为该第 一对(mn, run_pos )中的mn_pos,按同样的方法获 取之后的(run, mn_pos)序列对,直至扫描结束。令level序列高频端绝对值连续为1的level的个数为tailingones, run 序列4氐频端连续为0的run本文档来自技高网
...

【技术保护点】
一种变长编码方法,其特征在于,包括:获得输入数据块的残差系数序列,对该残差系数序列进行游程编码,得到非零系数level序列和出现在非零系数之前的零系数的个数run序列;对level序列和run序列分别进行游程编码,分别得到对 应的游程码字对,对得到的两游程码字对分别进行变长编码。

【技术特征摘要】
1、一种变长编码方法,其特征在于,包括获得输入数据块的残差系数序列,对该残差系数序列进行游程编码,得到非零系数level序列和出现在非零系数之前的零系数的个数run序列;对level序列和run序列分别进行游程编码,分别得到对应的游程码字对,对得到的两游程码字对分别进行变长编码。2、 如权利要求1所述的方法,其特征在于,所述对level序列进行游程编 码包括根据level序列中绝对值为1的level,对level序列进行游程编码。3、 如权利要求1或2所述的方法,其特征在于,所述对run序列进行游程 编码包括根据run序列中为0的run,对run序列进行游程编码。4、 如权利要求2所述的方法,其特征在于,所述根据level序列中绝对值 为1的level,对level序列进行游程编码包括记录level序列中各绝对值非1 的level,以及该level的相邻低频侧连续为1的level的个数levjos,得到(level, level_pos)序歹'J对。5、 如权利要求4所述的方法,其特征在于,所述记录level序列中各绝对 值非1的level,以及该level的相邻低频侧连续为1的level的个数lev_pos为 从level序列的高频端向低频端依次记录。6、 如权利要求3所述的方法,其特征在于,所述根据run序列中为0的run, 对run序列进行游程编码包括记录run序列中各非0的run的run,并记录该 run的相邻高频侧连续为0的run的个数run_pos,得到(run, run_pos)序列对。7、 如权利要求6所述的方法,其特征在于,所述记录各非0的run的run, 并记录该run的相邻高频侧连续为0的run的个数run_pos为从run序列的低 频端向高频端依次记录。8、 如权利要求l所述的方法,其特征在于,所述对level序列和run序 列分别进行游程编码之后、对得到的两游程码字对分别进行变长编码之前进 一步包括对输入数据块中的非零系数的个数进行变长编码。9、 如权利要求8所述的方法,其特征在于,所述对输入数据块中的非 零系数个数进行变长编码包括根据输入数据块的上块和左块中包含的非零 系数个数,对输入数据块中的非零系数个数进行邻块预测,根据该预测值选 择变长编码VCL表,根据该VLC表对输入数据块中的非零系数个数编码。10、 如权利要求8所述的方法,其特征在于,所述对level序列经游程编码 得到的游程码字对进行变长编码包括A1 、根据输入数据块所处的宏块采用的是帧内预测还是帧间预测选取 对应的2DJ/LC表,确定2D—VLC表中的第一张表为默认的初始码表,用 确定的2D—VLC码表对level序列经游程编码得到的当前游程码字对(level, lev_pos)序列对编码;Bl、判断是否所有(level, lev_pos)序列对已编码完毕,若是,用确 定的码表对(level, lev_pos)对的结束标志编码;否则,执行步骤Cl;Cl、根据该刚编码完的(level, lev—pos)序列对中的level的绝对值, 判断编码下一 (level, lev_pos)序列对所用的2D一VLC码表是否需要更新, 若是,根据所述绝对值,确定编码下一 (level, levjos)序列对所用的码表, 对下一 (level, lev_pos)序列对编码,转至步骤Bl;否则,采用与刚编码 完的(level, lev_pos)序列对相同的码表,对下一 (level, levjos)序列对 编码,转至步骤Bl。11、 如权利要求8所述的方法,其特征在于,所述对level序列和run 序列分别进行游程编码之后、对得到的两游程码字对分别进行变长编码之前 进一步包括对level序列的高频端绝对值连续为1的level的个数编码。12、 如权利要求11所述的方法,其特征在于,对level序列的高频端绝 对值连续为1的level的个数编码包括根据输入数据块中的非零系数个数 选择VLC表,根据该VLC表对level序列的高频端绝对值连续为1的level 的个数编码。13、 如权利要求11所述的方法,其特征在于,所述对levd序列经游程 编码得到的游程码字对进行变长编码包括A2、根据输入数据块所处的宏块采用的是帧内预测还是帧间预测选取 对应的2D—VLC表,确定2D一VLC表中的第一张表为默认的初始码表,用 确定的2D一VLC码表对level序列经游程编码得到的当前游程码字对(level, lev_pos)序列对编石马;B2、判断是否所有(level, lev_pos)序列对已编码完毕,若是,确定 (level, lev_pos)序列对编码结束;否则,执行步骤C2;C2、根据该刚编码完的(level, lev_pos )序列对中的level的绝对值, 判断编码下一 (level, lev_pos)序列对所用的2D—VLC码表是否需要更新, 若是,根据所述绝对值,确定编码下一 (level, levj)os)序列对所用的码表, 对下一 (level, lev_pos)序列对编码,转至步骤B2;否则,采用与刚编码 完的(level, lev_pos)序列对相同的码表,对下一 (level, lev_pos )序列对 编码,转至步骤B2。14、 如权利要求1或10或13所述的方法,其特征在于,所述对level 序列和run序列分别进行游程编码之后进一步包括从level序列的高频端 向低频端扫描,对绝对值为1的level的正负符号编码。15、 如权利要求14所述的方法,其特征在于,所述对绝对值为1的level 的正负符号编码包括当绝对值为1的level为正时,确定编码指示位为1; 当绝对值为1的level为负时,确定编码指示位为O。16、 如权利要求1或10或13所述的方法,其特征在于,所述对run序列 经游程编码得到的游程码字对进行变长编码包括A3、根据输入数据块所处的宏块采用的是帧内预测还是帧间预测选取 对应的2D一VLC表,确定2D—VLC表中的第 一 张表为默认的初始码表,用 确定的2D一VLC码表对run序列经游程编码得到的当前游程码字对(run, run_pos)序列对编码;B3、判断是否所有(run, run_pos)序列对已编码完毕,若是,用确定 的码表对(run, run_pos)对的结束标志编码;否则,执行步骤C3;C3、 # 据该刚编码完的(run, run_pos )序列对中的run值,判断编码下一(run, run_pos)序列对所用的2D—VLC码表是否需...

【专利技术属性】
技术研发人员:金欣崔春晖熊联欢
申请(专利权)人:华为技术有限公司
类型:发明
国别省市:94[中国|深圳]

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1
相关领域技术
  • 暂无相关专利