CN101267553A - 一种实现编、解码的方法和装置 - Google Patents

一种实现编、解码的方法和装置 Download PDF

Info

Publication number
CN101267553A
CN101267553A CN 200710080097 CN200710080097A CN101267553A CN 101267553 A CN101267553 A CN 101267553A CN 200710080097 CN200710080097 CN 200710080097 CN 200710080097 A CN200710080097 A CN 200710080097A CN 101267553 A CN101267553 A CN 101267553A
Authority
CN
China
Prior art keywords
nonzero coefficient
coefficient
current block
level
code table
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Pending
Application number
CN 200710080097
Other languages
English (en)
Inventor
胡昌启
林四新
曾鹏鑫
刘盈嘉
周建同
高山
熊联欢
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Huawei Technologies Co Ltd
Original Assignee
Huawei Technologies Co Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Huawei Technologies Co Ltd filed Critical Huawei Technologies Co Ltd
Priority to CN 200710080097 priority Critical patent/CN101267553A/zh
Publication of CN101267553A publication Critical patent/CN101267553A/zh
Pending legal-status Critical Current

Links

Images

Landscapes

  • Compression, Expansion, Code Conversion, And Decoders (AREA)

Abstract

本发明公开了一种实现编码的方法,该方法包括:确定当前块中非零系数个数,将该非零系数个数编码;将当前块系数扫描形成二元数对,所述二元数对为:非零系数前零系数的个数和非零系数,按照映射关系将该非零系数映射为等级和剩余幅值;将所述非零系数前零系数的个数、等级对应的序号和剩余幅值进行编码。通过本发明,有效地利用了Run与等级之间的分布规律和Run与非零系数个数之间的相关性,降低了编码码率,节约了码流,提高了编码效率。本发明还公开一种实现编码的装置,实现解码的方法和装置。

Description

一种实现编、解码的方法和装置
技术领域
本发明涉及图像处理技术,尤其涉及一种实现编、解码的方法和装置。
背景技术
现有技术中,编码过程主要如图1所示,其中熵编码部分是整个编码过程的重要组成部分,熵编码过程对提高压缩性能有重要作用。视频信号通过帧内预测获得残差系数,或通过运动估计和预定补偿获得残差系数,将获得的残差系数变换和量化后,经过一定的扫描方式扫描,进入熵编码过程,编码形成压缩码流。
熵编码早在1950年就应用于视频编码过程中,作为整个视频编码框架的最后一个模块。熵编码的对象是之前所有模块生成的一系列的语法元素,其中包括宏块类型,参考帧索引,宏块编码模板(CBP),量化步长(QP),运动矢量的残差,变换和量化后的残差系数等。在所有这些语法元素中,残差系数的信息量及最终编码后的数据量都是最大的,同时它也是最具编码压缩空间的,因而一直以来它都是熵编码研究的重点。
80年代中期出现了一个新的针对离散余弦变换(DCT)系数编码的变长熵编码技术,此技术通过之字形扫描(zig-zag)将当前块中非零系数表示成二元数对的形式,即(非零系数前零系数的个数(Run),非零系数(Level))的形式,并采用一个变长码来编码此(Run,Level)二元数对,这一技术也就是二维变长编码(2D-VLC)技术。
为提高块结束标记(EOB)的编码效率,随后又发展了三维变长编码(3D-VLC)技术,即对(last,Run,Level)的联合编码,其中,last表示此系数是否为块内的最后一个非零系数。同时也出现了针对宏块类型分别设计更有针对性的变长编码(VLC)码表的方法,其中,宏块类型包括:帧内编码宏块(intra)或帧间编码宏块(inter)。
另外,现有技术还发展了基于上下文的变长熵编码技术,主要包括将Level及Run分开建立上下文分开编码的技术和基于2D-VLC的上下文编码技术。
以一个4×4块的系数为例,说明目前普遍采用自适应二维VLC熵编码器技术,该技术的编码过程如图2(a)、图2(b)和图2(c)所示,可以采用多码表自适应切换编码。首先,将该4×4块经过zig-zag方式扫描形成(Level,Run)数对,该数对为正向,即从低频到高频。然后,将扫描后的块系数编码采用2D-VLC方式,即采用(Level,Run)+EOB的编码策略。最后,将(Level,Run)+EOB的编码采用逆向编码,在该逆向编码的过程中,对编码顺序中的第一个数对的编码采用单独的码表,后续的数对是根据前一数对的Level值在多个2D-VLC码表中进行切换的。其中,码表主要分为三类,分别用于intra块亮度系数、inter块亮度系数及色度块系数的编码,而所有的语法元素都可以采用Exp-Golomb码或混合哥伦布(Hybrid-Golomb)码编码。而现有的解码方式主要也是与现有的编码方式相对应实现的。
在目前采用的这种方案中,只利用了Run和Level编码,没有充分利用Run与等级之间的分布规律,该等级是根据Level值划分的,也没有充分考虑到残差系数经过变换和量化后,Run与非零系数个数之间的相关性,使得在编码结构上不利于提高编码效率,即编码效率较低。
发明内容
本发明实施例提供一种实现编、解码的方法和装置,以解决现有技术中存在编码效率较低的问题。
本发明实施例提供一种实现编码的方法,该方法包括:
确定当前块中非零系数个数,将该非零系数个数编码;
将当前块系数扫描形成二元数对,所述二元数对为:非零系数前零系数的个数和非零系数,按照映射关系将该非零系数映射为等级和剩余幅值;
将所述非零系数前零系数的个数、等级对应的序号和剩余幅值进行编码。
本发明实施例还提供一种实现编码的装置,该装置包括:
第一编码单元,用于确定当前块中非零系数个数,将该非零系数个数编码;
映射单元,用于将当前块系数扫描形成二元数对,所述二元数对为:非零系数前零系数的个数和非零系数,按照映射关系将该非零系数映射为等级和剩余幅值;
第二编码单元,用于将所述非零系数前零系数的个数、等级对应的序号和剩余幅值进行编码。
本发明实施例还提供一种实现解码的方法,该方法包括:
解码当前块中非零系数个数;
解码非零系数前零系数的个数、等级对应的序号和剩余幅值;
按照映射关系将所述序号对应的等级和剩余幅值映射为非零系数。
本发明实施例还提供一种实现解码的装置,该装置包括:
第一解码单元,用于解码当前块中非零系数个数;
第二解码单元,用于解码非零系数前零系数的个数、等级对应的序号和剩余幅值;
映射单元,用于按照映射关系将所述序号对应的等级和剩余幅值映射为非零系数。
本发明实施例通过将当前块中非零系数个数编码,再将当前块系数扫描形成二元数对,按照映射关系将非零系数映射为等级和剩余幅值,最后将非零系数前零系数的个数、等级对应的序号和剩余幅值进行编码的方法,有效地利用了Run与等级之间的分布规律和Run与非零系数个数之间的相关性,降低了编码码率,节约了码流,提高了编码效率。
附图说明
图1为背景技术中AVS视频编码器结构示意图;
图2(a)、图2(b)和图2(c)为背景技术中二维VLC熵编码流程示意图;
图3为本发明实施例中实现编码的装置结构示意图;
图4本发明实施例1中编码步骤流程示意图;
图5本发明实施例1中当前4×4块示意图;
图6为本发明实施例2中解码步骤流程示意图;
图7为本发明实施例中实现解码的装置。
具体实施方式
在本发明实施例中:首先,确定当前块中非零系数个数,将该非零系数个数编码;然后将当前块系数扫描形成二元数对,所述二元数对为:非零系数前零系数的个数和非零系数,按照映射关系将该非零系数映射为等级和剩余幅值;最后,将所述非零系数前零系数的个数、等级对应的序号和剩余幅值进行编码。
如图3所示,为本发明实施例实现编码的装置结构示意图,该装置包括第一编码单元11、映射单元12和第二编码单元13,其中,第一编码单元11用于对当前块中非零系数个数进行编码;映射单元12用于将当前块系数扫描形成二元数对,所述二元数对为:非零系数前零系数的个数和非零系数,按照映射关系将该非零系数映射为等级和剩余幅值;第二编码单元13用于将所述非零系数前零系数的个数、等级对应的序号和剩余幅值进行编码。
所述第一编码单元11包括第一计算单元21、第一查找单元22和第一操作单元23,其中,第一计算单元21用于根据当前块的相邻块非零系数个数确定当前块预测非零系数个数,若该预测非零系数个数在设定范围内,则将预先设定的数值作为第一码表索引;第一查找单元22用于利用所述第一码表索引和所述当前块预测非零系数个数从当前块所在的宏块类型对应的码表中查找出非零系数个数对应的二进制值;第一操作单元23用于对所述非零系数个数对应的二进制值进行编码。
所述映射单元12包括扫描单元31、保存单元32和第二操作单元33,其中,扫描单元31用于将当前块系数扫描形成二元数对,所述二元数对为:非零系数前零系数的个数和非零系数;保存单元32用于保存映射关系,该映射关系为:
Sgn ( Level ) = S 3 , Level > 1 S 2 , Level = 1 S 1 , Level = - 1 S 0 , Level < - 1 和|Level|-1,其中,Level表示非零系数,S0至S3分别表示将非零系数划分为的4个等级;第二操作单元33用于根据所述非零系数的范围确定该非零系数对应的等级,若所述映射关系中存在至少两个非零系数值映射到一个等级时,即Level>1或Level<-1,则将|Level|-1值作为剩余幅值。
所述第二编码单元13包括第二计算单元41、第二查找单元42和第三操作单元43,其中,第二计算单元41用于根据所述非零系数前零系数的个数确定第二码表索引;第二查找单元42用于根据所述第二码表索引和当前块预测非零系数个数从当前块所在的宏块类型对应的码表中查找出所述非零系数前零系数的个数和等级对应的序号所对应的二进制值;第三操作单元43用于对所述非零系数前零系数的个数和等级对应的序号所对应的二进制值进行编码。
所述第二编码单元13还包括第三计算单元44、第三查找单元45和第四操作单元46,其中,第三计算单元44用于根据前一编码中的剩余幅值确定第三码表索引,若不存在前一编码中的剩余幅值,则确定第三码表索引为零;第三查找单元45用于利用所述第三码表索引从当前块所在的宏块类型对应的码表中查找出所述剩余幅值对应的二进制;第四操作单元46用于对所述剩余幅值对应的二进制进行编码。
下面结合具体实施例详细说明本发明中实现编码的方法。
如图4所示,为本发明实施例1中编码步骤流程示意图,在本实施例中以4×4块为例,详细说明本发明方法。
步骤401:确定当前块中非零系数个数(numCoeff),若numCoeff>0,则将该numCoeff编码,进入步骤402。
在进行当前块编码之前,已经确定了当前块所在的宏块类型和位于该宏块中位置,对当前块中的数据进行预测后获得的残差系数经过DCT变化形成了当前块的系数。
如图5所示,为实施例1中当前4×4块示意图,确定图中16个系数中的非零个数numCoeff=5,通过这种直接将块中每一个系数进行判断,确定系数是否非零的方法可以准确地获取当前块中非零系数个数,判断出numCoeff是否大于0。当然,确定numCoeff是否大于0的方法不止上述一种,例如,还可以判断是否存在关于当前块所有系数是否为全零的标识,若存在,则numCoeff大于0,即当前块中至少有一个非零系数;若没有,则说明numCoeff可能为零,此时可以再将块中每一个系数进行判断,确定numCoeff是否为0。若numCoeff等于0,则结束当前块的熵编码,若numCoeff大于0,则执行后续步骤402。
当确定numCoeff大于0时,则要将该numCoeff值编码进码流,在本实施例中,将该numCoeff值编码进码流的方式可以为:根据所述当前块所在的宏块类型和当前块的相邻块信息将该非零系数个数编码,具体地说可以包括:
1、判断当前块是否是条带的第一个4×4块、当前块的相邻块所在的宏块是否为跳过(skip)宏块,或当前块的相邻块是否为全零块,若上述三种情况至少有一种为是,则可以设置码表索引(tabindex)=0,然后根据当前块的类型从与所述类型对应的码表中查找出与所述numCoeff值对应的二进制值,将该二进制值编码进码流,在本实施例中,当前块的类型为INTRA、INTER或色度(CHROMA)块。由前述已经确认numCoeff=5,且设定当前块的类型为INTRA,则可以从INTRA对应的码表中查找出numCoeff对应的二进制值,然后将此二进制值编码进码流。
在本发明实施例中,码表中的二进制值是利用huffman编码方法生成的,当然也可以利用其他方法生成,例如,可以按概率映射后使用Golomb-Rice码等编码方法生成。
2、若当前块不是1中三种情况中的任意一种,则可以根据相邻块的numCoeff和当前块所在的宏块类型将该numCoeff编码。首先根据相邻块的numCoeff来确定当前块预测numCoeff,即prenumCoeff。在本发明实施例中,确定prenumCoeff值的方法可以为:
首先,根据当前块的左边块和上边块设定prenumCoeff值。若当前4×4块左边块和上边块可用,将左边块的非零系数个数记为left-numCoeff,上边块的非零系数个数记为top-numCoeff,则设定prenumCoeff=(left-numCoeff+top-numCoeff)/2;若只有当前4×4块的左边块可用,则设定prenumCoeff=left-numCoeff;若只有当前4×4块的上边块可用,则设定prenumCoeff=top-numCoeff。当然,这种根据当前块的左边块和上边块来进行预测的方法有多种,可以利用左边块和上边块对当前块的影响程度来确定prenumCoeff。
然后,根据相邻块非零系数个数确定当前块的prenumCoeff,若该prenumCoeff在设定范围内,则将设定的数值作为第一码表索引,为了与后续出现的码表索引区分,在进行非零系数个数编码时该tabindex表示第一码表索引。
若当前块所在的宏块类型为INTRA,且已经确定设定范围为[1,2],若1<=prenumCoeff<=2,则设定tabindex=1;若已经确定设定范围为[3,5],若3<=prenumCoeff<=5,则设定tabindex=2;若已经确定设定范围为[6,16],若6<=prenumCoeff<=16,则设定tabindex=3。
若当前块所在的宏块类型为INTER,且已经确定设定范围为[1,1],若1<=prenumCoeff<=1,则设定tabindex=1;若已经确定设定范围为[2,3],若2<=prenumCoeff<=3,则设定tabindex=2;若已经确定设定范围为[4,16],若4<=prenumCoeff<=16,则设定tabindex=3。
若当前块所在的宏块类型为色度块,且已经确定设定范围为[1,2],若1<=prenumCoeff<=2,则设定tabindex=1;若已经确定设定范围为[3,4],若3<=prenumCoeff<=4,则设定tabindex=2;若已经确定设定范围为[5,16],若5<=prenumCoeff<=16,则设定tabindex=3。
在本实施例中,由于设定当前块是4×4块,则prenumCoeff的取值范围是[0,16],在上述设定prenumCoeff和tabindex值中,设定的条件可以有多种,用户可以根据自身需要来设定。当设定成功prenumCoeff和tabindex值后,可以利用当前块所在的宏块类型对应的码表查找出numCoeff对应的二进制值,并将该二进制值编码进码流。
步骤402:将当前块系数扫描形成二元数对(Run,Level),按照设定的映射关系将该Level映射为等级和剩余幅值,将所述Run、等级对应的序号进行编码。
根据步骤401确定了当前块中非零系数的个数numCoeff大于0,并将该numCoeff编码进码流。然后,将当前4×4块进行zig-zag扫描,扫描后系数为:(9,2,0,-3,0,1,0,0,-1,0,0,0,0,0,0,0),将扫描后系数形成逆向(Run,Level)数对:(2,-1),(1,1),(1,-3),(0,2),(0,9)。将此获得的5个数对按照设定的映射关系进行映射,在本实施例中,设定映射关系为公式(1) Sgn ( Level ) = S 3 , Level > 1 S 2 , Level = 1 S 1 , level = - 1 S 0 , Level < - 1 和|Level|-1,其中,S0至S3分别表示将Level划分为的4个等级,则根据公式(1)之后将上述5个数对映射,确定每一个Level对应的等级,若所述映射关系中存在至少两个非零系数值映射到一个等级时,即Level>1或Level<-1,则将|Level|-1值作为剩余幅值,即将|Level|-1位于对应的数对之后为(Run,Si),(i=0,1,2,3),即(2,S1),(1,S2),(1,S0)2,(0,S3)1,(0,S3)8。当然,也可以将|Level|-1取出按顺序排列:(2,S1),(1,S2),(1,S0),(0,S3),(0,S3),2,1,8。
当获得所述映射后的二元数对(Run,Sx)后,可以根据所述Run、当前块所在的宏块类型和当前块中非零系数个数将(Run,Sx)进行编码。具体地说,将所述Run按照保存的公式计算来确定码表中的tabindex,在这里,计算(Run,Sx)用到的tabindex为第二码表索引,该计算方式可以为:tabindex=Run×4+x。通过步骤401已经确定当前块的类型和numCoeff,再根据此时获得的tabindex值,则可以根据当前块所在的宏块类型对应的码长表中查找出二元数对的码长(len),还可以根据码字表查找出二元数对的码字(inf),将查找出的数值对应的二进制编码,直到将当前块的所有Level对应的等级对应的序号和Run全部编码完。
在本步骤中,映射关系并不是唯一的;另外,根据获得的二元数对(Run,Sx)根据公式来确定码表中的tabindex的方式也可以有多种,用户可以根据需要来设定。
当然,在本发明实施例中,除了通过上述映射方法获取第二码表索引来进行编码,还可以有其他方式,例如,可以将二元数对(Run,Sx)按照用户设定的条件映射为数值,统计对应的数对出现的概率,然后根据概率进行排序,从而映射成一组非负整数,再利用Golumb-Rice或指数Golumb等变长编码方法进行编码,同样也可以利用当前块所在宏块的类型来编制不同的码表。甚至还可以设置阈值,在该阈值大小的两侧分别采用不同的编码方法。
步骤403:将所述剩余幅值编码。
在本实施例中,根据公式(1)可以确定:当x=1时,即当Level=1时将映射到S2等级,当x=-1时,即当Level=-1时将映射到S1等级,这两种情况都为一个Level值映射到一个等级;当x<-1时,即当Level<-1时将映射到S0等级,当x>1时,即当Level>1时将映射到S3等级,此时,所述映射关系中存在至少两个非零系数值映射到一个等级的情况,也就是存在剩余幅值。
当确定映射关系中存在至少两个非零系数值映射到一个等级的情况,在本实施例中,即数对中存在S0或S3,亦即S0和S3的总个数(numGreate)大于0。显然,通过步骤402可以确定numGreate=3,且满足Level>1或Level<-1条件的Level的剩余幅值分别为:2,1,8,则分别将所述Level的剩余幅值编码。若确定映射关系中存在至少两个非零系数值映射到一个等级的情况,则停止编码。在本发明实施例中,可以设定所述的方法包括:
1、利用设定的阈值确定码表中的每一列,即确定码表。
首先,可以设定三个阈值,分别为:第一阈值(threshold)、第二阈值(GR_RUN)和第三阈值(START_SUFFIX),若根据这三个值确定INTRA宏块码表的第一列,则当行数<=threshold时,采用一元码;当行数<=threshold+GR_RUN时,采用一元前缀+START_SUFFIX位后缀;否则,后缀采用11位为定长,前缀长为:(threshold+GR_RUN)的编码前缀+1。若threshold=5,GR_RUN=12,START_SUFFIX=1,则该第一列前5行采用一元码;第6行至第17行,采用一元前缀+1位后缀;第18行之后,采用17的编码前缀+1。通过这种方法,可以确定出一列以上的码表,当然,上述设定方法不是唯一的,也可以有其他的设定条件。
2、根据当前块所在的宏块类型将Level的剩余幅值编码。
设定当前要编码进码流的剩余幅值为2,该编码进码流的方法可以包括:首先设定一期望值(pred),在第一次进行编码过程中,即不存在前一编码中的剩余幅值时,该pred可以设定为0,若不是第一次编码,则将该pred设定为前一编码中的剩余幅值。此时,2为当前块第一次进行编码的剩余幅值,则设定pred为0。然后,根据设定的条件确定tabindex,在此处,将剩余幅值进行编码时,tabindex为第三码表索引,该方法为:按照用户需要设定一个3行的数组: { 1,3,10,24,48,16384 } { 2,4,10,24,48,16384 } { 1,3,10,12,24,16384 } , 其中,第一行表示类型为INTRA的期望值,第二行表示类型为INTER的期望值,第三行表示为类型为色度块的期望值。当前块所在的宏块类型为INTRA,且当前要编码进码流的剩余幅值为2,则确定2位于第一行中1和3之间,此时下标(tid)为1,此时pred=0,其大小不在第一行中1和3之间,则tabindex=0。若pred大小在第一行中1和3之间,即1<pred<=3,则设定tabindex=tid。最后,则可以根据得到的tabindex=0,前块所在的宏块类型为INTRA,要编码进码流的数据为2,则可以从当前块所在的宏块类型对应的码表中查找出对应的二进制值。循环利用这种方法,可以获得Level的剩余幅值1和8的对应的二进制,进而实现编码。
同样,在本发明实施例中,上述编码方法也不是唯一的,用户可以根据需要利用其他方法进行编码。
如图6所示,为本发明实施例2中解码步骤流程示意图,该方法包括:
步骤601:解码当前块中非零系数个数numCoeff。
在本实施例中,设定numCoeff编码过程是按照步骤401的方式实现的,则根据所述非零系数个数对应的二进制值和第一码表索引从所述当前块所在的宏块类型对应的码表中查找出非零系数个数。
步骤602:解码Run、等级对应的序号。
同样,设定二元数对编码是按照步骤402方式实现的,根据Run和等级对应的序号对应的二进制值以及第二码表索引,从所述当前块所在的宏块类型对应的码表中查找出所述非零系数前零系数的个数和等级对应的序号,即根据二进制值确定二元数对的码长,然后从码长表查找出二元数对码长对应的tabindex,根据公式tabindex=Run×4+x确定映射后的二元数对(Run,Sx),将该(Run,Sx)按照公式(2)进行映射,该公式为:
Val ( S x ) = 1 , x = 3 1 , x = 2 - 1 , x = 1 - 1 , x = 0 - - - ( 2 )
映射后的(Run,Level′)与原始(Run,Level)不同,Level′+剩余幅值=Level,但可以根据(Run,Level′)确定在4×4块中非零系数对应的位置。同样,也可以查找出码字对应的tabindex。
步骤603:解码Level剩余幅值,按照映射关系将所述序号对应的等级和剩余幅值映射为非零系数。
若设定编码过程是按照步骤403进行的,则将二进制值通过当前块所在的宏块类型对应的码表中查找出对应的剩余幅值2,1,8,由于在步骤402中是按照|Level|-1来进行设置的,因此,剩余幅值为3,2,9,并将该剩余幅值增加到步骤902确定的(Run,Level′),则获得了原始(Run,Level)。
通过上述对本发明解码方法实施例的描述,本发明实施例还提供一种解码装置,如图7所示,该装置包括第一解码单元51、第二解码单元52和映射单元53,其中,第一解码单元51用于解码当前块中非零系数个数;第二解码单元52用于解码Run、等级对应的序号和剩余幅值;映射单元53用于按照映射关系将所述序号对应的等级和剩余幅值映射为Level。
所述装置还包括第一保存单元54,用于保存当前块所在的宏块类型对应的码表。
所述第一解码单元51用于根据所述非零系数个数对应的二进制值和第一码表索引从所述当前块所在的宏块类型对应的码表中查找出非零系数个数。
所述第二解码单元52包括第一操作单元61和第二操作单元62,其中,第一操作单元61用于根据Run和等级对应的序号所对应的二进制值以及第二码表索引从所述当前块所在的宏块类型对应的码表中查找出所述Run和等级对应的序号;第二操作单元62用于根据剩余幅值对应的二进制值以及第三码表索引从所述当前块所在的宏块类型对应的码表中查找出所述剩余幅值。
所述映射单元53包括第二保存单元71和执行单元72,其中,第二保存单元71用于保存所述映射关系,该映射关系为:
Val ( S x ) = 1 , x = 3 1 , x = 2 - 1 , x = 1 - 1 , x = 0 和剩余幅值=|Level|-1,其中,Level表示非零系数,S0至S3分别表示将非零系数划分为的4个等级;执行单元72用于根据所述剩余幅值确定|Level|,并根据所述等级确定该非零系数。
通过本发明实施例,有效地利用了Run与等级之间的分布规律和Run与非零系数个数之间的相关性,降低了编码码率,节约了码流,提高了编码效率,实验证明,利用本发明实施例,能够实现平均0.1dB的增益。
显然,本领域的技术人员可以对本发明进行各种改动和变型而不脱离本发明的精神和范围。这样,倘若本发明的这些修改和变型属于本发明权利要求及其等同技术的范围之内,则本发明也意图包含这些改动和变型在内。

Claims (23)

1. 一种实现编码的方法,其特征在于,该方法包括:
确定当前块中非零系数个数,将该非零系数个数编码;
将当前块系数扫描形成二元数对,所述二元数对为:非零系数前零系数的个数和非零系数,按照映射关系将该非零系数映射为等级和剩余幅值;
将所述非零系数前零系数的个数、该等级对应的序号和剩余幅值分别进行编码。
2. 如权利要求1所述的方法,其特征在于,
根据所述当前块所在的宏块类型和当前块的相邻块信息将该非零系数个数编码。
3. 如权利要求2所述的方法,其特征在于,
根据相邻块非零系数个数确定当前块的预测非零系数个数,若该预测非零系数个数在设定范围内,则将设定的数值作为第一码表索引;
利用所述第一码表索引和所述当前块中非零系数个数从所述当前块所在的宏块类型对应的码表中查找出非零系数个数对应的二进制值,对该二进制值进行编码。
4. 如权利要求1所述的方法,其特征在于,所述映射关系为:
Sgn ( Level ) = S 3 , Level > 1 S 2 , Level = 1 S 1 , Level = - 1 S 0 , Level < - 1 和|Level|-1,其中,Level表示非零系数,S0至S3分别表示将非零系数划分为的4个等级,所述按照映射关系将该非零系数映射为等级和剩余幅值包括:
根据所述非零系数的范围确定该非零系数对应的等级,若所述映射关系中存在至少两个非零系数值映射到一个等级时,即Level>1或Level<-1,则将|Level|-1值作为剩余幅值。
5. 如权利要求1所述的方法,其特征在于,
根据当前块所在的宏块类型和当前块中非零系数个数将所述非零系数前零系数的个数和等级对应的序号进行编码。
6. 如权利要求5所述的方法,其特征在于,
根据所述非零系数前零系数的个数确定第二码表索引,根据该第二码表索引和所述当前块中非零系数个数从所述当前块所在的宏块类型对应的码表中查找出所述非零系数前零系数的个数和等级对应的序号所对应的二进制值,对该二进制值进行编码。
7. 如权利要求1所述的方法,其特征在于,
根据当前块所在的宏块类型将所述剩余幅值进行编码。
8. 如权利要求7所述的方法,其特征在于,
根据前一编码中的剩余幅值确定第三码表索引,若不存在前一编码中的剩余幅值,则确定第三码表索引为零;
利用所述第三码表索引从所述当前块所在的宏块类型对应的码表中查找出所述剩余幅值对应的二进制,对该二进制值进行编码。
9. 一种实现编码的装置,其特征在于,该装置包括:
第一编码单元,用于对当前块中非零系数个数进行编码;
映射单元,用于将当前块系数扫描形成二元数对,所述二元数对为:非零系数前零系数的个数和非零系数,按照映射关系将该非零系数映射为等级和剩余幅值;
第二编码单元,用于将所述非零系数前零系数的个数、等级对应的序号和剩余幅值进行编码。
10. 如权利要求9所述装置,其特征在于,所述第一编码单元包括:
第一计算单元,用于根据当前块的相邻块非零系数个数确定当前块预测非零系数个数,若该预测非零系数个数在设定范围内,则将预先设定的数值作为第一码表索引;
第一查找单元,用于利用所述第一码表索引和所述当前块预测非零系数个数从当前块所在的宏块类型对应的码表中查找出非零系数个数对应的二进制值;
第一操作单元,用于对所述非零系数个数对应的二进制值进行编码。
11. 如权利要求9所述装置,其特征在于,所述映射单元包括:
扫描单元,用于将当前块系数扫描形成二元数对,所述二元数对为:非零系数前零系数的个数和非零系数;
保存单元,用于保存映射关系,该映射关系为:
Sgn ( Level ) = S 3 , Level > 1 S 2 , Level = 1 S 1 , Level = - 1 S 0 , Level < - 1 和|Level|-1,其中,Level表示非零系数,S0至S3分别表示将非零系数划分为的4个等级;
第二操作单元,用于根据所述非零系数的范围确定该非零系数对应的等级,若所述映射关系中存在至少两个非零系数值映射到一个等级时,即Level>1或Level<-1,则将|Level|-1值作为剩余幅值。
12. 如权利要求9所述装置,其特征在于,所述第二编码单元包括:
第二计算单元,用于根据所述非零系数前零系数的个数确定第二码表索引;
第二查找单元,用于根据所述第二码表索引和所述当前块预测非零系数个数从当前块所在的宏块类型对应的码表中查找出所述非零系数前零系数的个数和等级对应的序号所对应的二进制值;
第三操作单元,用于对所述非零系数前零系数的个数和等级对应的序号所对应的二进制值进行编码。
13. 如权利要求9所述装置,其特征在于,所述第二编码单元还包括:
第三计算单元,用于根据前一编码中的剩余幅值确定第三码表索引,若不存在前一编码中的剩余幅值,则确定第三码表索引为零;
第三查找单元,用于利用所述第三码表索引从当前块所在的宏块类型对应的码表中查找出所述剩余幅值对应的二进制;
第四操作单元,用于对所述剩余幅值对应的二进制进行编码。
14. 一种实现解码的方法,其特征在于,该方法包括:
解码当前块中非零系数个数;
解码非零系数前零系数的个数、等级对应的序号和剩余幅值;
按照映射关系将所述序号对应的等级和剩余幅值映射为非零系数。
15. 如权利要求14所述方法,其特征在于,
根据所述非零系数个数对应的二进制值和第一码表索引从所述当前块所在的宏块类型对应的码表中查找出非零系数个数。
16. 如权利要求14所述方法,其特征在于,
根据非零系数前零系数的个数和等级对应的序号所对应的二进制值以及第二码表索引,从所述当前块所在的宏块类型对应的码表中查找出所述非零系数前零系数的个数和等级对应的序号。
17. 如权利要求14所述方法,其特征在于,
根据剩余幅值对应的二进制值以及第三码表索引从所述当前块所在的宏块类型对应的码表中查找出所述剩余幅值。
18. 如权利要求14所述方法,其特征在于,所述映射关系为:
Val ( S x ) = 1 , x = 3 1 , x = 2 - 1 x = 1 - 1 x = 0 和剩余幅值=|Level|-1,其中,Level表示非零系数,S0至S3分别表示将非零系数划分为的4个等级,所述按照映射关系将所述等级和剩余幅值映射为非零系数包括:
根据所述剩余幅值确定|Level|,并根据所述等级确定该非零系数。
19. 一种实现解码的装置,其特征在于,该装置包括:
第一解码单元,用于解码当前块中非零系数个数;
第二解码单元,用于解码非零系数前零系数的个数、等级对应的序号和剩余幅值;
映射单元,用于按照映射关系将所述序号对应的等级和剩余幅值映射为非零系数。
20. 如权利要求19所述装置,其特征在于,所述装置还包括:
第一保存单元,用于保存当前块所在的宏块类型对应的码表。
21. 如权利要求20所述装置,其特征在于,所述第一解码单元,用于根据所述非零系数个数对应的二进制值和第一码表索引从所述当前块所在的宏块类型对应的码表中查找出非零系数个数。
22. 如权利要求20所述装置,其特征在于,所述第二解码单元包括:
第一操作单元,用于根据非零系数前零系数的个数和等级对应的序号所对应的二进制值以及第二码表索引从所述当前块所在的宏块类型对应的码表中查找出所述非零系数前零系数的个数和等级对应的序号;
第二操作单元,用于根据剩余幅值对应的二进制值以及第三码表索引从所述当前块所在的宏块类型对应的码表中查找出所述剩余幅值。
23. 如权利要求19所述装置,其特征在于,所述映射单元包括:
第二保存单元,用于保存所述映射关系,该映射关系为:
Val ( S x ) = 1 , x = 3 1 , x = 2 - 1 x = 1 - 1 x = 0 和剩余幅值=|Level|-1,其中,Level表示非零系数,S0至S3分别表示将非零系数划分为的4个等级;
执行单元,用于根据所述剩余幅值确定|Level|,并根据所述等级确定该非零系数。
CN 200710080097 2007-03-12 2007-03-12 一种实现编、解码的方法和装置 Pending CN101267553A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN 200710080097 CN101267553A (zh) 2007-03-12 2007-03-12 一种实现编、解码的方法和装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN 200710080097 CN101267553A (zh) 2007-03-12 2007-03-12 一种实现编、解码的方法和装置

Publications (1)

Publication Number Publication Date
CN101267553A true CN101267553A (zh) 2008-09-17

Family

ID=39989636

Family Applications (1)

Application Number Title Priority Date Filing Date
CN 200710080097 Pending CN101267553A (zh) 2007-03-12 2007-03-12 一种实现编、解码的方法和装置

Country Status (1)

Country Link
CN (1) CN101267553A (zh)

Cited By (10)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN102377994A (zh) * 2010-08-05 2012-03-14 富士通株式会社 上下文自适应可变长度编码方法和系统
CN102404571A (zh) * 2011-11-22 2012-04-04 浙江大学 视频图像编解码中的二进制化的方法和装置
CN102547260A (zh) * 2010-12-22 2012-07-04 联芯科技有限公司 基于上下文自适应的可变长编码的解码方法及系统
CN103002275A (zh) * 2011-09-13 2013-03-27 富士通株式会社 用于cavlc编码的双系数扫描方法
CN103404141A (zh) * 2011-06-27 2013-11-20 英国广播公司 使用变换的视频编码和解码
CN104205831A (zh) * 2012-04-11 2014-12-10 夏普株式会社 针对HEVC中的CABAC的哥伦布-赖斯(Golomb-Rice)/EG编码技术
CN109788285A (zh) * 2019-02-27 2019-05-21 北京大学深圳研究生院 一种量化系数结束标志位的上下文模型选取方法及装置
WO2019127003A1 (zh) * 2017-12-26 2019-07-04 富士通株式会社 图像编码方法、装置以及电子设备
CN112449188A (zh) * 2019-08-28 2021-03-05 腾讯科技(深圳)有限公司 视频解码方法、编码方法、装置、介质及电子设备
CN112449184A (zh) * 2019-08-28 2021-03-05 腾讯科技(深圳)有限公司 变换系数优化方法、编解码方法、装置、介质及电子设备

Cited By (20)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN102377994B (zh) * 2010-08-05 2014-05-07 富士通株式会社 上下文自适应可变长度编码方法和系统
CN102377994A (zh) * 2010-08-05 2012-03-14 富士通株式会社 上下文自适应可变长度编码方法和系统
CN102547260A (zh) * 2010-12-22 2012-07-04 联芯科技有限公司 基于上下文自适应的可变长编码的解码方法及系统
CN102547260B (zh) * 2010-12-22 2014-11-19 联芯科技有限公司 基于上下文自适应的可变长编码的解码方法及系统
CN103404141B (zh) * 2011-06-27 2017-06-06 英国广播公司 使用变换的视频编码和解码
CN103404141A (zh) * 2011-06-27 2013-11-20 英国广播公司 使用变换的视频编码和解码
CN103002275A (zh) * 2011-09-13 2013-03-27 富士通株式会社 用于cavlc编码的双系数扫描方法
CN103002275B (zh) * 2011-09-13 2016-05-04 富士通株式会社 用于cavlc编码的双系数扫描方法
CN102404571A (zh) * 2011-11-22 2012-04-04 浙江大学 视频图像编解码中的二进制化的方法和装置
CN104205831B (zh) * 2012-04-11 2018-02-23 杜比国际公司 用于对与变换系数相关联的比特流进行编码和解码方法
CN104205831A (zh) * 2012-04-11 2014-12-10 夏普株式会社 针对HEVC中的CABAC的哥伦布-赖斯(Golomb-Rice)/EG编码技术
US11039169B2 (en) 2012-04-11 2021-06-15 Dolby International Ab GOLOMB-RICE/EG coding technique for CABAC in HEVC
US11496768B2 (en) 2012-04-11 2022-11-08 Dolby International Ab GOLOMB-RICE/EG coding technique for CABAC in HEVC
US11706451B2 (en) 2012-04-11 2023-07-18 Dolby International Ab Golomb-Rice/EG coding technique for CABAC in HEVC
WO2019127003A1 (zh) * 2017-12-26 2019-07-04 富士通株式会社 图像编码方法、装置以及电子设备
CN109788285A (zh) * 2019-02-27 2019-05-21 北京大学深圳研究生院 一种量化系数结束标志位的上下文模型选取方法及装置
CN112449188A (zh) * 2019-08-28 2021-03-05 腾讯科技(深圳)有限公司 视频解码方法、编码方法、装置、介质及电子设备
CN112449184A (zh) * 2019-08-28 2021-03-05 腾讯科技(深圳)有限公司 变换系数优化方法、编解码方法、装置、介质及电子设备
CN112449188B (zh) * 2019-08-28 2021-08-20 腾讯科技(深圳)有限公司 视频解码方法、编码方法、装置、介质及电子设备
CN112449184B (zh) * 2019-08-28 2022-01-25 腾讯科技(深圳)有限公司 变换系数优化方法、编解码方法、装置、介质及电子设备

Similar Documents

Publication Publication Date Title
CN101267553A (zh) 一种实现编、解码的方法和装置
CN1225127C (zh) 一种用于视频编码的编码端/解码端双向预测方法
KR101622450B1 (ko) 변환을 이용하는 비디오 인코딩 및 디코딩
CN100488254C (zh) 一种基于上下文的熵编码方法及解码方法
CN109257048B (zh) 解码数据值序列的方法、数据解码装置及视频接收机
US5528628A (en) Apparatus for variable-length coding and variable-length-decoding using a plurality of Huffman coding tables
CN108419084B (zh) 改进熵编码和解码的方法、装置及存储介质
EP3087739B1 (en) Data encoding and decoding
US20080246637A1 (en) Cabac Decoding Method
EP3229473B1 (en) Methods and devices for coding and decoding the position of the last significant coefficient
CN100596198C (zh) 一种编码方法及编码器
CN1589023A (zh) 一种基于上下文的多码表变长编解码方法及编解码装置
US7830964B2 (en) Method and/or apparatus for parsing compressed video bitstreams
CN102752592B (zh) 视频变换系数的熵编码方法
CN100542293C (zh) 变长编解码方法及其编解码器
CN100551064C (zh) 变长编码方法及装置
EP2127393B1 (en) Determination of a type of picture encoding of a decompressed video signal
Wang et al. Context-based 2D-VLC for video coding
US7203373B2 (en) Image and video coding with redundant run-length-level-last codewords removed
CN102281435B (zh) 编码方法、解码方法、编码装置、解码装置及编解码系统
CN100413342C (zh) 用于视频或图像压缩的帧内预测模式编解码的方法和装置
CN101047857B (zh) 实现分层变长编解码的方法
Zhang et al. Context-based arithmetic coding reexamined for DCT video compression
KR100552345B1 (ko) 통합형 가변 길이 부호화 기법에 의한 비디오 압축부호화방법 및 장치
KR100195717B1 (ko) 가변 길이 복호기

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
C02 Deemed withdrawal of patent application after publication (patent law 2001)
WD01 Invention patent application deemed withdrawn after publication

Open date: 20080917