变长编解码方法及其编解码器的制作方法

文档序号:7974096阅读:256来源:国知局

专利名称::变长编解码方法及其编解码器的制作方法
技术领域
:本发明涉及视频图像编解码
技术领域
,尤其是涉及一种变长编解码方法及其编解码器。
背景技术
:熵编码技术是普遍应用于视频编码领域的技术,其中熵编码处理部分是整个视频编码框架的最后一个部分,如图1所示为目前AVS视频编码器的组成框图,可见熵编码处理部分是处在最后一级的,其编码后的码流直接作为传输的比特流。熵编码的对象是之前所有处理部分生成的一系列语法元素,包括宏块类型信息,参考帧索引信息,块编码方式(CBP,CodedBlockPattern)信息,量化步长(QP)信息,运动矢量的残差信息,变换和量化后的残差系数信息等。在所有这些语法元素中,残差系数的信息量及最终编码后形成的数据量都是最多的,同时它也是最占用编码压缩空间的,因此一直以来残差系数的编码问题都是熵编码
技术领域
的研究重点。在此基础上出现了变长编码(VLC,VariableLengthCoding)技术,该技术通过zig-zag扫描图像块,以将图像块系数表示成(非零系数前零系数的个数run,非零系数level)的数对形式,并采用一个变长码来编码此(run,level)数对,该编码技术通常用于对离散余弦变换(DCT)系数进行变长熵编码,典型的二维变长编码技术(2D-VLC)已经得到MPEG-1、MPEG-2及H.261标准的采纳。在随后发展的H.263、MPEG-4标准中,为提高块结束标记(EOB,EndofBlock)的编码效率,进而又提出了三维变长编码(3D-VLC)技术,即通过对(last,run,level)数组进行联合编码,其中last表示此系数是否为块内的最后一个非零系数。同时在MPEG-2/4及H.263标准中都出现了分别针对宏块类型(包括intra块或inter块等)设计更有针对性的VLC码表的方法。其中在H.264/AVC标准中,已经发展了基于图像上下文的变长熵编码技术,一种典型的技术是将level及run值分别建立上下文分开编码,此技术已被H,264标准所釆纳;另一种典型的技术是基于2D-VLC的上下文编码技术,其实现的核心是上下文信息的使用及各个码表的切换使用方法。在目前的先进音视频编码第7部分--—移动视频(AVS-P7)中采用了自适应二维VLC熵编码技术,其编码过程要基于在AVS-P7中已被标准化的18个码表,其中这18个码表被分为3类,分别用于intra块亮度系数、inter块亮度系数及色度块系数的编码。如图2所示为在AVS-P7中采用的自适应二维VLC熵编码设计思想示意图,对于一个4x4块的系数,编码的要点描述如下扫描后的块系数采用2D-VLC进行编码,即采用(level,run)+EOB的编码方式;如图2中,设4x4块系数经zig-zag扫描后形成的(level,run)序列为正向顺序,即从低频到高频的顺序为正向顺序,而这里对上述的(level,run)数对进行编码则采用逆向顺序,在逆向编码过程中,在18个2D-VLC码表之间切换编码,每次根据前一已编码的level值在多个码表间进行码表切换处理,其中对第一个系数的编码则采用单独的码表;编码过程中对所有语法元素可以采用Exp-Golomb码或码Hybrid-Golomb进行编码。但是上述的2D-VLC熵编码技术的编码效率还比较低,有待于进一步提高编码效率,并且这种编码方式在编码过程中需要在18个码表之间进行自适应切换,因此为存储这些码表将占用大量的内存,其切换过程也较为复杂。
发明内容本发明提出一种变长编解码方法,以进一步提高熵编码的编码效率,同时编码过程基于更为简单的码表结构,从而降低切换计算的复杂度及减少内存空间的占用。相应的本发明还提出了一种变长编解码器。为解决上述问题,本发明提出的技术方案如下一种变长编码方法,包括步骤统计当前块中非零系数的个数和幅值大于l的系数个数;将统计得到的非零系数个数编码进码流;将当前块中的各非零系数符号和对应非零系数前零系数的个数编码进码流;以及将统计得到的幅值大于1的系数个数编码进码流;将当前块中相应非零系数的幅值编码进码流。一种变长解码方法,包括步骤解码接收到的当前块的非零系数个数;根据解码得到的非零系数个数,在当前块中解码出对应个数的非零系数符号及对应非零系数前零系数的个数;以及解码当前块的幅值大于1的系数个数;根据解码得到的幅值大于1的系数个数,在当前块中解码出对应的非零系数的幅值。一种变长编码器,包括用于统计当前块中非零系数的个数和幅值大于1的系数个数的单元;用于将统计得到的非零系数个数编码进码流的单元;用于将当前块中的各非零系数符号和对应非零系数前零系数的个数编码进码流的单元;和用于将统计得到的幅值大于1的系数个数编码进码流的单元;用于将当前块中相应非零系数的幅值编码进码流的单元。一种变长解码器,包括用于解码接收到的当前块的非零系数个数的单元;用于根据解码得到的非零系数个数,在当前块中解码出对应个数的非零系数符号及对应非零系数前零系数的个数的单元;和用于解码当前块的幅值大于1的系数个数的单元;用户根据解码得到的幅值大于1的系数个数,在当前块中解码出对应的非零系数的幅值的单元。一种变长编码方法,包括步骤统计当前块中非零系数的个数;将统计得到的非零系数个数编码进码流;将当前块中的各非零系数符号和对应非零系数前零系数的个数编码进码流;以及将当前块中相应非零系数的幅值编码进码流;在码流中编码入用于标识非零系数幅值已编码完的块结束标志。一种变长解码方法,包括步骤解码接收到的当前块的非零系数个数;根据解码得到的非零系数个数,在当前块中解码出对应个数的非零系数符号及对应非零系数前零系数的个数;在当前块中解码出对应的非零系数的幅值;以及解码得到用于标识非零系数幅值已编码完的块结束标志。一种变长编码器,包括用于统计当前块中非零系数个数的单元;用于将统计得到的非零系数个数编码进码流的单元;用于将当前块中的各非零系数符号和对应非零系数前零系数的个数编码进码流的单元;和用于将当前块中相应非零系数的幅值编码进码流的单元;用于在码流中编码入用于标识非零系数幅值已编码完的块结束标志的单元。一种变长解码器,包括用于解码接收到的当前块的非零系数个数的单元;用于根据解码得到的非零系数个数,在当前块中解码出对应个数的非零系数符号及对应非零系数前零系数个数的单元;用于在当前块中解码出对应的非零系数幅值的单元;和用于解码得到用于标识非零系数幅值已编码完的块结束标志。一种变长编码方法,包括步骤统计当前块中幅值大于1的系数个数;将当前块中的各非零系数符号和对应非零系数前零系数的个数编码进码流;以及在码流中编码入用于标识非零系数符号已编码完的块结束标志;将统计得到的幅值大于1的系数个数编码进码流;将当前块中相应非零系数的幅值编码进码流o一种变长解码方法,包括步骤在当前块中解码出非零系数符号及对应非零系数前零系数的个数;以及在当前块中解码用于标识非零系数符号已编码完的块结束标志;解码当前块中幅值大于1的系数个数;根据解码得到的幅值大于1的系数个数,在当前块中解码出对应的非零系数的幅值。一种变长编码器,包括用于统计当前块中幅值大于1的系数个数的单元;用于将当前块中的各非零系数符号和对应非零系数前零系数的个数编码进码流的单元;和用于在码流中编码入用于标识非零系数符号已编码完的块结束标志的单元;用于将统计得到的幅值大于1的系数个数编码进码流的单元;用于将当前块中相应非零系数的幅值编码进码流的单元。一种变长解码器,包括用于在当前块中解码出非零系数符号及对应非零系数前零系数个数的单元;用于在当前块中解码用于标识非零系数符号已编码完的块结束标志的单元;用于解码当前块中幅值大于1的系数个数的单元;用于根据解码得到的幅值大于1的系数个数,在当前块中解码出对应的非零系数幅值的单元。一种变长编码方法,包括步骤将当前块中的各非零系数符号和对应非零系数前零系数的个数编码进码流;在码流中编码入用于标识非零系数符号已编码完的块结束标志;将相应非零系数的幅值编码进码流;以及在码流中编码入用于标识非零系数幅值已编码完的块结束标志。一种变长解码方法,包括步骤在当前块中解码出非零系数符号及对应非零系数前零系数的个数;以及解码出用于标识非零系数符号已编码完的块结束标志;在当前块中解码出对应非零系数的幅值;以及解码出用于标识非零系数幅值已编码完的块结束标志。一种变长编码器,包括用于将当前块中的各非零系数符号和对应非零系数前零系数的个数编码进码流的单元;用于在码流中编码入用于标识非零系数符号已编码完的块结束标志的单元;和用于将相应非零系数的幅值编码进码流的单元;用于在码流中编码入用于标识非零系数幅值已编码完的块结束标志的单元。一种变长解码器,包括用于在当前块中解码出非零系数符号及对应非零系数前零系数个数的单元;和用于解码出用于标识非零系数符号已编码完的块结束标志的单元;用于在当前块中解码出对应非零系数幅值的单元;用于解码出用于标识非零系数幅值已编码完的块结束标志的单元。本发明能够达到的有益效果如下本发明技术方案利用图像块经zig-zag扫描后得到的残差系数经过变换和量化后,一般来i兌游程run从低频向高频呈逐渐增大状态,而非零系数幅值却是从低频向高频呈逐渐减'J、状态的数据源统计特性,提出在对每个当前图像块进行VLC编码时,将当前块中的各非零系数符号和对应非零系数前零系数的个数编码进码流,并将当前块中相应非零系数的幅值编码进码流,因此与现有方案相比,进一步降低了编码码率,节约了编码码流,从而提高了编码效率,而且本发明方案不再需要在内存中存储现有技术中的18个码表,而是根据情况进行自行设置所需要的码表,因此节约了多个码表所占用的内存空间,并且降低了在编码过程中在多个码表之间进行切换的复杂度。图1为目前AVS视频编码器的组成框图2为在AVS-P7中采用的自适应二维VLC熵编码设计思想示意图3为对一个4x4图像块进行VLC编码的实施例处理过程。具体实施例方式由上述现有技术中图2所示的自适应二维VLC熵编码设计思想示意图可以看出,图像块中经zig-zag扫描后得到的残差系数经过变换和量化后,一般来说游程run从低频向高频呈逐渐增大状态,而非零系数幅值却是从低频向高频呈逐渐减小状态,因此本发明技术方案充分考虑利用该数据源的统计特性,来得到一种新的VLC编码方案,从而提高VLC熵编码的编码效率。根据对数据源的统计特性,本发明提出的VLC编码方案的主要设计思想如下:对图像块(如4x4图像块)进行zig-zag扫描,得到系数序列;将得到的系数序列中的非零系数进行符号化处理,如将正的非零系数符号化为1,及将负的非零系数符号化为-l;对于每个非零系数,编码该非零系数前的零系数个数和该非零系数的符号sign,即对(run,sign)数对进4亍编码;然后在得到的系凄t^列中,确定各非零系数的幅值(幅值为非零系数的绝对值),并将相应数目的非零系数幅值作为遗留信息分别进行编码。例如对于上述图2中的4x4块,首先按zig-zag方式扫描将得到如下系数序列9,2,-3,0,0,0,0,0,1,0,0,0,0,0,0,0;编码端首先将扫描得到的系数序列中包含的非零系数个数numCoefl编码进码流,以上述图2中的4x4块为例,编码端需要首先将numCoefl=4编码进码流;对上述扫描得到的系数序列中的非零系数进行符号化处理,将得到下述系数序列1,1,-1,0,0,0,0,0,1,0,0,0,0,0,0,0;对于每个非零系数,编码该非零系数前的零系数个数和该非零系数的符号,如需要分别对(0,+),(0,+),(O,-),(5,+)4个数组进行编码;然后在上述扫描得到的系凄M列中,确定各非零系数的幅值,具体如下9,231;编码端进而将扫描得到的系数序列中包含的幅值大于1的非零系数个数numCoef2编码进码流,以上述图2中的4x4块为例,编码端进而需要将numCoef2=3编码进码流;最后将确定的非零系数的幅值作为遗留信息分别进行编码。另一方面,如果编码端不选择将扫描得到的系数序列中包含的非零系数个数numCoefl编码进码流,可以考虑在对(0,+),(0,+),(0,-),(5,+)4个数组编码完成之后,进而编码进码流一个表示当前块中非零系数编码结束的标志EOB1,用于标识在当前块中对非零系数符号已经编码完成。另一方面,如果编码端不选择将扫描得到的系数序列中包含的幅值大于1的非零系数个数numCoef2编码进码流,可以考虑在编码完非零系数的幅值后,进而编码进码流一个表示当前块中幅值大于1的非零系数编码结束的标志EOB2,用于标识在当前块中对非零系数幅值已经编码完成。如图3所示,为按照上述方案的设计思想,对一个4x4图像块进行VLC编码的实施例处理过程,具体如下stepl:首先对当前块按zig-zag方式扫描,得到一个系数序列;基于扫描得到的系数序列统计当前块中非零系数个数numCoefl,并将统计得到的numCoefl编码进码流。如果在stepl处理前,能够得到关于该当前块所有系数是否为全零的标记,则可以判断出当前块的numCoefl—定大于0,即至少存在一个非零系数,这种情况下就需要继续执行下述的step2;否则如果不能够得到关于该当前块所有系数是否为全零的标记,则可以判断出当前块的numCoefl有可能是零,当numCoefl为零时,可以直接结束当前块的熵编码处理。step2:开始对当前块中的各系数进行编码,分别对当前块中的各非零系数符号和非零系数前零系数的个数进行编码。setp3:编码当前块中幅值大于1的系数个数numCoef2。step4:判断当前块中幅值大于1的系数个数numCoef2是否为零,如果为零,则直^:结束当前块的熵编码;否则编码当前块中相应非零系数的幅值。此外在另一个实施例中,对一个4x4图像块进行VLC编码的处理过程如下Step2:首先对当前块按zig-zag方式扫描,得到一个系凄t^列;开始对当前块中的各系数进行编码,分别对当前块中的各非零系数符号和非零系数前零系数的个数进行编码;然后接着编码进码流一个EOB标志(这里定义为EOB1);Step4:编码当前块中相应非零系数的幅值;然后接着编码进码流一个EOB标志(这里定义为EOB2)。其中在上述的实施例处理过程中,对于stepl中的编码当前块中非零系数个数numCoefl的编码方式可以但不限于采用下述两种方式方式一,无论当前块是亮度块,色度块,还是帧内编码块还是非帧内编码块都统一按照截断的Golomb编码方法编码当前4x4块中非零系数个数numCoefl(l<=numCoefl<=16),即4姿照下表1编码numCoefl:表1:numCoefl编码码表<table>complextableseeoriginaldocumentpage20</column></row><table>方式二,如果当前4x4块是图像条带的第一个4x4块,或者它的相邻块所在的宏块是skip宏块,或者它的相邻块是全零块,则直接根据上述方式一中表1给出的码表来编码当前块中的非零系数个数numCoefl;如果当前块不能同时满足上述条件,则需要根据当前4x4块的非零系数个数numCoefl预测值来编码numCoefl,其具体的编码过程如下Substepl,按照下述不同情况生成当前4x4块的不同numCoefl预测值;(1)如果当前4x4块的左边块和上边块均可用,假设左边块的非零系数个数为left—numCoefl,上边块的为top_numCoefl,则当前块的非零系数个数numCoefl予贞观M直predNumCoefl=(left—numCoefl+top—numCoefl)/2;(2)如果当前4x4块只有左边块可用,则numCoefl预测值=left—numCoefl;(3)如果当前4x4块只有上边块可用,则numCoef1预测值predNumCoefl=top—numCoefl;Substep2,根据当前4x4块的numCoefl预测值,再按照下迷3种情况编码当前4x4块的numCoefl:(1)如果当前4x4块所在的宏块是intra类型块,且当前4x4块的predNumCoefl满足5<=predNumCoefl<=12,则先把当前4x4块的非零系数个数NumCoefl按照一个预定的映射表映射出一个对应的值,然后基于上述方式一中表1给出的码表来编码该映射值;否则直接基于上述方式一中表1给出的码表来编码当前4x4块的非零系数个数NumCoefl。其中这里的映射表可根据具体实施情况进行具体设定。(2)如果当前4x4块所在的宏块是inter类型块,且当前4x4块的predNumCoefl满足2<=predNumCoefl<=9,则先对巴当前4x4块的非零系数个数NumCoefl按照一个预定的映射表映射出一个对应的值,然后基于上述方式一中表1给出的码表来编码该映射值;否则直接基于上述方式一中表1给出的码表来编码当前4x4块的非零系数个数NumCoefl。其中这里的映射表可根据具体实施情况进行具体设定。(3)如果当前4x4块是色度块,则直接基于上述表1给出的码表来编码当前4x4块的非零系数个数NumCoefl。在上述实施例的Step2中,编码端可以但不限于釆用下述两种方式来编码当前块中各非零系数的符号(sign)和相应非零系数前的零系数个数方式一按照从低频到高频的zig-zag方式扫描当前4x4块,得到当前4x4块的系数序列,确定扫描得到的系数序列中非零系数符号sign及它前面的零系数个数runl,然后按照下述映射方法分别将各个runl和sign数组映射成一个符号sym2D:在一帧图像或一个图像条带开始时,首先初始化一个计数数组giSign[2],在对每个图像块进行zig-zag扫描过程中,每遇到一个正号的非零系数时,giSign[O]加l,而每遇到一个负号的非零系数时,giSign[l]加l,其中giSign[O]和giSign[l]是计数数组giSign[2]中的两个元素值。这样当giSign〉giSign[l]时,sym2D=2x應1+(level[yy][xx]>0)0:1;其中该式中level[yy][xx]表示在当前块中坐标为(xx,yy)的非零系凄丈,(level[yy][xx]>0)0:1表示当level[yy][xx]>0条件成立时,(level[yy][xx]>0)0:1直接取0,否则当level[yy][xx]>0条件不成立时,(level[yy][xx]>0)0:1直接1。而当giSign〈giSign[l]时,sym2D=2xmnl+(level[yy][xx]>0)1:0;即(level[yy][xx]>0)1:0表示当level[yy][xx]〉0条件成立时,(level[yy][xx]〉0)1:0直接取1,否则(level[yy][xx]〉0)0:1直接O。同时当该计数数组giSign[2]中的元素之和超过一个规定的阈值时,就要更新一下该计数数组giSign[2],例如当giSign+giSign[l]>212时,可以将更新giSign=giSign/24,并更新giSign[l]=giSign[1]/24。然后按照截断的Golomb编码方式分别对每个映射得到的符号sym2D进行编码,其中对每个符号sym2D进行编码的伪代码如下For(idx=0;sym2D>=idx&&idx<(16-numCoefl-codedRun)x2+1;idx++)Setflag(sym2D>idx);其中在上述伪代码中,idx用于计数,codedRun表示当前块中已编码的零系数个数;函数Setflag表示当sym2D〉idx条件成立时,在码流中编入l,否则在码流中编入O。按照上述编码过程直至将当前块的NumCoefl个非零系数全部编码完成。方式二按照zig-zag方式正向扫描当前块,当遇到第一个非零系数时,编码该非零系数前的零系数个数riml和该非零系数的符号sign,其中在编码runl时,先判断当前块所在的宏块是亮度块还是色度块,在判断结果是亮度块时还要进而判断当前块所在的宏块是帧内编码块还是帧间编码块,从而根据判断结果选择不同的码表,例如可以在判断结果为当前块所在的宏块是帧内亮度块时,选择预置的码表a;在判断结果为当前块所在的宏块是帧间亮度块时,选择预置的码表b;在判断结果为当前块所在的宏块是色度块时,选择预置的码表c,然后再根据所选择的码表编码runl,其中预置的码表a、b、c可根据具体实施情况进行具体设定;接着在编码sign时,当sign值大于0时在码流中编码进O,当sign值小于0时在码流中编码进1。在后续扫描过程中,每遇到一个非零系数,就按照当前块的非零系数个数NumCoefl、前一个已编码的runl值选择一个预置的码表,并基于选择的码表编码当前遇到的非零系数前面的零系数个数runl值,然后接着编码当前遇到的非零系数的符号sign,当sign值大于0时在码流中编码进O,当sign值小于0时在码流中编码进1。按照上述编码过程直至将当前块的NumCoefl个非零系数全部编码完成。在上述的实施例step3中,编码端可以但不限于采用下述两种方式来编码当前块中幅值大于1的非零系数个数NumCoef2:方式一统计基于zig-zag方式扫描当前4x4块而得到的系数序列中包含的幅值大于1的非零系数个数NumCoef2,然后按照截断的Golomb编码方式编码NumCoef2,其中对NumCoef2进行编码的伪代码如下For(idx=0;NumCoef2>=idx&&idx<NumCoef1;idx++)Setflag(NumCoef2〉idx);其中函数Setflag表示当NumCoef2〉idx条件成立时,在码流中编入l,否则在码流中编入0。方式二若当前4x4块是图像条带或图像的第一个块时,可以根据当前块所在的宏块类型、QP值、以及NumCoefl中的至少一个属性值选择一个预置的码表,并基于选择的码表来编码NumCoef2,其中预置的码表可根据具体实施情况进行具体设定。若当前4x4块不是图像条带或图像的第一个块时,需要根据当前块的相邻左块和相邻上块的NumCoef2来选择一个预置的码表,并基于选择的码表来编码当前块的NumCoef2,同理这个预置的码表也可以根据具体实施情况进行具体设定。在上述的实施例step4中,编码端可以但不限于采用下述两种方式来编码当前块中各个非零系数的幅值方式一按照zig-zag方式逆向扫描当前块,当遇到第一个幅值大于1的非零系数时,设其幅值为sym,按照下述伪代码编码该幅值sym:Sym=sym-1;For(idx=l;idx<=sym;idx++)Setflag(sym>idx);其中函数Setflag表示当sym〉idx条件成立时,在码流中编入l,否则在码流中编入0。继续逆向扫描当前块,在后续每遇到一个非零系数时,按照以下伪代码编码其幅值sym,直到将当前块中所有的非零系数幅值均编码完成For(idx=l;idx<=sym;idx++)Setflag(sym>idx);其中函数Setflag表示当sym〉idx条件成立时,在码流中编入l,否则在码流中编入O。方式二按照zig-zag方式逆向扫描当前块,当遇到第一个幅值大于1的非零系数时,编码该系数的幅值信息、和在该系数前面的幅值等于1的系数个数run2,假设该幅值大于1的非零系数值为level,则在对该非零系数的幅值进行编码时对level2叫level卜l进行编码处理。编码当前块的第一个幅值大于1的非零系数之前,根据当前块所在宏块的类型选择一个预置的码表,然后基于选择的码表对level2和run2进行编码;扫描到第二个幅值大于1的非零系数,根据前一已编码的level2选择一个预置的码表,并基于选择的码表编码当前非零系数的level2和run2;以后扫描到每个幅值大于1的非零系数时,均按照上述处理过程进行编码,直至将当前块中所有的幅值大于1的非零系数幅值均编码完成。对应于上述编码端进行VLC编码的实施例处理过程,解码端进行相应解码处理的实施例可以分为四种情况,下面分别介绍第一解码实施例Stepl0:解码端解码接收到的当前块中非零系数个数numCoefl;Stepll:进而分别解码当前块中numCoefl个非零系数符号,及其每个非零系数前零系数的个数;按照解码结果,将零系数和非零系数符号按顺序组成系数序列写入到当前图像块数据中;Stepl2:解码当前块中幅值大于1的非零系数个数numCoef2;Stepl3:若解码得到numCoef2为零,则可以直接结束当前块的解码处理,否则在接收到的当前块中分别解码相应非零系数的幅值,然后将其对应的写入到当前图像数据块中的相应非零系数符号位上,从而完成解码端的解码处理。第二解码实施例Step20:解码端解码接收到的当前块中各个非零系数符号,及其每个非零系数前零系数的个数;按照解码结果,将零系数和非零系数符号按顺序组成系数序列写入到当前图像块数据中;Step21:然后根据解码到的用于标识非零系数符号已编码完的块结束标志EOBl,进而解码当前块中相应非零系数的幅值,然后将其对应的写入到当前图像数据块中的相应非零系数符号位上,最后根据解码到的用于标识非零系数幅值已编码完的块结束标志EOB2,开始下一块的解码处理。第三解码实施例Step30:解码端解码接收到的当前块中非零系数个数numCoefl;Step31:进而分别解码当前块中numCoefl个非零系数符号,及其每个非零系数前零系数的个数;按照解码结果,将零系数和非零系数符号按顺序组成系数序列写入到当前图像块数据中;Step32:解码端在接收到的当前块中分别解码相应非零系数的幅值,然后将其对应的写入到当前图像数据块中的相应非零系数符号位上,最后根据解码到的用于标识非零系数幅值已编码完的块结束标志EOB2,开始下一块的解码处理。第四解码实施例Step40:解码端解码接收到的当前块中各个非零系数符号,及其每个非零系数前零系数的个数;按照解码结果,将零系数和非零系数符号按顺序组成系数序列写入到当前图像块数据中;Step41:然后根据解码到的用于标识非零系数符号已编码完的块结束标志E0B1,进而解码当前块中幅值大于1的非零系数个数numCoef2;Step42:若解码得到numCoef2为零,则可以直接结束当前块的解码处理,否则在接收到的当前块中分别解码相应非零系数的幅值,然后将其对应的写入到当前图像数据块中的相应非零系数符号位上,从而完成解码端的解码处理。在上述对当前块进行VLC编码的实施例处理过程中,对于step1、step2、step3和step4中任意一个步骤所给出的两种处理方式,可以进行任意组合从而完成本发明VLC编码的实施例处理过程,这样基于上述的各个处理方式,可以组合出16种VLC编码的实施例,当然本发明技术思想并不局限于这里所给出的16种实施方式,还可以根据设计思想扩展更多的实施过程。显然,本领域的技术人员可以对本发明进行各种改动和变型而不脱离本发明的精神和范围。这样,倘若本发明的这些修改和变型属于本发明权利要求及其等同技术的范围之内,则本发明也意图包含这些改动和变型在内。权利要求1、一种变长编码方法,其特征在于,包括步骤统计当前块中非零系数的个数和幅值大于1的系数个数;将统计得到的非零系数个数编码进码流;将当前块中的各非零系数符号和对应非零系数前零系数的个数编码进码流;以及将统计得到的幅值大于1的系数个数编码进码流;将当前块中相应非零系数的幅值编码进码流。2、如权利要求1所述的方法,其特征在于,釆用截断的Golomb编码方式将当前块中的非零系数个数编码进码流。3、如权利要求1所述的方法,其特征在于,根据当前块的类型及其当前块非零系数个数的预测值将当前块中的非零系数个数编码进码流。4、如权利要求1所述的方法,其特征在于,所述将当前块中的各非零系数符号和对应非零系数前零系数的个数编码进码流的过程具体包括分别将当前块中的每个非零系数符号和该非零系数前零系数的个数映射成对应符号;,采用截断的Golomb编码方式将映射后的符号编码进码流。5、如权利要求4所述的方法,其特征在于,所述将非零系数符号和该非零系数前零系数的个数映射成对应符号的过程具体包括在扫描到每个非零系数时,判断已扫描到的非零系数中正数个数和负数个数的关系;以及在正数个数大于等于负数个数时,若当前扫描到的非零系数是正数,则基于求取的当前扫描到的非零系数前零系数的个数二倍与0的和作为映射后的符号;若当前扫描到的非零系数是负数,则基于求取的当前扫描到的非零系数前零系数的个数二倍与1的和作为映射后的符号;在正数个数小于负数个数时,若当前扫描到的非零系数是正数,则基于求取的当前扫描到的非零系数前零系数的个数二倍与1的和作为映射后的符号;若当前扫描到的非零系数是负数,则基于求取的当前扫描到的非零系数前零系数的个数二倍与0的和作为映射后的符号。6、如权利要求1所述的方法,其特征在于,所述将当前块中的各非零系数符号和对应非零系数前零系数的个数编码进码流的过程具体包括基于zig-zag方式正向扫描当前块,在扫描到第一个非零系数时,编码该扫描到的非零系数前零系数的个数以及该非零系数的符号;后续在每次扫描到一个非零系数时,基于当前块非零系数的个数、前一已编码的非零系数前零系数的个数,来编码当前扫描到的非零系数前零系数的个数,并进而编码当前扫描到的非零系数的符号。7、如权利要求1所述的方法,其特征在于,采用截断的Golomb编码方式将当前块中的幅值大于1的系数个数编码进码流。8、如权利要求1所述的方法,其特征在于,所述将当前块中的幅值大于1的系数个数编码进码流的过程具体包括判断当前块是否为条带或图像中的第一个块;以及在当前块是第一个块时,根据当前块的属性信息将当前块中幅值大于1的系数个数编码进码流;在当前块不是第一个块时,根据当前块的相邻左块和相邻上块的幅值大于1的系数个数信息将当前块中幅值大于1的系数个数编码进码流。9、如权利要求8所述的方法,其特征在于,所述当前块的属性信息为当前块所在宏块的类型信息;或当前块的量化步长值信息;或当前块的非零系数个数信息。10、如权利要求l所述的方法,其特征在于,所述将当前块中相应非零系数的幅值编码进码流的过程具体为基于zig-zag方式逆向扫描当前块,在扫描到第一个幅值大于1的非零系数时,开始分别将每个扫描到的非零系数编码进码流。11、如权利要求l所述的方法,其特征在于,所述将当前块中相应非零系数的幅值编码进码流的过程具体包括基于zig-zag方式逆向扫描当前块,在扫描到第一个幅值大于1的非零系数时,开始编码该扫描到的当前非零系数及其在后续扫描到下一个幅值大于1的非零系数之前所扫描到的幅值等于1的非零系数个数;在后续每次扫描到一个幅值大于1的非零系数时,基于前一已编码的幅值大于1的非零系数,来编码当前扫描到的非零系数及其在后续扫描到下一个幅值大于1的非零系数之前所扫描到的幅值等于1的非零系数个数。12、一种变长解码方法,其特征在于,包括步骤解码接收到的当前块的非零系数个数;根据解码得到的非零系数个数,在当前块中解码出对应个数的非零系数符号及对应非零系数前零系数的个数;以及解码当前块的幅值大于1的系数个数;根据解码得到的幅值大于1的系数个数,在当前块中解码出对应的非零系数的幅值。13、一种变长编码器,其特征在于,包括用于统计当前块中非零系数的个数和幅值大于1的系数个数的单元;用于将统计得到的非零系数个数编码进码流的单元;用于将当前块中的各非零系数符号和对应非零系数前零系数的个数编码进码流的单元;和用于将统计得到的幅值大于1的系数个数编码进码流的单元;用于将当前块中相应非零系数的幅值编码进码流的单元。14、一种变长解码器,其特征在于,包括用于解码接收到的当前块的非零系数个数的单元;用于根据解码得到的非零系数个数,在当前块中解码出对应个数的非零系数符号及对应非零系数前零系数的个数的单元;和用于解码当前块的幅值大于1的系数个数的单元;用户根据解码得到的幅值大于1的系数个数,在当前块中解码出对应的非零系数的幅值的单元。15、一种变长编码方法,其特征在于,包括步骤统计当前块中非零系数的个数;将统计得到的非零系数个数编码进码流;将当前块中的各非零系数符号和对应非零系数前零系数的个数编码进码流;以及将当前块中相应非零系数的幅值编码进码流;在码流中编码入用于标识非零系数幅值已编码完的块结束标志。16、如权利要求15所述的方法,其特征在于,所述将当前块中的各非零系数符号和对应非零系数前零系数的个数编码进码流的过程具体包括分别将当前块中的每个非零系数符号和该非零系数前零系数的个数映射成对应符号;采用截断的Golomb编码方式将映射后的符号编码进码流。17、如权利要求15所述的方法,其特征在于,所述将当前块中的各非零系数符号和对应非零系数前零系数的个数编码进码流的过程具体包括基于zig-zag方式正向扫描当前块,在扫描到第一个非零系数时,编码该扫描到的非零系数前零系数的个数以及该非零系数的符号;后续在每次扫描到一个非零系数时,基于当前块非零系数的个数、前一已编码的非零系数前零系数的个数,来编码当前扫描到的非零系数前零系数的个数,并进而编码当前扫描到的非零系数的符号。18、如权利要求15所述的方法,其特征在于,所述将当前块中相应非零系数的幅值编码进码流的过程具体为基于zig-zag方式逆向扫描当前块,在扫描到第一个幅值大于1的非零系数时,开始分别将每个扫描到的非零系数编码进码流。19、如权利要求15所述的方法,其特征在于,所述将当前块中相应非零系数的幅值编码进码流的过程具体包括基于zig-zag方式逆向扫描当前块,在扫描到第一个幅值大于1的非零系数时,开始编码该扫描到的当前非零系数及其在后续扫描到下一个幅值大于1的非零系数之前所扫描到的幅值等于1的非零系数个数;在后续每次扫描到一个幅值大于1的非零系数时,基于前一已编码的幅值大于1的非零系数,来编码当前扫描到的非零系数及其在后续扫描到下一个幅值大于1的非零系数之前所扫描到的幅值等于1的非零系数个数。20、一种变长解码方法,其特征在于,包括步骤解码接收到的当前块的非零系数个数;根据解码得到的非零系数个数,在当前块中解码出对应个数的非零系数符号及对应非零系数前零系数的个数;在当前块中解码出对应的非零系数的幅值;以及解码得到用于标识非零系数幅值已编码完的块结束标志。21、一种变长编码器,其特征在于,包括用于统计当前块中非零系数个数的单元;用于将统计得到的非零系数个数编码进码流的单元;用于将当前块中的各非零系数符号和对应非零系数前零系数的个数编码进码流的单元;和用于将当前块中相应非零系数的幅值编码进码流的单元;用于在码流中编码入用于标识非零系数幅值已编码完的块结束标志的单元。22、一种变长解码器,其特征在于,包括用于解码接收到的当前块的非零系数个数的单元;用于根据解码得到的非零系数个数,在当前块中解码出对应个数的非零系数符号及对应非零系数前零系数个数的单元;用于在当前块中解码出对应的非零系数幅值的单元;和用于解码得到用于标识非零系数幅值已编码完的块结束标志。23、一种变长编码方法,其特征在于,包括步骤统计当前块中幅值大于1的系数个数;将当前块中的各非零系数符号和对应非零系数前零系数的个数编码进码流;以及在码流中编码入用于标识非零系数符号已编码完的块结束标志;将统计得到的幅值大于1的系数个数编码进码流;将当前块中相应非零系数的幅值编码进码流。24、如权利要求23所述的方法,其特征在于,所述将当前块中的各非零系数符号和对应非零系数前零系数的个数编码进码流的过程具体包括分别将当前块中的每个非零系数符号和该非零系数前零系数的个数映射成对应符号;采用截断的Golomb编码方式将映射后的符号编码进码流。25、如权利要求23所述的方法,其特征在于,所述将当前块中的各非零系数符号和对应非零系数前零系数的个数编码进码流的过程具体包括基于zig-zag方式正向扫描当前块,在扫描到第一个非零系数时,编码该扫描到的非零系数前零系数的个数以及该非零系数的符号;后续在每次扫描到一个非零系数时,基于当前块非零系数的个数、前一已编码的非零系数前零系数的个数,来编码当前扫描到的非零系数前零系数的个数,并进而编码当前扫描到的非零系数的符号。26、如权利要求23所述的方法,其特征在于,所述将当前块中相应非零系数的幅值编码进码流的过程具体为基于zig-zag方式逆向扫描当前块,在扫描到第一个幅值大于1的非零系数时,开始分别将每个扫描到的非零系数编码进码流。27、如权利要求23所述的方法,其特征在于,所述将当前块中相应非零系数的幅值编码进码流的过程具体包括基于zig-zag方式逆向扫描当前块,在扫描到笫一个幅值大于1的非零系数时,开始编码该扫描到的当前非零系数及其在后续扫描到下一个幅值大于1的非零系数之前所扫描到的幅值等于1的非零系数个数;在后续每次扫描到一个幅值大于1的非零系数时,基于前一已编码的幅值大于1的非零系数,来编码当前扫描到的非零系数及其在后续扫描到下一个幅值大于1的非零系数之前所扫描到的幅值等于1的非零系数个数。28、一种变长解码方法,其特征在于,包括步骤在当前块中解码出非零系数符号及对应非零系数前零系数的个数;以及在当前块中解码用于标识非零系数符号已编码完的块结束标志;解码当前块中幅值大于1的系数个数;根据解码得到的幅值大于1的系数个数,在当前块中解码出对应的非零系数的幅值。29、一种变长编码器,其特征在于,包括用于统计当前块中幅值大于1的系数个数的单元;用于将当前块中的各非零系数符号和对应非零系数前零系数的个数编码进码流的单元;和用于在码流中编码入用于标识非零系数符号已编码完的块结束标志的单元;用于将统计得到的幅值大于1的系数个数编码进码流的单元;用于将当前块中相应非零系数的幅值编码进码流的单元。30、一种变长解码器,其特征在于,包括用于在当前块中解码出非零系数符号及对应非零系数前零系数个数的单元;用于在当前块中解码用于标识非零系数符号已编码完的块结束标志的单元;用于解码当前块中幅值大于1的系数个数的单元;用于根据解码得到的幅值大于1的系数个数,在当前块中解码出对应的非零系数幅值的单元。31、一种变长编码方法,其特征在于,包括步骤将当前块中的各非零系数符号和对应非零系数前零系数的个数编码进码流;在码流中编码入用于标识非零系数符号已编码完的块结束标志;将相应非零系数的幅值编码进码流;以及在码流中编码入用于标识非零系数幅值已编码完的块结束标志。32、如权利要求31所述的方法,其特征在于,所述将当前块中的各非零系数符号和对应非零系数前零系数的个数编码进码流的过程具体包括分别将当前块中的每个非零系数符号和该非零系数前零系数的个数映射成对应符号;采用截断的Golomb编码方式将映射后的符号编码进码流。33、如权利要求31所述的方法,其特征在于,所述将当前块中的各非零系数符号和对应非零系数前零系数的个数编码进码流的过程具体包括基于zig-zag方式正向扫描当前块,在扫描到第一个非零系数时,编码该扫描到的非零系数前零系数的个数以及该非零系数的符号;后续在每次扫描到一个非零系数时,基于当前块非零系数的个数、前一已编码的非零系数前零系数的个数,来编码当前扫描到的非零系数前零系数的个数,并进而编码当前扫描到的非零系数的符号。34、如权利要求31所述的方法,其特征在于,所述将当前块中相应非零系数的幅值编码进码流的过程具体为基于zig-zag方式逆向扫描当前块,在扫描到第一个幅值大于1的非零系数时:,开始分别将每个扫描到的非零系数编码进码流。35、如权利要求31所述的方法,其特征在于,所述将当前块中相应非零系数的幅值编码进码流的过程具体包括基于zig-zag方式逆向扫描当前块,在扫描到笫一个幅值大于1的非零系数时,开始编码该扫描到的当前非零系数及其在后续扫描到下一个幅值大于1的非零系数之前所扫描到的幅值等于1的非零系数个数;在后续每次扫描到一个幅值大于1的非零系数时,基于前一已编码的幅值大于1的非零系数,来编码当前扫描到的非零系数及其在后续扫描到下一个幅值大于1的非零系数之前所扫描到的幅值等于1的非零系数个数。36、一种变长解码方法,其特征在于,包括步骤在当前块中解码出非零系数符号及对应非零系数前零系数的个数;以及解码出用于标识非零系数符号已编码完的块结束标志;在当前块中解码出对应非零系数的幅值;以及解码出用于标识非零系数幅值已编码完的块结束标志。37、一种变长编码器,其特征在于,包括用于将当前块中的各非零系数符号和对应非零系数前零系数的个数编码进码流的单元;用于在码流中编码入用于标识非零系数符号已编码完的块结束标志的单元^和用于将相应非零系数的幅值编码进码流的单元;用于在码流中编码入用于标识非零系数幅值已编码完的块结束标志的单元。38、一种变长解码器,其特征在于,包括用于在当前块中解码出非零系数符号及对应非零系数前零系数个数的单元;和用于解码出用于标识非零系数符号已编码完的块结束标志的单元;用于在当前块中解码出对应非零系数幅值的单元;用于解码出用于标识非零系数幅值已编码完的块结束标志的单元。全文摘要本发明公开了一种变长编码方法,包括步骤统计当前块中非零系数的个数和幅值大于1的系数个数;将统计得到的非零系数个数编码进码流;将当前块中的各非零系数符号和对应非零系数前零系数的个数编码进码流;以及将统计得到的幅值大于1的系数个数编码进码流;将当前块中相应非零系数的幅值编码进码流。相应的本发明还公开了对应的变长解码方法和变长编解码器。本发明可以进一步提高熵编码的编码效率,同时编码过程基于更为简单的码表结构,从而降低切换计算的复杂度及减少内存空间的占用。文档编号H04N7/26GK101198054SQ200610163459公开日2008年6月11日申请日期2006年12月5日优先权日2006年12月5日发明者周建同,曾鹏鑫,林四新,熊联欢申请人:华为技术有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1