首页> 中国专利> 一种基于上下文的自适应熵编/解码方法

一种基于上下文的自适应熵编/解码方法

摘要

一种基于上下文的自适应熵编/解码方法,编码时:扫描当前变换块中已被量化的DCT系数,由此形成(level,run)数对序列;然后按扫描的逆向顺序对数对序列中每一数对进行熵编码,在编码中,利用已被编码块中已完成编码的数对的值动态自适应构造上下文统计模型,同时,也提出一个上下文模型加权融合技术来进一步提高模型的压缩性能;用上一步骤所获得的上下文统计模型来驱动熵编码。基于上下文的自适应熵解码方法是编码方法的逆。本发明实现了利用不多的上下文状态数刻画长记忆马尔可夫模型,具有较高的压缩性能。

著录项

  • 公开/公告号CN1741616A

    专利类型发明专利

  • 公开/公告日2006-03-01

    原文格式PDF

  • 申请/专利号CN200510104853.0

  • 发明设计人 高文;张宁;武筱林;

    申请日2005-09-23

  • 分类号H04N7/26(20060101);H03M7/30(20060101);

  • 代理机构11205 北京同立钧成知识产权代理有限公司;

  • 代理人刘芳

  • 地址 100085 北京市海淀区上地东路1号盈创动力A座701室

  • 入库时间 2023-12-17 17:03:48

法律信息

  • 法律状态公告日

    法律状态信息

    法律状态

  • 2022-09-02

    未缴年费专利权终止 IPC(主分类):H04N 7/26 专利号:ZL2005101048530 申请日:20050923 授权公告日:20080716

    专利权的终止

  • 2008-07-16

    授权

    授权

  • 2006-04-26

    实质审查的生效

    实质审查的生效

  • 2006-03-01

    公开

    公开

说明书

技术领域

本发明涉及的技术领域是多媒体(图像,视频,音频)压缩及传输,特别是一种基于上下文建模的用于信号压缩的DCT系数自适应熵编/解码方法。本发明的目的在于改进DCT系数自适应熵编码时统计上下文模型的质量。在所有数据压缩技术和系统中,自适应熵编码起至关重要的作用,而自适应熵编码必须由统计上下文模型所驱动。统计上下文模型的好坏将最终决定整个系统的压缩性能。

背景技术

离散余弦变换(Discrete Cosine Transform,简称DCT)被广泛地应用于视频/图像/音频信号的压缩中。经过DCT变换,信号的统计和主观冗余性可以更好地被理解、利用和去除。因此,变换后的信号也更适于压缩。当前大多数的国际、国内信号压缩标准(如JPEG、MPEG、H.264、中国音频/视频标准(Audio video standard,简称AVS))均采用了在DCT变换域中进行编码的方式,这充分体现了DCT变换的有效性。然而DCT变换自身并不会产生任何数据量的减少,这是因为变换后系数的数目与信号原采样数是相同的。真正实现压缩效果的是DCT系数的熵编码过程。任何DCT系数的熵编码方法,如哈夫曼(Huffman)码、算术码,都必须利用对DCT系数概率分布的估计。

在一个实用的基于DCT的信号压缩系统中,DCT系数将按照某种约定的扫描顺序依次进行熵编码。最流行的扫描顺序之一是JPEG和MPEG标准中所采用的zigzag扫描。本发明中的方法具有通用性,可以适用于任何DCT系数的扫描顺序。

如果用x1,x2,…,xn代表扫描后的DCT系数序列,其中N反映DCT变换所采用的块的大小,那么编码该序列所需的最小码长为:

>>>L>min>>=>->>log>2> >Π>>i>=>1>>N>>P>>(>>x>i>>|>>x>>i>->1> >)>>.> >

其中,xi-1代表当前系数xi之前所有系数构成的序列{xi-1,xi-1,…x1}。如果条件概率P(xi|xi-1)已知,自适应算术编码可以趋近理想最小码长Lmin。在条件概率估计下,算术编码可以实现编码长度问题的关键在于如何进行概率估计以使成为条件概率P(xi|xi-1)的良好估计。表示序列xi-1中对当前系数xi的统计特性有重要意义的某个子序列,称为模型上下文(Context)。所估计的条件概率用作信源的统计模型。

以概率估计形式为体现的统计上下文模型是所有信号压缩系统的核心。模型质量即概率估计的精确度将最终决定压缩性能。

诺基亚(Nokia)于2001年针对H264标准参考模型TML85提出了一个对DCT系数块的(run,level)(level是非零残差系数,run代表当前非零系数与前一个非零系数之间的零系数个数)数对序列进行自适应二值算术编码的方法。该方法按照与数对扫描生成时“相同”的顺序依次对各数对进行编码,编码时仅用本系数块中最临近的level值构造上下文(一阶Markov模型)。针对该方法的公开号为US2004112683的专利公布了一种编码变换系数的方法,通过正、反两次扫描完成对DCT系数块的编码。在首次正向扫描中根据系数的物理频率位置构造上下文对系数的第一位面(即Significant Map)进行编码。在二次逆扫描中完成对非零系数其它位面的编码。但此方法没有刻画长记忆马尔可夫(Markov)模型,压缩性能相对较低。

发明内容

本发明的目的在于针对上述现有编码技术存在的不足,提供一种基于上下文建模的用于信号压缩的DCT系数自适应熵编/解码方法,改进了现有DCT系数熵编/解码技术,为中国AVS提供一个高性能熵编码模块,使得中国AVS系统的整体性能达到甚至超过当前世界最先进视频压缩技术的水平。

为实现上述目的,本发明采用了一种基于上下文建模的用于信号压缩的DCT系数自适应熵编/解码方法,其中,编码时,执行以下步骤:

步骤1、扫描当前经过DCT变换和量化后的系数块,形成(level,run)数对序列,得到非零系数的个数值;初始化所述系数块的上下文模型;

步骤2、如果所述非零系数的个数值为零,则得到EOB信息(EOB为块结束标记End of Block),即一个(0,0)数对;如果所述非零系数的个数值不为零,则在扫描结果中查找所述非零系数个数位置上的(level,run)数对;

步骤3、如果对第一个系数编码,则根据空序列构造第一上下文;否则,根据所述系数块中已完成编码的所有数对构造第一上下文,并利用上下文加权方式,对当前level的绝对值进行熵编码;

步骤4、如果所述非零系数的个数为零则编码结束;否则,根据所述系数块中已完成编码的所有数对以及步骤3中所述已编码的level的绝对值,对level的符号位进行编码;

步骤5、根据所述系数块中已完成编码的所有数对以及步骤3与4中所述已编码的当前level的绝对值与符号位构造第二上下文,对run进行熵编码;

步骤6、对所述非零系数的数量值进行减1操作,执行步骤2。

解码时,执行以下步骤:

步骤1、初始化上下文模型;

步骤2、逆序扫描第一个(Level,Run)数对中Level幅值,根据上下文模型解码得到第一个Level幅值;

步骤3、如果所得到的Level幅值为零,则得到EOB信息,即一个(0,0)数对,执行步骤7;否则,执行步骤4;

步骤4、解码得到level的符号位;

步骤5、根据已完成解码的所有数对以及步骤2与3中刚解码的当前level的值构造上下文,解码得到Run;

步骤6、根据已完成解码的所有数对构造上下文,并利用上下文加权技术,解码得到下一个(Level,Run)数对中level的绝对值;执行步骤3;

步骤7、根据所述解码得到的(Level,Run)数对序列恢复所述系数块。

考虑到实用性和兼容性,本发明的技术细节向适于中国AVS基准版本的方向进行了细致调节,对现行中国AVS系统做出了自然而重大的改进扩展。

(1)本发明按照与数对扫描生成时“相反”的顺序依次对各数对进行编码,这一逆扫描序的编码顺序明显提高了上下文模型的有效性。

(2)同时,编码时利用本系数块中所有已完成编码的(level,run)数对构造上下文(高阶Markov模型),并创新性使用了上下文加权技术,该方法可以通过将多个上下文模型融合为一体来改进压缩性能。

(3)本发明采用了一种创新的上下文量化方法,实现了利用不多的上下文状态数刻画长记忆马尔可夫模型,从而避免在刻画高阶马尔可夫模型时遭受上下文稀释问题的不良影响。

本发明在实现上述目的时相对现有技术并没有增加计算复杂度,适合实时应用,并且与中国AVS基准视频编解码框架具有兼容性。

下面结合附图和实施例,对本发明的技术方案做进一步的详细描述。

附图说明

图1是本发明的编码流程图;

图2是本发明的解码流程图;

图3是zig-zag扫描示例;

图4是本发明对块系数的编码顺序。

具体实施方式

如图1、2所示为本发明的实施例一,具体编码步骤为:

步骤101、扫描当前经过DCT变换和量化后的系数块,形成(level,run)数对序列,得到非零系数的个数值;初始化所述系数块的上下文模型;

步骤102、如果所述非零系数的个数值为零,则得到EOB信息,即一个(0,0)数对;如果所述非零系数的个数值不为零,则在扫描结果中查找所述非零系数个数位置上的(level,run)数对;

步骤103、如果对第一个系数编码,则根据空序列构造第一上下文;否则,根据所述系数块中已完成编码的所有数对构造第一上下文,并利用上下文加权方式,对当前level的绝对值进行熵编码;构造第一上下文包括:定义两个随机变量,第一个随机变量用于记录本系数块中已完成编码的所有数对中level的幅值变化信息,第二个随机变量记录在当前待编码level在逆扫描序中的位置;根据所述两个随机变量,通过上下文加权构造第一上下文,利用不多的上下文状态描述长记忆马尔可夫模型;

步骤104、如果所述非零系数的个数为零则编码结束;否则,根据所述系数块中已完成编码的所有数对以及步骤3中刚编码的level的绝对值,对level的符号位进行编码;

步骤105、根据所述系数块中已完成编码的所有数对以及步骤3与4中刚编码的当前level的值构造第二上下文,对run进行熵编码;构造第二上下文包括:定义两个随机变量,第一个随机变量用于记录本系数块中已完成编码的所有数对中level的幅值变化信息,另一个记录步骤3中所述已编码的当前level的绝对值,通过这两个变量构造上下文对run进行编码;

步骤106、对所述非零系数的数量值进行减1操作,执行步骤2。

解码时,执行以下步骤:

步骤201、初始化上下文模型;

步骤202、逆序扫描的第一个(Level,Run)数对中Level幅值,根据上下文模型解码得到第一个Level幅值;

步骤203、如果所得到的Level幅值为零,则得到EOB信息,即一个(0,0)数对,执行步骤7;否则,执行步骤4;

步骤204、解码得到level的符号位;

步骤205、根据本系数块中已完成解码的所有数对以及步骤2与3中刚解码的当前level的值构造上下文,解码得到Run;

步骤206、根据本系数块中已完成解码的所有数对构造上下文,并利用上下文加权技术,解码得到下一个(Level,Run)数对中level的绝对值;执行步骤3;

步骤207、根据所述解码得到的(Level,Run)数对序列恢复所述系数块。

以下为本发明的实施例二,实施例2是本发明在中国AVS中的实施:

对本实施例关键技术的描述:

1、DCT系数块的扫描顺序与编码顺序:

DCT系数的扫描是一个将二维或多维DCT系数排列为一维序列的过程。所遵循的原则是使排列后系数为零的概率呈现递增规律。JPEG、MPEG中的经典zigzag扫描、中国AVS系数块的扫描以及H264中针对不同系数块大小、不同场/帧模式的扫描方式均遵循这一规律。

扫描后的一维系数随机序列近似满足为零概率递增的规律。转化为(level,run)数对后,我们按照扫描逆序及系数“非零”概率递增的顺序对每一数对进行编码。

2、待编码元素的二值化:

在执行进行二值算术编码以前,首先需要把待编码元素:level和run的值转化为一系列的二值决定(Binary Decision)。

level为有符号整数。首先分离出符号位,用1比特“0/1”表示“+/-”;剩余的绝对值部分为非负整数,通过Unary表示实现二值化。如:-2的二值化为(1)001,+1的二值化为(0)01。

run为无符号整数。直接通过Unary表示实现二值化。

  非负整数     Bin    String  0  1  2  3  4  5  …    13  14  …  1  0   1  0   0   1  0   0   0   1  0   0   0   0   1  0   0   0   0   0   1  -   -   -   -   -   -  0   0   0   0   0   0   0   0   0   0    0    0    0    1  0   0   0   0   0   0   0   0   0   0    0    0    0    0    1  -   -   -   -   -   -   -   -   -   -    -    -    -    -    -        Bin  1   2   3   4   5   6   7   8   9   10   11   12   13   14   15  …

表1:二值化实现

表1给出了对非负整数通过Unary表示进行二值化的结构。可以看到二值化的结果由前缀和后缀组成:前缀码为若干个0组成的字符串,后缀为末尾一个1;二值化后的字符串称为一个bin string,其中每个位置的0或1称为一个bin;

3、上下文的定义和量化:

用非负整数变量Lmax纪录每一待编码(level,run)数对之前本系数块中已完成编码的最大level幅值。每一系数块编码前Lmax初始化为0。

按表2所示将Lmax量化为5级选择Primary上下文序号。

  Lmax  0  1  2  [3,4]  [5,+∞)  Primary    Context  0  1  2  3  4

表2:Primary上下文的量化

Lmax起到纪录本系数块的编码历史并对当前(level,run)数对按不同统计特性分类的效果。编码当前level和run的具体二值化结果时,不同的bin将根据表3进一步选定Secondary上下文序号。

  模型号           上下文模型编码内容  0用该上下文模型编码absLevel的第一个bin(比如,EOB)  1如果absLevel存在第二个bin,用该上下文模型编码该bin  2如果absLevel存在第三个或者更多bin,用这个上下文模型编码这些bin  3如果absLevel=1,用该上下文模型编码run的第一个bin.  4如果absLevel=1且run存在第二个bin或者更多,用该上下文模型编码这些bin  5如果absLevel>1,用该上下文模型编码run的第一个bin  6如果absLevel>1,且run存在第二个bin后者更多,用该上下文模型编码这些bin

表3:Secondary上下文结构

编码每一个二值决定时,根据Primary上下文序号(0到4)和Secondary上下文序号(0到6)从共35个上下文中选择相应上下文,利用该上下文下的概率估计驱动算术编码器。

4、上下文加权方式:

为进一步提高EOB信息的编码效率,ReverseP表示待编码的level在系数逆扫描顺序中的位置。每一系数块编码前Lmax初始化为0。对8×8DCT系数块,ReverseP限制于[0,63],均匀量化为32级作为伴随上下文序号。

对absLevel的第一个bin进行编码时,根据Primary上下文序号和Secondary上下序号(值为0)选择一个上下文,设该上下文下的概率估计为p1;根据ReverseP从32个伴随上下文中选择另一上下文,设该上下文下的概率估计为p2。以p1和p2的简单加权:(p1+p2)/2驱动二值算术编码器。

以下为实施例二的流程,具体编码流程为:

步骤1、扫描被编码DCT系数块,形成(level,run)数对序列,得到非零系数的个数,变量icoef表示非零系数的个数。对每个含有非零DCT系数的块,首先采用zigzag扫描,按照自左上到右下扫描顺序形成(level,run)数对序列,icoeff的值为7。编码时将按照数对序列形成的逆序依次编码每个数对的level和run,最后的(0,0)数对表示数据块编码的结束信息EOB;

图3是zigzag扫描示例,图4是本发明对块系数的编码顺序。

步骤2、判断变量icoef的值是否为零,如果是,则给变量(level,run)赋值(0,0);如果变量icoef的值不为零,则查找扫描结果中第icoef位置上的(level,run)值;初始化上下文变量Lmax=0,ReverseP=0。icoeff的值减小为0时插入的(0,0)数对表示系数块结束信息EOB。

步骤3、根据本系数块中已完成编码的所有(level,run)数对构造上下文,并利用上下文加权技术,编码level的绝对值。根据当前level的值获得其绝对值absLevel的二值化表示。absLevel的二值化过程详见表1:由absLevel表示的系数幅值采用Unary表示进行二值化,即:若干个“0”作为前缀和一个“1”作为后缀,0的个数等于absLevel。

编码absLevel第一个bin的上下文模型:根据Lmax的值选择Primary上下文序号(表2),Secondary上下文序号为0;同时,根据ReverseP的值选择伴随上下文序号;应用上下文加权技术编码第一个bin。

编码absLevel其它bin的上下文模型:根据Lmax的值选择Primary上下文序号,再根据当前absLevel二值化后bin的位置选择Secondary上下文序号(见表3)进行编码。

步骤4、如果变量icoef的值为零则编码结束。

步骤5、如果变量icoef的值不为零,则根据(level,run)值,对level的符号位进行编码;level的符号位采用等概率进行编码,若为负数,用二值算术编码器编码“1”,否则二值算术编码器编码“0”。

步骤6、根据本系数块中已完成编码的所有数对以及步骤104中刚编码的当前level的值构造上下文,对run进行编码。run的二值化过程见表1;根据Lmax的值选择Primary上下文序号,由当前编码的(level,run)数对中level的幅值以及当前编码的run的bin的位置选择Secondary上下文序号(见表3)进行编码;

步骤7、对变量icoef的值进行减1操作;执行步骤2。

  (Level,Run)  (1,4) (-1,2) (-2,2)  (1,1)  (3,0) (-2,0)  (9,0)  (0,0)  Lmax  0 1  1  2  2  3  3  9  Primary Context ID  0 1  1  2  2  3  3  4  ReverseP  0 5  8  11  13  14  15  16  Accompany Context ID  0 2  4  5  6  7  7  8  Secondary  Context ID  AbsLevel  第一个bin  0 0  0  0  0  0  0  0  AbsLevel  第二个bin  1 1  1  1  1  1  1  -  AbsLevel  其它bin  - -  2  -  2  2  2  -  Run第一个  bin  3 3  5  3  5  5  5  -  Run其它bin  4 4  6  4  -  -  -  -

表4:一个上下文模型号选择的实例

最后应说明的是:以上实施例仅用以说明本发明的技术方案而非限制,尽管参照较佳实施例对本发明进行了详细说明,本领域的普通技术人员应当理解:依然可以对本发明的技术方案进行修改或者等同替换,而不脱离本发明技术方案的精神和范围,其均应涵盖在本发明请求保护的技术方案的范围当中。

去获取专利,查看全文>

相似文献

  • 专利
  • 中文文献
  • 外文文献
获取专利

客服邮箱:kefu@zhangqiaokeyan.com

京公网安备:11010802029741号 ICP备案号:京ICP备15016152号-6 六维联合信息科技 (北京) 有限公司©版权所有
  • 客服微信

  • 服务号