对系数块进行编码的方法

文档序号:7622640阅读:172来源:国知局
专利名称:对系数块进行编码的方法
技术领域
本发明涉及图像编码技术领域,尤其涉及一种对系数块进行编码的方法。
背景技术
目前,图像压缩编码标准有ITU-T视频编码专家组(VCEG)制定的活动图像编码标准H.261、H.263;ISO/IEC移动图像专家组(MPEG)制定的静止图像编码标准JPEG和JPEG2000,活动图像编码标准MPEG1、MPEG4-Part2;ITU-T视频编码专家组(VCEG)和ISO/IEC移动图像专家组(MPEG)共同提出的国际视频编码标准MPEG2/H.262、H.264/AVC;音视频编码标准AVS中的活动图像编码标准等。
活动图像视频编码包括以下几个基本步骤预测、求残差、变换、量化和编码。静止图像编码包括以下几个基本步骤变换、量化和编码。
变换量化后的系数块的尺寸有16×16、8×8、4×4、2×2等类型。在H.264/AVC High Profile中有8×8系数块,AVS视频编码标准中只用8×8系数块。本说明书用8×8系数块为例说明。但本技术可扩展到16×16、4×4、2×2等系数块。
上述图像编码标准对变换量化后的系数块的编码包括系数扫描和熵编码。系数扫描就是对二维系数块所有系数按照约定的顺序扫描成为一维数组,例如,H.264/AVC帧模式下8×8的系数块时的扫描次序如下表。根据表1中标明的顺序,将8×8系数块中的所有系数扫描到一个一维1×64的数组中。
表1 例如,待编码的系数块如表2所示表25 -6 0 0 0 0 0 031 0 1 0 0 0 0-200 0 0 0 0 0 000 0 0 0 0 0 031 0 0 0 0 0 0-70 0 0 0 0 0 030 0 0 0 0 0 0-20 0 0 0 0 0 0对表2所示的8×8系数块依照表1所示顺序扫描后得到的一维数组是5,-6,3,-20,1,0,0,0,0,0,3,0,0,1,0,0,0,0,0,1,-7,3,0,0,0,0,0,0,0,0,0,0,0,0,0,-2,0,0,0,0,...(后面全部是0)。
H.264/AVC熵编码对扫描输出的一维数组进行。CABAC(Context-based Adaptive Binary Arithmetic Coding,自适应上下文二值算术编码)是H.264/AVC中采用的熵编码方案之一,具有较高的编码压缩效率,但也具有更高的计算复杂度。
CABAC的编码包括三个主要部分二值化,选择概率模型,算术编码。
对每个待编码的语法元素,二值化过程定义了一种映射规则,将语法元素的值映射成为一串二值字符串。比如语法元素可以取值0,1,2,可以定义如下的映射规则0->0,1->10,2->11,这样对二值字符串编码可以唯一的恢复原语法元素的值信息。这种映射规则称为二值化方案,所述的二值化方法也可以被其它多值化方法代替。
对二值化后得到的二值字符串的每个bit(以下称之为一个bin),选择合适的概率模型。对于二值化符号串的处理也可以延伸至对于多值化的多值符号串处理。H.264中为各个语法元素二值化得到的bin设置了相应的概率模型,对某些bin,其对应的概率模型不止一个。编码时需要根据相邻已编码宏块信息选择正确的概率模型。为bin选择好概率模型之后,即可调用算术编码器进行二值算术编码。
H.264中对编码系数块的CABAC熵编码步骤是步骤1对扫描得到的一维数组,从第一个系数起编码当前系数值是否是0。如果当前系数值不是0,则编码当前系数是否是一维数组中的最后一个非0系数,如果是,则转步骤2,否则继续编码下一系数;如果当前系数值是0,则继续编码下一系数。
步骤2经步骤1处理后,可以得到一维数组各位置上系数值是否是0的全部信息。然后对所有的非0系数,从最后一个开始逆向依次编码。
如上例中,所有非0系数为5,-6,3,-20,1,3,1,1,-7,3,-2。
从最后一个非0系数往前重复下面的编码过程直至编码完所有系数。
针对各个非0系数的具体的编码过程为(1)对每个非0系数,首先编码其绝对值减1;(2)相应的绝对值减1取值为非负整数;H.264中定义的相应的二值化方法是一元前缀码加指数哥伦布后缀码;例如,编码上面的非0系数-7,其绝对值减1为6,二值化后为1111110。对这7个bin,H.264中为第一个bin一共设置了5个可能的概率模型,编码时选择哪一个由已经编码的后面非0系数中等于1和大于1个系数个数决定。例如编码-7时已经编码的非0系数有3,-2,那么其二值化字符串的第一个bin用到第五个模型。H.264中为除第一个bin以外的其他bin一共设置了5个可能的概率模型,编码时选择哪一个由已经编码的后面非0系数中大于1个系数个数决定。例如编码-7时已经编码的非0系数有3,-2,那么其二值化字符串的除第一个bin以外的其他bin用到第三个模型。
(3)为二值化后的各个bin选定模型后对每个bin进行二值算术编码。完成对系数绝对值的编码后,用1个比特编码其符号。
在实际应用过程中,对系数块的编码方式有多种选择,目前的分类和概率模型分配的方案仍然还有进一步改进的空间,以提高编码效率。
另外,CABAC中概率估计的原理是在编码过程中根据已编码的符号来自适应的估计概率值。对每个待编码的符号记做一个bin,CABAC都为之设定了相应的概率模型记做一个ctx。每个ctx包括7比特信息,6比特的state值和1比特的MPS值。这7比特信息构成一个完整的概率估计值。
因为CABAC中待编码bin的取值只有0,1两种,所以对当前bin取值0/1的概率值作估计时,只需要一个1比特MPS(大概率符号)值,标志估计要编码的bin是0还是1的可能性更大一点;和一个6比特state(状态)值,标志这个bin取MPS值的概率估计值。当编码完毕当前bin,则根据实际编码的bin值调整ctx中的概率估计值。如果实际编码的bin是MPS值,意味着出现MPS的概率又大一点,state值向MPS概率估计值增大的方向调整;否则意味着出现MPS的概率变小一点,state值向MPS概率估计值减小的方向调整。这样就达到了在编码过程中动态自适应的估计概率值得目的。
这样的方法对一个概率模型而言,在编码若干bin之后会获得比较好的概率估计值。但是在编码初期由于已编码的符号信息量很小,有些情况下需要一个比较长的自适应估计过程,所以在初期概率模型的估计效果可能不好。而且不同的QP(量化参数)取值对编码数据的统计特点有很大的影响。基于以上两点原因,CABAC做了一个线性模型,针对不同的QP粗略的估计每个概率模型的初始化值(也即初始的概率估计值),其目的在于在编码初期能够获得比较准确的概率估计值以提高编码初期的压缩效率。
CABAC中的基于QP值的线性模型表达式为preCtxState=Clip3(1,126,((m*QP)>>4)+n);上式中Clip3函数的计算方法是如果((m*QP)>>4)+n<1,则结果为1;如果((m*QP)>>4)+n>126,则结果为126;否则,结果为((m*QP)>>4)+n。式中m,n是关于概率模型的确定性经验参数,每个概率模型有自己对应的(m,n)值。全部概率模型的(m,n)值都预先存储在一个固定的表里。
目前的初始化方法仅针对QP做了一个线性模型。而事实上,不同的序列不同的分辨率都会对数据统计特点有很大的影响。通过测试了一些序列发现在相当一部分情况下,初始化编码效率甚至不如无需初始化(也即初始化概率模型的state值和MPS值为全0)的编码效率。
而且初始化过程的(m,n)参数存储需要不小的空间,CABAC Main Profile中所需要的大约为6400bytes.初始化每个ctx的计算过程也很复杂,涉及到一次乘法,一次移位,一次加法。

发明内容
鉴于上述现有技术所存在的问题,本发明的目的是提供一种对系数块进行编码的方法,从而可以进一步提高编码效率。
本发明的目的是通过以下技术方案实现的本发明提供了一种对系数块进行编码的方法,包括A、将图像编码中变换量化后的系数块按照预定的规则划分多个条组;B、基于所述的条组对所述的系数块进行编码。
每个系数块使用的条组模式包括横条组、竖条组、斜条组、J条组或倒L条组,而且,不同的系数块使用不同的条组模式或者相同的条组模式。
所述的条组中的每个条组包含多个系数条或一个系数条。
所述的步骤A具体包括将系数块的各个系数条中的包含的全0条、非0即1条和/或大于1条分别划分组成相应的全0条条组、非0即1条条组和/或大于1条条组。
所述步骤A包括以系数块中从前到后第一个出现的全0条为分界线,该条以前的系数条作为一个条组,该条以后的系数条作为一个条组。
所述步骤A还包括将所述第一个出现的全0条以后的系数条再划分为两个条组,一个条组包括有非0系数,另一个条组系数值全部为零;所述步骤A包括以系数块中从前到后的最后一个非0条为分界线,该条以后的系数条作为一个全0条组,该条以前的系数条再以最后一个包含大于1的系数条作为分界线,之前为一个大于1条组,之后为一个非0即1条组。
当采用J条组进行编码时,所述的步骤B具体包括B1、对各个J条组分别进行编码处理;B2、确定任一J条组符合预定的条件时,则将该J条组进一步划分为若干J条组,并执行步骤B1。
所述的步骤B2包括B21、判断当前J条组中的系数是否为全0,如果是,则执行步骤B22,否则,如果该J条组包含多个J条,则执行步骤B23,如果不包含多个J条,则直接执行步骤B1;B22、选择下一条J条组,并执行步骤B21;
B23、将该J条组进一步划分为若干J条组,并执行步骤B1。
所述的步骤B还包括在对各个J条组中包含的各个系数进行编码处理过程中,当编码任一J条组内系数是否为全0的信息时,则该信息的概率模型的分配取决于已编码条组中的系数值信息。
所述的已编码条组中的系数信息包括已编码条组中若干条组的非0系数个数,或者,非0系数之和。
所述的步骤B包括在编码各个条组包含的系数条的过程中,当编码一个系数条的全部系数时,根据已编码的后面一条的最后一个非0系数的位置对当前条的最后一个非0系数的位置进行估计,根据估计的位置信息对当前系数条进行编码。
所述的步骤B包括在编码各个条组包含的系数条的过程中,当编码一个系数条的全部系数时,如果其最后一个非0系数的位置被完全确定,最后一个非0系数采用一元码方法编码但不限于一元码编码,为该系数单独分配相应的概率模型。
所述的步骤B包括对作为条组分界的分界系数条的位置编码时,在码流中采用标识符来标记该条是否为分界系数条,并为该标识符分配概率模型。
所述的步骤B还包括根据当前系数条的位置以及相邻系数块已经编码的信息为编码当前系数条是否为全0的信息符号分配概率模型。
所述的步骤B还包括为所述符号中的多个符号分配相同的概率模型。
所述的步骤B还包括当作为条组分界的分界系数条为多个时,则在编码后面的分界系数条的位置时基于先前已编码的分界系数条的位置进行编码。
所述的步骤B包括对条组包含的各个系数按照特定的扫描顺序的反向顺序依次进行编码。
所述的特定的扫描顺序包括对于竖条组,从左到上、从上到下按照“之”字形扫描所有系数;对于横条组,从上到下、从左到右按照“之”字形扫描所有系数;对于斜条组,从左上到右下按照“之”字形扫描所有系数;对于倒L条组,先从左到右,后从上到下,或者,反之。
所述的步骤还包括设定一个门限值G,在每个概率模型编码的前G个符号时,当出现大概率符号MPS调整状态state值的跳转步长为大于或等于2。
一种对系数块进行编码的方法,包括当对条组包含的条中的系数进行编码时,根据已编码的相邻位置的系数信息作为编码当前系数的分类标准进行分类,并且分别为不同的类设置各自的二值化方案,或者多值化方案,以及编码各个符号的概率模型,或者多值化符号串各个符号的概率模型;或者,为若干个类设置相同的二值化方案,或者多值化方案,以及,为若干个类设置相同的编码各个符号的概率模型,或者为若干个类设置相同的编码各个多值化符号串各个符号的概率模型。
所述的相邻位置的系数信息包括相邻系数中的最大值。
一种对系数块进行编码的方法,包括将图像编码中变换量化后的系数块划分为多个横条组,并基于所属的条组对所述的系数块进行编码。
一种对系数块进行编码的方法,包括将图像编码中变换量化后的系数块划分为多个竖条组,并基于所属的条组对所述的系数块进行编码。
一种对系数块进行编码的方法,包括将图像编码中变换量化后的系数块划分为多个斜条组,并基于所属的条组对所述的系数块进行编码。
一种对系数块进行编码的方法,包括将图像编码中变换量化后的系数块划分为多个L条组,并基于所属的条组对所述的系数块进行编码。
一种对系数块进行编码的方法,包括将图像编码中变换量化后的系数块划分为多个J条组,并基于所属的条组对所述的系数块进行编码。
所述的方法包括在编码J条组中的各个J条的横向或者竖向分支条之前先确定相应分支条是否为全0系数,如果是,则直接编码一个符号,否则,继续对J条的横向或竖向分支条包含的各系数进行编码。
在编码具体的横向分支条或者竖向分支条时,包括依次从左向右编码横向条位置信息,从上至下编码竖向条位置信息,从横向条最后一个非0系数起从右至左编码横向条非0系数值信息,从竖向条最后一个非0系数起从下至上编码竖向条非0系数值信息;或者,依次从左向右编码横向条位置信息,从横向条最后一个非0系数起从右至左编码横向条非0系数值信息,从上至下编码竖向条位置信息,从竖向条最后一个非0系数起从下至上编码竖向条非0系数值信息。
一种对系数块进行编码的方法,包括将图像编码中变换量化后的系数块划分为多个条组,划分条组可以根据横条组、竖条组、斜条组、J条组或倒L条组编码模式实现,并基于所述的条组对所述的系数块进行编码。
所述的方法还包括选择编码模式的原则可以是根据系数块中0、1及大于1的系数的位置分布特性选择一种编码模式。
所述的方法还包括在仅使用横条组模式或竖条组模式的情况下,分别确定所述系数块的横向和纵向最后一个含有非0系数的非全0系数条的位置和第一个全0系数条的位置,基于上述位置确定采用横条组模式或竖条组模式。
所述的方法包括根据相邻系数块选择的编码模式确定当前系数块的编码模式。
一种对系数块进行编码的方法,包括将图像编码中变换量化后的系数块分别采用不同的编码模式对所述系数块进行编码,之后选择压缩效率最高的编码模式作为该系数块的编码模式。
所述的编码模式包括横条组、竖条组、斜条组、J条组或倒L条组编码模式。
由上述本发明提供的技术方案可以看出,本发明的实现可以进一步提高编码效率,而且,本发明在与H.264复杂度相当的情况下能够有更优的压缩效率,同时还可以省去了扫描和反扫描的过程。


图1为J条编码方式示意图。
具体实施例方式
H.264系数块编码方案首先把系数块按照某种预定扫描序扫描成为一维数组而后编码,而本发明直接对原系数块编码,因此,可以省去针对系数块的扫描和反扫描的过程。
为便于理解本发明,下面首先对本发明中涉及的各名词进行解释。
1、条的定义本发明中可选的条模式有5类横条系数块的一行为一个横条,从上到下顺序记为第0到7横条。
竖条系数块的一列为一个竖条,从左到右顺序记为第0到7竖条。
斜条系数块中的每一个左下到左上45度斜线元素为一斜条,如表1所示,0为第一个斜线条,1、2组成第二个斜线条,3、4、5组成第三个斜线条,6、7、8、9为第四个斜线条,......;J条J条定义如表3所示表3 表3中,一个8×8的系数块称为block8×8,对此系数块从左上到右下可以分为8个J条,每个J条的拐角点系数为系数块中位于对角线上的系数,基于拐角点系统依次向上向左的系数组一个J条,所述的8个J条分别标记为J0~J7倒L条以系数块中的由左上角到右下角的对角线上的系数作为倒L的拐角点,该拐角点向右及向下的所有系数构成一个倒L条,如表1所示,63组成第一个倒L条,61、59、62组成第二个倒L条,60、55、51、56、58组成第三个倒L条,......。
2、条组的定义本发明中对应4种条的条组模式也有5类横条组由若干个相邻或不相邻的横条组成;竖条组由若干个相邻或不相邻的竖条组成;斜条组由若干个相邻或不相邻的斜条组成;J条组由若干个相邻或不相邻的J条组成。
倒L条组由若干个相邻或不相邻的倒L条组成。
对系数块编码时需要适当选择一种条组模式获得更好的编码效率。从上面的描述可知,本发明中,可供选择的条组模式有五种横条组模式、竖条组模式、斜条组模式、J条组模式和倒L条组模式。下面将描述如何选择应用各条组模式。
本发明中,具体可以根据系数块中0、1及大于1的系数的位置分布特性选择将系数块划分为横条组、竖条组、斜条组、J条组或倒L条组。
也就是说,如果系数块中的非0系数集中分布在横向上,纵向上或者斜条方向上,则将选择相应的横条组、竖条组或斜条组。
下面是系数分别集中分布在横向上,纵向上,斜条方向上的三个典型系数块示例,分别如表4、表5和表6所示
表4 表5 表660 20 9 2 1 0 0 0 3 2 2 1 0 0 0 0 10 3 1 0 0 0 0 00 0 0 0 0 0 0 0 3 3 2 0 0 0 0 0 2 1 0 0 0 0 0 00 0 0 0 0 0 0 0 2 0 0 1 0 0 0 0 1 0 0 0 0 0 0 00 0 0 0 0 0 0 0 0 3 2 1 0 0 0 0 0 0 0 0 0 0 0 00 0 0 0 0 0 0 0 1 2 2 1 0 0 0 0 0 0 0 0 0 0 0 00 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 00 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 00 0 0 0 0 0 0 0, 0 1 0 0 0 0 0 0,0 0 0 0 0 0 0 0。
对于上述各系数块可以依次选择横条组、竖条组和斜条组模式。
如果系数块中全0的系数集在右下角,则可以选择倒L条组模式。
本发明中,对于相邻的系数块已经采用了相应的条模式进行条组的划分,则当前系数块还可以根据相邻系数块选择的条组模式确定当前系数块的条组模式,例如,可以与相邻系数块选择同样的条模式,所述的相邻的系数块可以为左侧或上方的系数块。
下面举例说明在横、竖条两种条组模式中选择一种条组模式方法。
可以用横纵向上最后一个含有非0系数的条的位置衡量系数集中分布的方向,以下面的表7所示的8×8系数块为例表75 -6 0 0 0 0 0 031 0 1 0 0 0 0-200 0 0 0 0 0 000 0 0 0 0 0 031 0 0 0 0 0 0-70 0 0 0 0 0 030 0 0 0 0 0 0-20 0 0 0 0 0 0;在表7中,横向上从上至下最后一个含有非0系数的条的位置为7,纵向上从上至下最后一个含有非0系数的条的位置为3。所以当前块选择按照竖条的条组模式编码。
为了避免系数分布如下的系数块选择错误的编码模式,本发明中用hengtiao_allno+hengtiao_lnz和shutiao_allno+shutiao_lnz作为系数集中在横向还是纵向的衡量参数,其中
hengtiao_allno为横向第一个全0条位置;hengtiao_lnz为横向最后一个含有非0系数的条的位置;shutiao_allno为纵向第一个全0条位置;shutiao_lnz为纵向最后一个含有非0系数的条的位置。
本发明中具体为取hengtiao_allno+hengtiao_lnz和shutiao_allno+shutiao_lnz其值较小的横向或纵向对应的横条组或竖条组作为编码模式。
显然,如果用横纵向上最后一个含有非0系数的条的位置衡量,表8所示的系数块应该用竖条组模式编码,但是下面块的系数集中在横向上。对下面的块hengtiao_allno,hengtiao_lnz分别为1,0;shutiao_allno,shutiao_lnz分别为0,3,因此,确定选择横条组模式;用hengtiao_allno+hengtiao_lnz和shutiao_allno+shutiao_lnz作为系数集中在横向还是纵向的衡量参数则能够得到合理的编码模式。
表80 1 1 1 0 0 0 00 0 0 0 0 0 0 00 0 0 0 0 0 0 00 0 0 0 0 0 0 00 0 0 0 0 0 0 00 0 0 0 0 0 0 00 0 0 0 0 0 0 00 0 0 0 0 0 0 0。
考虑到一种固定的编码条组模式通常很难适应各种分布特点的系数块。因此,可以首先考察系数块分布的特点,并根据各系数块分布的大致特点分为若干类,对每一类系数块分别采用各种条组模式进行编码处理,之后选择最佳效果的条组模式作为该类型系数块的编码方案。
考虑到有的系数块不容易直观的分到其中某一类中去,此时,还可以采用不同的条组模式分别对该系数块进行编码,然后取效率高的条组模式作为该系数块的编码方案。当然,需要在码流中写入相应的信息,指示所选择的编码方案,即选择的条组模式。
比如,可以在所述的倒L条组编码方案和J条组编码方案中进行比较选择,之后,确定这两种方案是分别针对上述系数较多的块和系数分布稀疏的块设计的,这样,便可以根据该依据选择相应的条组模式作为系数块的编码模式。
选择了一定的条组模式以后,则按照选定的模式逐条编码全部的系数块内信息,下面将对编码过程进行说明。
确定按照横条组、竖条组、斜条组、J条组或倒L条组模式编码之后,则需要在码流中写入选择的条组模式的信息,标示系数块中一条或者某几条中所有系数所具有的共同的统计分布特点。
根据不同的统计特点,将系数块划分为若干条组,每条组都由若干条组成。条组的目的是把整个系数块根据系数的统计特点分别编码,比如,可以以下面四种方式中的任一种方式进行条组的划分(1)将所有非0条作为一条组,所有全0条作为一条组;(2)将第一个含有非0系数的条作为分界系数条,该条和前面所有系数条作为一条组,其后所有系数都是零,作为一个条组;(3)将含有大于1的系数的若干条作为一条组,将其他条作为一条组;(4)将系数块中的所有系数条从前往后分为三条组,第一个条组中包括有大于1的系数,第二个条组中仅包括值为0,1的系数,第三个条组中的系数值全部为零;(5)以第一个出现的全0条为分界系数条,该条以前的系数作为一个条组,该条以后的系数作为一个条组,该条以后的系数还可以分为两个条组一个条组包括有非0系数,另一个条组系数值i全部为零;(6)对于8×8系数块可以将8个倒L条分为两个条组,从右下的倒L条往左上找到第一个含有非0系数的倒L条,这一条之后的所有系数只含有零,作为一个条组,这一条以及这一条以前的全部倒L条作为一条组。
另外,本发明针对J条组还可以采用以下的方案进行分组,仍以所述表3为例,对相应的8个J条分层分组的策略如下第一层分组中,J条J0~J3为一组,这是一个4×4的系数块,也称为block4×4;J条J4~J7为另一组,称为block8×8_J。第一层分组中,每一个组包括4个J条。
在对第一层的这两个J条组编码时,根据需要对编码的条组进行第二层的分组。具体为编码block8×8_J(J4~J7)时,在第二层分组中,J4~J5分为一组,称为block8×8_J_0,J6~J7分为一组,称为block8×8_J_1;编码block4×4(J0~J3)时,第二层分组的方法类似编码block8×8第一层的分组方法,J0~J1分为一组,称为block2×2,J2~J3分为一组,称为block4×4_J。第二层分组中,一个条组包括2个J条。
对第二层分组的J条组编码时,根据需要会对编码的条组进行第三层分组。第三层分组中,将该J条组中的两个J条分开,然后对每一个J条分别进行编码。
各种条组的编码方法都必须在码流结构中编入相应的标示条组的语法元素,也即开始所述的标示系数块中一条或者某几条中所有系数所具有的共同的统计分布特点的信息。
每个条组中的各条不必在位置上连续,也不必在编码过程连续。
下面我们以上面所说第四种条组方法为例说明一种可行的编码方案。
首先,需要编码tiao_allno,即确定第一个全0条的位置,如果是横条模式,则tiao_allno是指hengtiao_allno;如果是竖条模式,则tiao_allno是指shutiao_allno。
编码tiao_allno的方式很多,tiao_allno可以取值0~8,tiao_allno等于8意味着系数块中无全0条,可以用4比特的二进制值直接编码。或者,也可以从第0条起,顺次编码一个比特指示这一条是不是全0,如果是则这一比特为0,否则为1,如果某一条对应的这一比特为0,意味着这是第一个全0条。例如对表9所示的系数块表95 -6 0 0 0 0 0 031 0 1 0 0 0 0-200 0 0 0 0 0 000 0 0 0 0 0 031 0 0 0 0 0 0-70 0 0 0 0 0 030 0 0 0 0 0 0-20 0 0 0 0 0 0纵条第0,1,2条需要编码的比特为1,1,0。
为提高效率,编码相应比特需要根据相邻块对应的信息选择相应的概率模型。例如,上例中编码纵条第2条的比特0,则根据左边已编码系数块纵条第2条是否是全0条选择模型。对编码指示横条第k(0≤k≤=7)条以及纵条第k(0≤k≤=7)条是否全0的比特单独分配不同的概率模型,具体编码某一条的比特再根据左边已编码系数块对应位置条是否全0分配2个概率模型,一共32个概率模型。也就是根据这个比特是对应横条第k条或者竖条第k条(k可能取值0~7),还有左边已编码系数块同样位置的条对应的这个比特的值是0还是1(这个值在编码当前块时已知)选择模型,这样为这个比特一共设置了32个模型。
然后,编码tiao_lnz-tiao_allno,即最后一个含有非0系数的条的位置与第一个全0条的位置之差如果是横条模式,则编码hengtiao_lnz-hengtiao_allno;否则,编码shutiao_lnz-shutiao_allno,确定最后一个含有非0系数的条的位置tiao_lnz。
由于tiao_lnz不可能等于tiao_allno,其差值可能取值为{-1}U{1,2,3...}。其二值化方法可以用一元码方法,即映射关系为-1->0,1->10,2->110,3->1110,......。对二值化得到的bin,第一个bin单独给一个概率模型,后面的bin可以合用一个概率模型,也可分配各自的概率模型。
将所有系数分为若干条组以后,逐条组编码所有系数。
下面以上面划分条组的方法为例说明具体编码各条组包含的系数的实现方案。显然,在上述方案下,需要编码的系数有第一个全0条到最后一个非全0条之间的所有系数,以及第一个全0条以前的全部系数。
首先,编码夹在第一个全0条到最后一个非全0条之间的所有系数。
如对表10所示的系数块编码,则应采用竖条模式,第一个全0竖条是第2条,最后一个非全0竖条是第6条,需要编码的是竖条第3条到第6条之间的全部系数,相应的系数的取值大多数情况下非0即1,可以称为非0即1条组,而且0、1分布比较没有规律。
表107 5 0 0 0 0 0 0-7 0 0 0 0 0 1 00 -4 0 0 0 0 0 02 -1 0 0 0 0 0 0-1 0 0 0 0 0 0 01 0 0 0 0 0 0 00 0 0 0 1 0 0 00 0 0 0 0 0 0 0;编码非0即1条组中各条系数的方法是多种多样的,具体可以为横条模式下从上至下编码各条系数,每条从左至右编码各个系数;竖条模式下从左至右编码各条系数,每条从上至下编码各个系数。
编码一个比特all0_back_gt1,用于指示是否从tiao_allno以后各条的系数值非0即1,为这个比特分配一个概率模型;例如,上例中竖条第3,4,5,6条的系数值非0即1,对应的比特则为0。
编码一个比特指示当前条是否是全0条,为这个比特分配一个概率模型;例如,上例中编码竖条第3,4,5,6条,对应的指示是否全0的比特分别是1,0,1,0。
如果当前条不是全0条,则按照顺序编码各个系数值。编码系数先编码其绝对值,之后编码其符号。编绝对值采用一元码二值化的方法。第一个bin决定其绝对值是0还是大于0,根据这个系数的位置分配概率模型。
具体可以为每个位置的系数给一个概率模型,也可若干位置的系数合用一个概率模型,例如,可以编码横条系数时,从左至右,其位置从第0个到第7个分配4个概率模型,这4个概率模型分别用于位置0,1,(2,3),(4,5,6,7)这四组位置上的系数的第一个bin的编码。
如果从tiao_allno以后各条的系数值非0即1,每个系数的绝对值只可能取值0或者1,无后续bin,否则,对绝对值大于0的系数的绝对值,还需要继续编码后面的bin,指示其绝对值是1还是大于1,如果大于1,是2还是大于2,......。后面的bin可分开分别分配概率模型,也可以统一分配同一个概率模型编码。
本发明中,编码tiao_lnz(非全0条)的位置的方法也可以仿照编码tiao_allno的方法,根据已编码相邻系数块的对应条是否含有非0系数来编码当前条。例如,对当前块从第tiao_allno条起往后,每条编码一个比特,指示此条后面各条是否全0,如果编码到某条这个比特指示此条后面全0,则这一条就是最后一个非全0条(如果此条不是第tiao_allno条),或者第tiao_allno-1条是最后一个非全0条(如果此条是第tiao_allno条)。这个比特的概率模型分配可以类似编码tiao_allno,先根据是横条第k第k(0≤k≤7)条以及纵条第k(0≤k≤7)条分类,然后根据已编码相邻系数块对应位置的条是不是最后一个全0条分配2个概率模型。
然后,编码第一个全0条以前的全部系数。
以表11所示的系数块为例说明编码第一个全0条以前各条的全部系数的方法。
表117 5 0 0 0 0 0 0-7 0 0 0 0 0 1 00 -4 0 0 0 0 0 02 -1 0 0 0 0 0 0-1 0 0 0 0 0 0 01 0 0 0 0 0 0 01 0 0 0 1 0 0 00 0 0 0 0 0 0 0;编码这些条系数的方法是多种多样的,下面给出一个可行的具体方案对于横条组模式,则从下至上编码各条系数,每条从右至左编码各个系数值;对于竖条组模式,则从右至左编码各条系数,每条从下至上编码各个系数值。
例如,表11所示的系数块按照竖条组模式编码,第一个全0条是第2条,编码第2竖条以前各条的系数,首先编码第1条,从下往上编码各系数,然后编码第2条,从下往上编码各系数。
在编码当前系数条包含的各系数之前,根据已编码的后面一条的最后一个非0系数的位置对当前条的最后一个非0系数的位置做估计。以表11所示的系数块为例,编码第0竖条时,第1竖条已经编码完成,其最后一个非0系数-1位置为3,从统计特点看,大多系数块第0竖条的最后一个非0系数的位置不小于第1竖条的最后一个非0系数的位置,这意味着已编码的后面一条的最后一个非0系数的位置包含一定的当前条的最后一个非0系数的位置的信息,因此,可利用该信息进行编码压缩。
下面给出一种可行的压缩编码方案,说明如何利用已编码的后面一条的最后一个非0系数的位置对当前条的最后一个非0系数的位置做估计。
如果已编码的后面一条的最后一个非0系数的位置小于6,则首先编码一个比特,确定当前条的最后一个非0系数的位置是否小于6。这个比特的模型根据已编码的后面一条的最后一个非0系数的位置选择。已编码的后面一条的最后一个非0系数的位置可能取值-1~5,-1意味着已编码的后面一条全0,对应分配给这个比特7个概率模型。
如果当前条的最后一个非0系数的位置不小于6,则再编码一个比特,确定当前条的最后一个非0系数的位置是6还是7,这个比特的概率模型根据已编码的后面一条的最后一个非0系数的位置选择,一共有7个概率模型;否则,当前条的最后一个非0系数的位置不大于5。
如果当前条的最后一个非0系数的位置或者被确定为6或7,则首先编码最后一个非0系数的绝对值,然后编码其符号,编码其绝对值采用一元码的二值化方法,第一个bin分配一个概率模型,后续bin共用一个概率模型,然后从最后一个非0系数的前一个系数起往前编码逐个系数值。例如,表11中编码竖条第0条,其已编码的后面一条的最后一个非0系数的位置为3,当前条的最后一个非0系数的位置被确定为6。第0竖条位置6的系数首先编码,然后从第0竖条位置5的系数往上逐个编码系数至第0竖条位置0的系数。
如果当前条的最后一个非0系数的位置被确定为不大于5,则从当前条第5个位置的系数往前编码逐个系数值。例如,表11中编码竖条第1条,其已编码的后面一条的最后一个非0系数的位置为-1,当前条的最后一个非0系数的位置被确定为不大于5。从第1竖条位置5的系数往上逐个编码系数至第1竖条位置0的系数。
如果已编码的后面一条的最后一个非0系数的位置不小于6,则直接从当前条最后一个位置第7个位置的系数往前编码逐个系数值。
在编码每个系数条的系数绝对值时,采用根据相邻已编码系数中的绝对值最大的那个系数分类的方案,具体描述如下
当前编码系数的位置是(jj,ii),jj是其行坐标,ii是其列坐标,例如表10所示的系数块中系数7的坐标是(0,0),系数-7的坐标是(1,0),系数5的坐标是(0,1)。根据上面描述的编码顺序,如果位置(jj+1,ii)或者(jj,ii+1)上有系数的话,则这些系数是已经被编码过了的系数,将这两个位置上的系数称为当前系数的相邻系数,根据当前系数的相邻系数中绝对值最大的那个绝对值(记为max_neighbor)进行分类。
例如,表11所示的系数块中位置(0,0)的系数7,其相邻系数为-7和5,max_neighbor等于7。可根据max_neighbor分成若干类型,对每一类,可以分别设定二值化方法并分配模型。根据max_neighbor分类,以及每一类中的编码二值化和模型分配的方法是多种多样的。
下面举一例说明具体的分类实现方法,例如根据max_neighbor为0,1,2,以及大于2分为A,B,C,D四类;对于max_neighbor为0,称为A类,采用一元码的二值化方法,第一个bin区分当前系数绝对值是0还是大于0,分配一个概率模型;第一个bin区分当前系数绝对值是1还是大于1,分配一个概率模型;后面的bin共用一个概率模型;对于max_neighbor为1,称为B类,第一个bin区分当前系数绝对值是否小于或等于1,为之分配一个概率模型。如果第一个bin为0(当前系数绝对值小于或等于1),第二个bin区分当前系数绝对值是0还是1,为之分配一个概率模型;否则,后续第二个bin区分当前系数绝对值是2还是大于2,第二个bin区分当前系数绝对值是3还是大于3,第三个bin区分当前系数绝对值是4还是大于4...这些bin可以单独分配概率模型,也可共用一个概率模型。
对于C,D类,其二值化和分配模型的方式也是多种多样的,可以按照A类或者B类的方法编码,当然,也可单独设计更为高效的二值化和概率模型分配方案。
所述的相邻的系数还包括左斜下方、左斜上方、右斜下方和右斜上方的已经编码的系数,并根据相应的系数值进行分类。
对于横条编码模式,当前系数位置(jj,ii)的左斜下方位置为(jj+1,ii-1)的系数(如果存在),右斜下方位置为(jj+1,ii+1)的系数(如果存在)也已经被编码,这两个系数也可作为当前系数的相邻系数被用于计算相邻系数的最大值(即用位置(jj+1,ii),(jj,ii+1)和(jj+1,ii-1)上的系数绝对值中的最大值计算max_neighbor)。
对于竖条编码模式,当前系数位置(jj,ii)的右斜上方位置为(jj-1,ii+1)的系数(如果存在)也已经被编码,这个系数也可作为当前系数的相邻系数被用于计算相邻系数的最大值(即用位置(jj+1,ii),(jj,ii+1)和(jj+1,ii-1)上的系数绝对值中的最大值计算max_neighbor)。
下面对倒L条组在编码过程中与前面描述不同之处进行描述。
编码条组中的倒L条的条组分界系数条的位置和编码横竖条组分界系数条的方法是一样的,从第一个倒L条起,编码一个bin指示其是否是条组分界系数条。Bin的概率模型根据条的位置以及相邻块同一位置条所对应的这个bin的值分配概率模型。
在编码过程中,具体可以倒着编码各个倒L条的系数,对每一个倒L条,先编码其横条所有系数,再编码竖条所有系数,最后编码位置处于对角线上的那个系数。
编码横条所有系数时,根据已编码的下一个倒L条的横条的最后一个非0系数的位置估计当前倒L条横条的最后一个非0系数的位置。
编码竖条所有系数时,根据已编码的下一个倒L条的竖条的最后一个非0系数的位置估计当前倒L条竖条的最后一个非0系数的位置。
对最后一个非0系数位置确定的情况而言,其最后一个非0系数用一元码方式二值化,并且单独分配概率模型。
同样,在编码各个系数时,可以根据其相邻位置的系数的最大值分类,具体的分类方式前面已经描述,故,此处不再详述。
对于J条组可以采用以下编码方案,对于一些类型的系数块可以获得更好的编码效率。具体过程说明如下(1)首先对全系数块block8×8统计,写入一个比特(all01)表示该系数块非0系数是否全为1。
(2)对全系数块进行第一层分组,先编block8×8_J(J4~J7),然后编block4×4(J0~J3)。编码block8×8_J时,首先写入一个比特(block8×8_J_All0)标识该条组系数是否全为零,如果全为零,则对block4×4块进行编码;如果不为零,对block8×8_J进行第二层分组编码,然后写入一个比特标识block4×4块是否全为0,如果不是全0,对block4×4块进行编码。
(3)在对block8×8_J(J4~J7)第二层分组编码中,先编block8×8_J_1(J6~J7),后编block8×8_J_0(J4~J5)。编码block8×8_J_1时,首先写入一个比特(block8×8_J_1_All0)标识该条组是否全为零,如果全为零,直接编码block8×8_J_0;如果不为零,对block8×8_J_1进行第三层分组编码,然后写入一个比特表示block8×8_J_0是否全为零,如果不是全0,对block8×8_J_0进行第三层分组编码。
(4)在对block4×4(J0~J3)第二层分组编码中,采用与block8×8第一层相似的分组编码方法。先编码block4×4_J(J2~J3),然后编码block2×2(J0~J1)。编码block4×4_J时,首先写入一个比特(block4×4_J_All0)标识该条组是否全为零,如果全为零,直接编码block2×2(这时block2×2里面肯定有非0系数,因为block4×4的系数不可能为全0);否则对block4×4_J进行第三层分组编码,然后写一个比特表示block2×2块是否全为0,如果不是全0,对block2×2编码。
(5)第三层分组编码中,编码的条组包含,两个J条,首先编码右下方J条,然后编码左上方J条。编码右下方J条时,首先写入一个比特标识该条是否全为零,如果全为零,直接编码左上方J条(这时左上方J条里面肯定有非0系数,因为编码的J条组不可能为全0),否则编码右下方J条,然后写入一个比特标识左上方J条是否全为零,如果不是全0,编码该J条。
完成对各个J条组的编码后,还需要对J条组包含的各J条进行编码,相应的编码方法如下所述(1)对一个J条(J0~J7)进行编码时,首先编码位置信息,然后编码绝对值。编码位置信息和编码绝对值信息的扫描方向相反,如图1所示。图中横条和竖条不包括顶角位置的系数,当然顶角位置的系数可以归并到横条或者竖条中。
(2)编码位置信息,也即这个位置上的系数是否非0。首先编码横条系数位置信息,然后是竖条位置信息。
横条位置信息编码方法是编码位置信息前写入一个比特,标志该横条是否为全0,如果是,则跳过横条位置信息编码过程,否则,按照位置信息编码方向编码。编码时首先写入信息确定该位是否为零,如果是零则写下一个位,如果不为零再写入信息确定是否时最后一个非0系数,如果不是最后一个则继续,否则结束。但是当编码到最后一个位置还没有遇到最后一个非0系数,那么一定是最后一位,此时不需要写入任何比特;对竖条位置信息编码可以采用类似横条位置信息的编码方法。
(3)编码系数值信息。根据位置信息,如果该条中有非0系数,则编码该系数。首先写入该系数的符号信息,然后编码系数的绝对值减一。
其中所述的编码系数绝对值的方法如下(1)根据all01判断,如果该系数块系数非0即1,那么编码该系数的符号即可。
(2)如果该系数块有大于1的系数,那么根据相邻系数的信息对当前编码系数分类。选择ctx进行编码。具体的方法描述如下当前编码系数的位置是(jj,ii),jj是其行坐标,ii是其列坐标,例如,上块中系数7的坐标是(0,0),系数-7的坐标是(1,0),系数5的坐标是(0,1)。根据上面描述的编码顺序,如果位置(jj+1,ii)或者(jj,ii+1)上有系数的话,这些系数已经被编码过了。这两个位置上的系数称为当前系数的相邻系数。根据当前系数的相邻系数中绝对值最大的那个绝对值(记为max_neighbor)进行分类。例如上块中位置(0,0)的系数7,其相邻系数为-7和5,max_neighbor等于7。可根据max_neighbor分成若干类型,对每一类,可以分别设定二值化方法并分配模型。根据max_neighbor分类,以及每一类中的编码二值化和模型分配的方法是多种多样的。
下面举一例说明具体的分类实现方法。
例如,根据max_neighbor为0,1,2,以及大于2分为A,B,C,D四类。具体可以为对于max_neighbor为0(A类),采用一元码的二值化方法,第一个bin区分当前系数绝对值是0还是大于0,分配一个模型;第一个bin区分当前系数绝对值是1还是大于1,分配一个模型;后面的bin共用一个模型;对于max_neighbor为1(B类),第一个bin区分当前系数绝对值是否小于或等于1,为之分配一个模型。如果第一个bin为0(当前系数绝对值小于或等于1),第二个bin区分当前系数绝对值是0还是1,为之分配一个模型;否则,后续第二个bin区分当前系数绝对值是2还是大于2,第二个bin区分当前系数绝对值是3还是大于3,第三个bin区分当前系数绝对值是4还是大于4...这些bin可以单独分配概率模型,也可共用一个模型;对于C,D类,其二值化和分配模型的方式也是多种多样的,可以按照A类或者B类的方法编码,也可单独设计更为高效的二值化和概率模型分配方案。
在针对各个bin的概率模型的选择过程中,由于概率模型的估计值受到序列,分辨率,QP(量化级中文?)等诸多因素的影响,如果把这些因素都考虑进去,其模型会极其复杂,难以实现。而仅仅考虑QP的影响并不能在绝大多数获得一个好的初始概率估计值。因此,在编码初期,可以通过加快自适应估计的方法以达到提高编码初期压缩效率的目的。
为此,本发明在编码初期,也即对每个ctx编码的前10个bin,如果出现MPS,其state值调整的步长为原来的两倍。原来每出现一个MPS,state值向MPS概率估计值增大的方向调整,具体方式为state值加1(称作跳转步长为1),我们将其改为state值加2(称作跳转步长为2)。如果出现的不是MPS,state值向MPS概率估计值减小的方向调整,这种情况下调整的方法和实验数据表明,这样的初始化方法能够在编码初期比较快的获得好的概率估计值。
综上所述,本发明提出了对系数块全新的编码方法,在与H.264复杂度相当的情况下能够有更优的压缩效率。并且省去了扫描和反扫描的过程。
以上所述,仅为本发明较佳的具体实施方式
,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到的变化或替换,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应该以权利要求的保护范围为准。
权利要求
1.一种对系数块进行编码的方法,其特征在于,包括A、将图像编码中变换量化后的系数块按照预定的规则划分多个条组;B、基于所述的条组对所述的系数块进行编码。
2.根据权利要求1所述的对系数块进行编码的方法,其特征在于,每个系数块使用的条组模式包括横条组、竖条组、斜条组、J条组或倒L条组,而且,不同的系数块使用不同的条组模式或者相同的条组模式。
3.根据权利要求1所述的对系数块进行编码的方法,其特征在于,所述的条组中的每个条组包含多个系数条或一个系数条。
4.根据权利要求2所述的对系数块进行编码的方法,其特征在于,所述的步骤A具体包括将系数块的各个系数条中的包含的全0条、非0即1条和/或大于1条分别划分组成相应的全0条条组、非0即1条条组和/或大于1条条组。
5.根据权利要求4所述的对系数块进行编码的方法,其特征在于,所述步骤A包括以系数块中从前到后第一个出现的全0条为分界线,该条以前的系数条作为一个条组,该条以后的系数条作为一个条组。
6.根据权利要求5所述的对系数块进行编码的方法,其特征在于,所述步骤A还包括将所述第一个出现的全0条以后的系数条再划分为两个条组,一个条组包括有非0系数,另一个条组系数值全部为零。
7.根据权利要求4所述的对系数块进行编码的方法,其特征在于,所述步骤A包括以系数块中从前到后的最后一个非0条为分界线,该条以后的系数条作为一个全0条组,该条以前的系数条再以最后一个包含大于1的系数条作为分界线,之前为一个大于1条组,之后为一个非0即1条组。
8.根据权利要求2所述的对系数块进行编码的方法,其特征在于,当采用J条组进行编码时,所述的步骤B具体包括B1、对各个J条组分别进行编码处理;B2、确定任一J条组符合预定的条件时,则将该J条组进一步划分为若干J条组,并执行步骤B1。
9.根据权利要求8所述的对系数块进行编码的方法,其特征在于,所述的步骤B2包括B21、判断当前J条组中的系数是否为全0,如果是,则执行步骤B22,否则,如果该J条组包含多个J条,则执行步骤B23,如果不包含多个J条,则直接执行步骤B1;B22、选择下一条J条组,并执行步骤B21;B23、将该J条组进一步划分为若干J条组,并执行步骤B1。
10.根据权利要求8所述的系数块进行编码的方法,其特征在于,所述的步骤B还包括在对各个J条组中包含的各个系数进行编码处理过程中,当编码任一J条组内系数是否为全0的信息时,则该信息的概率模型的分配取决于已编码条组中的系数值信息。
11.根据权利要求10所述的对系数块进行编码的方法,其特征在于,所述的已编码条组中的系数值信息包括已编码条组中若干条组的非0系数个数,或者,非0系数之和。
12.根据权利要求1至11任一项所述的对系数块进行编码的方法,其特征在于,所述的步骤B包括在编码各个条组包含的系数条的过程中,当编码一个系数条的全部系数时,根据已编码的后面一条的最后一个非0系数的位置对当前条的最后一个非0系数的位置进行估计,根据估计的位置信息对当前系数条进行编码。
13.根据权利要求1至11任一项所述的对系数块进行编码的方法,其特征在于,所述的步骤B包括在编码各个条组包含的系数条的过程中,当编码一个系数条的全部系数时,如果其最后一个非0系数的位置被完全确定,最后一个非0系数采用一元码方法编码但不限于一元码编码,为该系数单独分配相应的概率模型。
14.根据权利要求1至11任一项所述的对系数块进行编码的方法,其特征在于,所述的步骤B包括对作为条组分界的分界系数条的位置编码时,在码流中采用标识符来标记该条是否为分界系数条,并为该标识符分配概率模型。
15.根据权利要求14所述的对系数块进行编码的方法,其特征在于,所述的步骤B还包括根据当前系数条的位置以及相邻系数块已经编码的信息为编码当前系数条是否为全0的信息符号分配概率模型。
16.根据权利要求15所述的对系数块进行编码的方法,其特征在于,所述的步骤B还包括为所述符号中的多个符号分配相同的概率模型。
17.根据权利要求15所述的对系数块进行编码的方法,其特征在于,所述的步骤B还包括当作为条组分界的分界系数条为多个时,则在编码后面的分界系数条的位置时基于先前已编码的分界系数条的位置进行编码。
18.根据权利要求1至11任一项所述的对系数块进行编码的方法,其特征在于,所述的步骤B包括对条组包含的各个系数按照特定的扫描顺序的反向顺序依次进行编码。
19.根据权利要求18所述的对系数块进行编码的方法,其特征在于,所述的特定的扫描顺序包括对于竖条组,从左到上、从上到下按照“之”字形扫描所有系数;对于横条组,从上到下、从左到右按照“之”字形扫描所有系数;对于斜条组,从左上到右下按照“之”字形扫描所有系数;对于倒L条组,先从左到右,后从上到下,或者,反之。
20.根据权利要求1至11任一项所述的对系数块进行编码的方法,其特征在于,所述的步骤还包括设定一个门限值G,在每个概率模型编码的前G个符号时,当出现大概率符号MPS调整状态state值的跳转步长为大于或等于2。
21.一种对系数块进行编码的方法,其特征在于,包括当对条组包含的条中的系数进行编码时,根据已编码的相邻位置的系数信息作为编码当前系数的分类标准进行分类,并且分别为不同的类设置各自的二值化方案,或者多值化方案,以及编码各个符号的概率模型,或者多值化符号串各个符号的概率模型;或者,为若干个类设置相同的二值化方案,或者多值化方案,以及,为若干个类设置相同的编码各个符号的概率模型,或者为若干个类设置相同的编码各个多值化符号串各个符号的概率模型。
22.根据权利要求21所述的对系数块进行编码的方法,其特征在于,所述的相邻位置的系数信息包括相邻系数中的最大值。
23.一种对系数块进行编码的方法,其特征在于,包括将图像编码中变换量化后的系数块划分为多个横条组,并基于所属的条组对所述的系数块进行编码。
24.一种对系数块进行编码的方法,其特征在于,包括将图像编码中变换量化后的系数块划分为多个竖条组,并基于所属的条组对所述的系数块进行编码。
25.一种对系数块进行编码的方法,其特征在于,包括将图像编码中变换量化后的系数块划分为多个斜条组,并基于所属的条组对所述的系数块进行编码。
26.一种对系数块进行编码的方法,其特征在于,包括将图像编码中变换量化后的系数块划分为多个倒L条组,并基于所属的条组对所述的系数块进行编码。
27.一种对系数块进行编码的方法,其特征在于,包括将图像编码中变换量化后的系数块划分为多个J条组,并基于所属的条组对所述的系数块进行编码。
28.根据权利要求27所述的对系数块进行编码的方法,其特征在于,所述的方法包括在编码J条组中的各个J条的横向或者竖向分支条之前先确定相应分支条是否为全0系数,如果是,则直接编码一个符号,否则,继续对J条的横向或竖向分支条包含的各系数进行编码。
29.根据权利要求27所述的对系数块进行编码的方法,其特征在于,在编码具体的横向分支条或者竖向分支条时,包括依次从左向右编码横向条位置信息,从上至下编码竖向条位置信息,从横向条最后一个非0系数起从右至左编码横向条非0系数值信息,从竖向条最后一个非0系数起从下至上编码竖向条非0系数值信息;或者,依次从左向右编码横向条位置信息,从横向条最后一个非0系数起从右至左编码横向条非0系数值信息,从上至下编码竖向条位置信息,从竖向条最后一个非0系数起从下至上编码竖向条非0系数值信息。
30.一种对系数块进行编码的方法,其特征在于,包括将图像编码中变换量化后的系数块划分为多个条组,划分条组可以根据横条组、竖条组、斜条组、J条组或倒L条组编码模式实现,并基于所述的条组对所述的系数块进行编码。
31.根据权利要求30所述的对系数块进行编码的方法,其特征在于,所述的方法还包括选择编码模式的原则可以是根据系数块中0、1及大于1的系数的位置分布特性选择一种编码模式。
32.根据权利要求30所述的对系数块进行编码的方法,其特征在于,所述的方法还包括在仅使用横条组模式或竖条组模式的情况下,分别确定所述系数块的横向和纵向最后一个含有非0系数的非全0系数条的位置和第一个全0系数条的位置,基于上述位置确定采用横条组模式或竖条组模式。
33.根据权利要求30、31或32所述的对系数块进行编码的方法,其特征在于,所述的方法包括根据相邻系数块选择的编码模式确定当前系数块的编码模式。
34.一种对系数块进行编码的方法,其特征在于,包括将图像编码中变换量化后的系数块分别采用不同的编码模式对所述系数块进行编码,之后选择压缩效率最高的编码模式作为该系数块的编码模式。
35.根据权利要求34所述的对系数块进行编码的方法,其特征在于,所述的编码模式包括横条组、竖条组、斜条组、J条组或倒L条组编码模式。
全文摘要
本发明涉及一种对系数块进行编码的方法。本发明主要包括首先,将图像编码中变换量化后的系数块按照预定的规则划分若干个条组,可以为横条组、竖条组、斜条组、J条组和倒L条组;然后,基于所述的各个条组对所述的系数块进行编码。因此,本发明的实现可以进一步提高编码效率,而且,本发明在与H.264复杂度相当的情况下能够有更优的压缩效率,同时还可以省去了扫描和反扫描的过程。
文档编号H04N7/32GK1917645SQ20051009368
公开日2007年2月21日 申请日期2005年9月1日 优先权日2005年8月15日
发明者何芸, 余微, 杨平, 孟新建 申请人:华为技术有限公司, 清华大学
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1