一种实现算术编解码的方法及装置的制作方法

文档序号:6563731阅读:262来源:国知局
专利名称:一种实现算术编解码的方法及装置的制作方法
技术领域
本发明涉及图像编码技术领域,尤其涉及一种在算术编码器进行图像编码过程中的算术编解码技术。
背景技术
在图像编码过程中涉及的算术编码处理过程。所述算术编码是通过将编码符号序列映射到
]>当编码MPS符号时,可以认为PLPS=1516PLPS,]]>根据上面的公式,即LG_PMPS=1516,]]>由此可以计算得到LG_PMPS=LG_PMPS-LG_PMPS>>4,即更新后的对数域的MPS概率值LG_PMPS为更新前的对数域的MPS的概率值LG_PMPS减去更新前的对数域的MPS的概率值LG_PMPS右移4位后的数值LG_PMPS>>4。
所述的更新后的对数域的MPS概率值还可以为采用更新前的对数域的MPS的概率值LG_PMPS除于2的整数次幂的数值获得,仍以上例,具体为LG_PMPS=LG_PMPS-LG_PMPS/16。
(三)当编码LPS的时候,仍如

图1所示首先,假设在原数域上当前编码区间为R1,MPS对应的区间R2,在原数域上,range=range×PLPS=range-range_MPS,low值需要上调range_new=R1-R2;(2)low_new=low+R2;(3)
将该算法实现时,R1,R2在对数域上对应的值分别为LG_R1,LG_R2,首先对LG_R1,LG_R2进行分解LG_R1=-s1+t1(4)LG_R2=-s2+t2(5)其中s1,s2分别是一个整数,t1,t2分别是一个
]>R2=2LG_R2=2-s2+t2≈2-s2×(1+t2-Δ2)---(7)]]>此处Δi为近似计算的修正值,可以通过查表获得,在上两式中也可以忽略此修正值Δi。
例如对于LG_R1=-256lg(R1)=-506,则R1=2-1.9765625≈2-2×(1+0.0234375)=2-(2+8)×(1.0234375)×256=2-10×262;因此,s1=2,t1=0.0234375在实际算法实现中,采用8bit的精度,前8bit表示整数部分,后8比特表示小数部分,则相应的处理过程为LG_R1=-506=-0×01.fa=-0x0200+0x0006R1=2-0x0200×(0x0106),对于8bit精度寄存器,1≤t<2,用8bit保存t的小数部分,比如上面例子中的0x06,对于s仅需要保存整数部分(小数部分为0)0x02。
将(6)、(7)代入(2),(3)计算,并且注意到由于R1>R2≥R1/2,因此s1=s2或者s1=s2-1可以得到range_new=R1-R2=2-s2×t3---(8)]]>
low_new=low+R2(9)其中,t3={t1-t2if(s1=s2)2t1-t2if(s1≠s2)]]>,R2通过(7)计算得到。
根据式(8)、(9)可以实现range和low的更新。
对LPS符号编码后,相应的符号概率LG_PMPS也需要进行更新,下面将描述该更新过程。
在概率更新过程中,由于小概率符号的概率增加,对应大概率符号的概率减小,LG_PMPS增大,在此处可以用加减法实现,实现方法为在原数域上,当增加一个小概率符号时,可以认为大概率符号的概率降低为原来的 因此PMPS=PMPS×1516,]]>对应到对数域上实现时,由于LG_PMPS=-256×log(PMPS)=-256×(log(PMPS)+log(15)-log(16))≈LG_PMPS+23因此,在概率预测时,可以采用下面的公式LG_PMPS=LG_PMPS+23(10)。
在编码小概率符号后,还需要对计算获得的新的区间值进行重正化处理过程。
具体为根据计算得到的range_new判断,如果range_new<QUARTER,则对range_new左移位直到range_new≥QUARTER,同时对low_new左移位相同的比特位,输出比特到码流中。
例如,计算得到range_new=R1-R2=2-s2×t3]]>,s2=0x02,t3=0x001e,low_new=100100001由于QUARTER=0x0100,所以t3需要左移4位,加上s2的影响,一共左移4+2=6位,此时对low需要相应的左移6位,移出比特输出到比特流中。但在此处需要分三类情况,假设bit9表示low_new的第9位,它是将要移出的bit,bit8表示low_new的第8位,根据分类
(1)如果bit9为1,将bit9输出,进行下一次输出,上面例子第一个中输出比特“1”,low_new=001000010;(2)如果bit9为0并且bit8为0,将bit9输出,进行下一次输出,上面例子中第二个比特输出“0”,low_new=010000100;(3)如果bit9为0并且bit8为1,采用比特跟随的方法记录下该位bit9,并且翻转bit8为“0”,进行下一次判断。用bits_to_follow记录比特跟随的位数,每记录一位bits_to_follow增加1,当记录结果可以输出的时候,如果bits_to_follow不为零,则连同比特跟随位一起输出,例如bits_to_follow=2,当前位输出比特“0”,则输出“011”,当前位输出“1”则输出“100”。上例中输出首先用比特跟随记录bits_to_follow=1,接下来bit9=0,bit8=0,则当前位输出“0”,最终连同比特跟随位一起输出为“01”,low左移两位后为low_new=000010000。
最后两个比特输出是第二种情况,均输出“0”,low_new=000100000;一共输出的5位bit为“10010”,low_new=000100000。
最后,完成上述计算处理后则接着需要进行参数更新处理,包括将新的区间值作为当前区间值range=range_new;将新的区间的下界值作为当前区间的下界值low=low_new;更新后的区间值的对应的对数域中的值LG_range为LG_range=log(range)≈range-1+Δ=range[7:0],即LG_range值为更新前的原数域的区间值range减去1获得。具体还可以采用一个修正参数Δ进行修正处理。Δ为近似计算修正值,通过查表得到,查找该Δ值可以和前面描述的修正表相同;或者,也可以忽略该修正参数Δ值,直接采用range减去1作为更新后的对数域的区间值LG_range。
(四)编码循环处理根据前面(二)、(三)描述的编码方法,所述的编码循环是指连续编码零个或者多个大概率符号之后,再编码一个小概率符号,整个编码过程为由多个编码循环组成。而且,在每一个编码循环中,编码大概率符号时,区间更新在对数域上完成;编码小概率符号时,首先将数据从对数域转换到原数域,然后用减法在原数域上实现区间的更新。
本发明还提供了一种算术编码器,其具体实施结构如图2所示,主要包括初始化处理单元、符号编码区间更新单元及编码操作单元,其中符号编码区间更新单元进一步包括MPS编码区间更新单元和LSP编码区间更新单元;编码操作单元则用于利用符号编码区间更新单元计算确定的区间更新后的结果。下面将分别对该装置包含的各单元进行说明(1)初始化处理单元该单元用于初始化算术编码器编码过程中所用到的各个变量的处置。具体包括实数域上区间Range初值,赋值为HALF-1;对数域上的区间LG_Range初值,赋值为QUARTER-1;区间下界Low,赋值为0;此处HALF为整个编码区间范围的一半,QUARTER为整个编码区间范围的1/4。
(2)MPS编码区间更新单元该单元用于编码MPS符号,包括区间更新和概率更新两个部分;假设输入MPS符号的对数域概率为LG_PMPS,当前区间对数域值为LG_Range,区间更新为一次减法新LG_Range=原LG_Range-LG_PMPS;概率更新为一个减法器加上一个移位或者除法操作LG_PMPS=LG_PMPS-LG_PMPS>>4。
(3)LPS编码区间更新单元该单元用于LPS符号编码,将对数域上的数据转换到原数域,在原数域用减法实现区间的更新。该单元包括数域转换单元,区间更新单元,概率更新单元和编码后的重正化处理单元;其中,数域转换单元为实现从对数域到实数域上数据的转换,具体区间和MPS对应的范围值为R1,R2,其转换通过公式(6),(7)实现;区间更新单元分别计算Range和Low的数值,区间更新为一个移位,通过(8)实现;区间的下界Low更新为一次加法,通过(9)实现;概率更新单元为一步加法通过(10)式实现;重正化处理单元为移位处理单元,具体操作为根据计算得到的range_new判断,如果range_new<QUARTER,则对range_new左移位直到range_new≥QUARTER,同时对low_new左移位相同的比特位,输出比特到码流中。
本发明还提供了一种实现算术解码的方法,在解码过程中,当前区间大小更新、概率更新和编码过程完全一样,但解码过程维护的不是当前区间底端点Low,而是码流指针相对于当前区间底端点的偏移量offset。
假设LG_R1(range在对数域上的相应值)和LG_offset(offset在对数域上的相应值)可以分解为如下整数、小数部分的差,s1、value_s分别是不小于LG_R1和LG_offset的最小整数,以方便后面的计算。
{LG_R1=s1-t1(0≤t1<1)LG_offset=offset_s-offset_t(0≤offset_t<1)---(11)]]>解码过程维护的变量包括range、offset、LG_R1(小数部分t1)和LG_offset(小数部分offset_t)。
基于上述假设,相应的解码过程的实施例具体可以包括(1)初始化range、LG_R和LG_offset的小数部分和整数部分。range初始化为HALF-1;offset的初始化过程则是不断读入码流直至读到第一个为’1’的bit,offset初始化为从这个bit起的连续9个btis。伪代码描述如下,readbits(n)表示从码流中连续读入n个bits
range=HALF-1.
s1=0t1=0xFFoffset_s=0while(!readbits(1))offset_s++;offset_t=readbits(8);(2)根据当前解码符号的概率模型计算MPS对应的子区间;LG_R1是解码此符号前的子区间,则MPS对应的子区间在对数域上值LG_R2满足LG_R2=LG_R1-LG_MPS(12)(3)判定当前解码的结果,如果MPS对应的子区间小于或等于码流指针的偏移值offset,即LG_R2≥LG_offset(13)则此符号解码为LPS;否则解码为MPS。
(4)如果解码为MPS,区间更新过程很简单,直接把解码过程当前区间LG_R1更新为LG_R2,然后跳至第(6)步进行概率模型的更新处理;否则继续至第(5)步。
(5)如果解码得binVal是LPS,则需要将LG_R1、LG_offset切换回原数域,将解码过程当前区间range更新为LPS对应的子区间,把offset更新为相对对新子区间的偏移量;并且左移range、offset使得它们的最高比特位是’1’,并且在移位过程中读入部分码流比特为后续解码过程做准备。
LPS对应的子区间rLPS大小为R1-R2,在编码过程中推导过 由于s2=s1时,t1-t2=LG_PMPS,s2=s1+1时,1+t1-t2=LG_PMPS.
因此,rLPS的更新可以改写为rLPS≈2-s2{LG_PMPS,if(s1=s2)t1+LG_PMPS,if(s1+1=s2)]]>offset的更新过程为 rLPS和offset同时左移,相同的因子2-s2可不计。
首先左移使得range的最高比特位是’1’,伪代码描述如下while(rLPS<0x100){rLPS=rLPS<<1;offset=(offset<<1)|read_bits(1);}完成后更新LG_R1的整数和小数部分s1=0;t1=rLPS[7:0];然后左移offset使其最高比特位是’1’offset_s=0;while(offset<0x100){offset_s++;offset=(offset<<1)|read_bits(1);}完成后更新LG_offset的小数部分offset_t=offset[7:0];(6)概率估计更新,此过程和编码端完全相同。即{LG_pMPS←LG_pMPS+C(if LPS occurs)LG_pMPS=LG_pMPS-(LG_pMPS>>cw)(if MPS occurs)---(14)]]>此处C和CW都是预先设置的固定数值。
本发明还提供了一种在算术解码器,相应的算术解码器的实施例结构如图3所示,具体包括初始化处理单元、符号解码区间更新单元及解码操作单元,其中,符号解码区间更新单元用于在算术解码器进行算术解码过程中,将需要在原数域上进行的算术解码的区间更新计算映射到对数域上直接通过加减法计算实现,并采用近似计算的方法实现原数域和对数域的数据转换,以实现算术解码处理;而且,该符号解码区间更新单元具体可以包括符号判定单元、区间更新单元及概率更新单元;解码操作单元,用于利用符号解码区间更新单元计算确定的区间更新后的结果。
下面将对该装置包含的各单元分别进行说明(1)初始化处理单元该单元完成解码过程的初始化操作,为解码过程使用的变量赋值。具体的是初始化range、LG_R和LG_offset的小数部分和整数部分。range初始化为HALF-1;offset的初始化过程则是不断读入码流直至读到第一个为’1’的bit,offset初始化为从这个bit起的连续9个btis(2)符号判定单元该单元包括一次减法计算和一次比较。首先计算MPS的区间范围,公式为(12),然后根据公式(13)的结果判定当前解码输出符号为MPS或者LPS。
(3)区间更新单元如果符号判定单元的结果为MPS,偏移值不必更新,区间值更新为MPS对应的区间,LG_R1=LG_R2;如果符号判定为LPS,则需要进行区间更新和偏移值更新。该单元执行的均为移位操作,其具体的移位方法见上述解码过程(5)中所述。
(4)概率更新单元根据当前解码的符号重新估计MPS的概率,对应的操作如解码过程(6)中所述。
综上所述,本发明提供的算术编码过程,是根据MPS和LPS选择不同的计算方法。在该过程中,将算术编码中的乘法通过对数域上的加减法和原数域上的移位实现。在每编码一个符号后,对MPS概率值进行更新,该更新过程通过对数域上的加减法实现。因此,本发明不仅保持了算法的精度,同时,还大大简化了算术编码器的运算的复杂度和概率估计的复杂度,从而提供了一种简捷、高效而合理的算术编码方法。
以上所述,仅为本发明较佳的具体实施方式
,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到的变化或替换,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应该以权利要求的保护范围为准。
权利要求
1.一种实现算术编码的方法,其特征在于,包括对接收数据进行算术编码;当需要在原数域进行算术编码过程的区间更新计算时,将所述区间更新计算映射到对数域上并通过加减法计算实现;在原数域和对数域进行数据转换过程中,采用近似计算法实现;根据区间更新后的结果进行算术编码。
2.根据权利要求1所述的方法,其特征在于,所述的方法具体包括在一个编码循环内,编码大概率符号时在对数域实现区间的更新,在编码小概率符号时,将对数域上的数据转换到原数域,在原数域用减法实现区间的更新。
3.根据权利要求1或2所述的方法,其特征在于,所述的在原数域和对数域的数据转换过程中,对于从对数域向原数域的数据转换计算,相应的原数域的值X是通过参数B向左或者向右移位A位得到或者通过将参数B除于2的A次幂得到,其中,所述的参数A,B的计算方法为将对数域上的值Log_X分解为Log_X=-A+B-1,以计算确定参数A和B,其中,参数A为一个整数,参数B减去1后的绝对值小于1。
4.根据权利要求3所述的方法,其特征在于,对于所述的参数B值的获得方式还包括利用一个近似计算的第一修正参数Δ1对所述参数B进行修正,所述的第一修正参数Δ1数值通过查找预先保存的表得到。
5.根据权利要求1或2所述的方法,其特征在于,所述的在原数域和对数域的数据转换过程中,对于从原数域向对数域的数据转换,原数域值X在对数域上的值Log_X等于原数域值X减去1,而且,在计算所述的Log_X时,利用一个第二参数修正值Δ2对其进行修正,Δ2采用查找预先保存的表得到。
6.根据权利要求1或2所述的方法,其特征在于,在进行区间的更新计算过程中,所述的方法还包括对待编码符号的概率值进行自适应的更新处理,且所述的更新处理在对数域上实现。
7.根据权利要求6所述的方法,其特征在于,在计算更新后的概率值所对应的对数域的概率值时,包括通过将更新前的对数域上的概率值加上或者减去一个预定的数值得到新的概率值;或者,通过将更新前的对数域上的概率值加上或者减去该数值移位或者除于二的整数次幂得到。
8.一种实现算术编码的装置,其特征在于,包括符号编码区间更新单元,用于将需要在原数域上进行的算术编码的区间更新计算映射到对数域上通过加减法计算实现,并采用近似计算的方法实现原数域和对数域的数据转换;编码操作单元,用于利用符号编码区间更新单元计算确定的区间更新后的结果实现算术编码处理。
9.根据权利要求8所述的装置,其特征在于,所述的符号编码区间更新单元具体包括大概率符号编码区间更新单元,用于在对编码大概率符号时选择在对数域实现区间的更新;小概率符号编码区间更新单元,用于在编码小概率符号时,将对数域上的数据转换到原数域,在原数域用减法实现区间的更新。
10.根据权利要求9所述的装置,其特征在于,所述的小概率符号编码区间更新单元具体包括数域转换单元,用于实现针对小概率符号从对数域到原数域的转换处理,相应的原数域的值X是通过对数域的参数B向左或者向右移位A位得到或者通过将参数B除于2的A次幂得到,所述的参数A,B的计算方法为将对数域上的值Log_X分解为Log_X=-A+B-1,以计算确定参数A和B,其中,参数A为一个整数,参数B减去1后的绝对值小于1;区间更新单元,用于对实现区间的更新处理;概率更新单元,用于对符号概率进行更新处理;重正化处理单元,用于对区间更新单元获得的更新后的区间参数进行重正化处理。
11.根据权利要求8、9或10所述的装置,其特征在于,所述的装置还包括初始化处理单元,用于初始化编码器在编码过程中需要应用的各变量,以提供给符号编码区间更新单元使用。
12.一种实现算术解码的方法,其特征在于,包括对接收数据进行算术解码;当需要在原数域进行算术解码过程的区间更新计算时,将所述区间更新计算映射到对数域上并通过加减法计算实现;在原数域和对数域进行数据转换过程中,采用近似计算法实现;根据区间更新后的结果进行算术解码。
13.根据权利要求12所述的方法,其特征在于,所述的方法还包括根据当前解码符号的概率模型计算大概率符号对应的子区间,判断该子区间是否小于或等于码流指针的偏移值,如果是,则该解码符号为小概率符号,并进行区间及偏移值的更新,否则,该解码符号为大概率符号,且仅进行区间值的更新处理。
14.根据权利要求12或13所述的方法,其特征在于,在进行区间的更新计算过程中,所述的方法还包括对待解码符号的概率值进行自适应的更新处理,且所述的更新处理在对数域上实现。
15.一种实现算术解码的装置,其特征在于,包括符号解码区间更新单元,用于将需要在原数域上进行的算术解码的区间更新计算映射到对数域上直接通过加减法计算实现,并采用近似计算的方法实现原数域和对数域的数据转换;解码操作单元,用于利用符号解码区间更新单元计算确定的区间更新后的结果实现算术解码处理。
16.根据权利要求15所述的装置,其特征在于,所述的符号解码区间更新单元具体包括符号判定单元,用于根据当前解码符号的概率模型计算大概率符号对应的子区间,判断该子区间是否小于或等于码流指针的偏移值,并将判断结果通知区间更新单元;区间更新单元,根据所述判断结果,如果所述子区间小于或等于码流指针的偏移值,则进行区间及偏移值的更新,否则,仅进行区间值的更新处理。
17.根据权利要求15或16所述的装置,其特征在于,所述的装置还包括概率更新单元,用于对待解码符号的概率值进行自适应的更新处理,且所述的更新处理在对数域上实现。
18.根据权利要求15或16所述的装置,其特征在于,所述的装置还包括初始化处理单元,用于初始化解码器在解码过程中需要应用的各变量,以提供给符号解码区间更新单元使用。
全文摘要
一种在算术编码器中实现算术编解码的方法及装置。主要包括首先,在算术编解码器进行二元算术编解码过程中,将原数域上进行的算术编解码的区间更新处理映射到对数域上直接通过加减法计算实现;在对数域算术编解码的计算过程中,涉及到原数域和对数域之间的数据转换通过近似计算的方式实现;在编解码一个符号后根据需要对概率值进行更新,该更新过程在对数域通过加减法实现。可以看出,本发明提供的算术编解码方案是将算术编解码过程以及其中涉及的概率估计过程的操作均映射到对数域实现,并通过近似计算公式实现原数域和对数域之间的数据转换,从而有效避免了复杂的计算和查表。因而,本发明提供了一种简捷、高效而合理的算术编解码方案。
文档编号G06T9/00GK1983334SQ20061016216
公开日2007年6月20日 申请日期2006年12月5日 优先权日2005年12月5日
发明者何芸, 余微, 杨平, 孟新建 申请人:华为技术有限公司, 清华大学
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1