一种帧内预测模式编解码方法及设备
技术领域
本发明涉及视频编解码技术领域,具体涉及一种帧内预测模式编解码方法及设备。
背景技术
在视频编解码过程中,为了尽可能的降低失真,一种行之有效的方法就是增加帧内预测模式的种类,但与此同时就会造成帧内预测模式的编码占整个码流的比重不断加大。
考虑到当前区块的预测模式与其左边块和上边块预测模式之间较强的相关性,AVS2采用了直接利用当前区块的左边块和上边块的最佳预测模式作为当前区块预测模式的两个最有可能预测模式的方式,那么如果当前区块最佳预测模式位于这两个最可能预测模式之中,则只需要编码很少的比特量,如果不在则需要编码更多的比特量。而H265采用了MPM(most probable modes,即最可能模式)编码方法,即根据当前区块的左边块和上边块的最佳预测模式构建包括3种当前区块最可能预测模式的预测列表,增加了对预测模式采用少量比特量就能编码的可能性。
分析发现,虽然H265的做法要优于AVS2的做法,但仍有相当大部分的当前区块预测模式并不在由其左边和上边块的最佳预测模式所构造的3种最可能预测选项之中,也就是说这部分预测模式的编码其效率不高,帧内预测模式在整个码流中的比重仍然很大。
发明内容
有鉴于此,本发明实施例提供了一种帧内预测模式编解码方法及设备,解决了视频编解码过程中帧内预测模式占据较高码流比重的问题。
根据本发明的一个方面,提供了一种帧内预测模式编码方法,包括:
获取当前区块的左边块的预测模式编号和上边块的预测模式编号,其中所述左边块和所述上边块为已编码的区块;
根据所述左边块的预测模式编号和所述上边块的预测模式编号构建包括5种最可能预测模式的编号的所述当前区块的预测列表;
判断所述当前区块的最佳预测模式编号是否在所述预测列表内,
-如果是,令编码方式标记变量的值为真,将所述编码方式标记变量的值和所述最佳预测模式编号在所述预测列表中的位置标号编码到码流中;
-如果否,令所述编码方式标记变量的值为假,将所述5种最可能预测模式的编号按降序排列,将所述最佳预测模式编号与所述5种最可能预测模式的编号进行比较,直至遍历完按降序排列的所述5种最可能预测模式的编号,其中在每一次比较中,如果所述最佳预测模式编号大于所述最可能预测模式的编号,则将所述最佳预测模式编号的值减一作为下一次比较的最佳预测模式编号,并且将所述编码方式标记变量的值和遍历比较后的最佳预测模式编号编码到码流中。
进一步地,所述预测列表中的所述5种最可能预测模式的编号按预测模式发生的可能性大小降序排列。
进一步地,对所述位置标号采用如下编码方式:标号0对应‘0’、标号1对应‘100’、标号2对应‘101’、标号3对应‘110’、标号4对应‘111’。
根据本发明的第二个方面,提供了一种帧内预测模式解码方法,包括:
针对当前区块,获取所述当前区块的左边块的已解码的预测模式编号和上边块的已解码的预测模式编号;
根据所述左边块的预测模式编号和所述上边块的预测模式编号构建包括5种最可能预测模式的编号的所述当前区块的预测列表;
获取编码码流中的编码方式标记变量的值,
-如果所述编码方式标记变量的值为真,则从编码码流中解码出所述当前区块的最佳预测模式编号在所述预测列表中的位置标号,获得所述当前区块的最佳预测模式编号;
-如果所述编码方式标记变量的值为假,则将所述5种最可能预测模式的编号按升序排列,从编码码流中解码出经调整的最佳预测模式编号,将所述经调整的最佳预测模式编号与所述5种最可能预测模式的编号进行比较,直至遍历完按升序排列的所述5种最可能预测模式的编号,其中在每一次比较中,如果所述最佳预测模式编号大于或等于所述最可能预测模式的编号,则将所述最佳预测模式编号的值加一作为下一次比较的经调整的最佳预测模式编号,遍历比较后所得的经调整的最佳预测模式编号即为所述当前区块的最佳预测模式编号。
根据本发明的第三个方面,提供了一种用于帧内预测模式编码的设备,包括:
获取模块,用于获取当前区块的左边块的预测模式编号和上边块的预测模式编号,其中所述左边块和所述上边块为已编码的区块;
预测列表构建模块,用于根据所述左边块的预测模式编号和所述上边块的预测模式编号构建包括5种最可能预测模式编号的所述当前区块的预测列表;
编码模块,用于判断所述当前区块的最佳预测模式编号是否在所述预测列表内,
-如果所述最佳预测模式编号在所述预测列表内,则令编码方式标记变量的值为真,并将所述编码方式标记变量的值和所述最佳预测模式编号在所述预测列表中的位置标号编码到码流中;
-如果所述最佳预测模式编号不在所述预测列表内,则令所述编码方式标记变量的值为假,将所述5种最可能预测模式编号按降序排列,将所述最佳预测模式编号与所述5种最可能预测模式的编号进行比较,直至遍历完按降序排列的所述5种最可能预测模式的编号,其中在每一次比较中,如果所述最佳预测模式编号大于所述最可能预测模式的编号,则将所述最佳预测模式编号的值减一作为下一次比较的最佳预测模式编号,并且将所述编码方式标记变量的值和遍历比较后的最佳预测模式编号编码到码流中。
根据本发明的第四个方面,提供了一种用于帧内预测模式解码的设备,包括:
获取模块,获取所述当前区块的左边块的已解码的预测模式编号和上边块的已解码的预测模式编号;
预测列表构建模块,用于根据所述左边块的预测模式编号和所述上边块的预测模式编号构建包括5种最可能预测模式编号的所述当前块的预测列表;
解码模块,用于获取编码码流中的编码方式标记变量的值,,并且判断所述编码方式标记变量的值的真假,
-如果所述编码方式标记变量的值为真,则从编码码流中解码出所述当前块的最佳预测模式编号在所述预测列表中的位置标号,获得所述当前区块的最佳预测模式编号,
-如果所述编码方式标记变量的值为假,则将所述5种最可能预测模式编号按升序排列,从编码码流中解码出经调整的最佳预测模式编号,将所述经调整的最佳预测模式编号与所述5种最可能预测模式的编号进行比较,直至遍历完按升序排列的所述5种最可能预测模式的编号,其中在每一次比较中,如果所述最佳预测模式编号大于等于所述最可能预测模式的编号,则将所述最佳预测模式编号的值加一作为下一次比较的经调整的最佳预测模式编号,遍历比较后所得的经调整的最佳预测模式编号即为所述当前区块的最佳预测模式编号。
本发明实施例提供的一种帧内预测模式编解码方法,采用对所有的预测模式编号进行编码,并且采用MPM编码思想将预测列表中的3种最可能预测模式扩充到5种,并制定了相应的预测列表构建准则,以提高当前区块的预测模式编码位于预测列表中的命中率,从而使得有更大比例的预测模式可以使用较少的比特量进行编码。另外,使用5个比特直接二值化不在当前预测列表中的预测模式时,预测模式可以在35种基础上再多支持两种,共37种预测模式。测试表明使用这种方式对预测模式进行编码时,并没有带来新的资源消耗与算法复杂度,但却可以带来超过0.2%的性能增益,充分说明此新算法是一种成功的进步。
附图说明
图1所示为本发明一实施例提供的一种帧内预测模式编码方法的流程图;
图2所示为本发明一实施例提供的一种帧内预测模式解码方法流程图;
图3所示为本发明一实施例提供的AVS2的33种帧内预测模式及其编号;以及
图4所示为本发明一实施例提供的最可能预测模式列表的构建准则的程序流程图。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
图1所示为本发明一实施例提供的一种帧内预测模式编码方法的流程图。如图1所示的帧内预测模式编码方法包括:
步骤S101:将所有帧内预测模式编号。AVS2编码标准为我们提供了33种帧内预测模式(以下简称预测模式),其中3种非角度预测模式,具体为:DC模式、Plane模式以及TM模式;以及30种角度预测模式。按照AVS2标准规定的预测模式编号方式给所有帧内预测模式编号。
步骤S102:将重建图像划分为多个区块。不同的标准有自己的块划分方式。
步骤S103,针对当前区块,遍历所有预测模式获取当前区块的最佳预测模式编号。针对当前块经过RDO(率失真优化),选出率失真最优的补偿值对应的预测模式,即为当前区块的最佳预测模式。
步骤S104:获取当前块的左边块的预测模式编号和上边块的预测模式编号,其中左边块和右边块为已编码的区块。
大量编码数据的统计结果表明,当前区块的最佳预测模式与其左边块和上边块的最佳预测模式有很强的相关性。可以利用这种相关性,根据当前块的左边块和上边块的最佳预测模式来预测当前块的最佳预测模式。
步骤S105:根据左边块的预测模式编号和上边块的预测模式编号构建包括5种最可能预测模式编号的当前区块的预测列表。具体为:对大量预测模式的预测实验结果进行统计分析;根据当前区块的左边块和上边块的预测模式编号的关系,将大量预测模式的预测实验结果进行分类;针对每一类,通过分析预测实验结果找出前5种所述当前区块的最可能预测模式所遵循的规律;依照得到的规律制定对应每一类的预测列表的构建准则;根据构建准则制定预测列表。
通过对这些统计结果的分析发现,可以根据当前区块的左边块与上边块的关系,构建7种形式的预测列表,每一种形式的预测列表包括当前区块的前5种可能性最大的预测模式的编号。优选的,5种可能性最大的预测模式的编号按可能性的大小降序排列。
步骤S106:判断当前区块的最佳预测模式编号是否在预测列表内。判断的过程要通过遍历预测列表实现。
步骤S107:如果是,令编码方式标记变量值为真,将编码方式标记变量的值和最佳预测模式编号在预测列表中的位置标号编码到码流中。这里的标记变量用于标记当前块的最佳预测模式是否在预测列表内,并利用此标记将这一信息传递给解码段,这样在解码段就省去了遍历预测列表从而判断最佳预测模式是否在预测列表里的过程(下文将会描述),省去很多的编码量。因为每一种形式的预测列表中包括5种最可能预测模式的编号,对应的预测列表中的位置标号只有5个,一般为从0~4,所以将预测模式编号的编码转换成对数字“0~4”的编码。对位置标号的编码一般采用截断二元码编码,根据本发明一个实施例对位置标号的编码采用下面的形式:位置标号0对应“0”,位置标号1对应“100”,位置标号2对应“101”,位置标号3对应“110”,位置标号4对应“111”。可见采用这样的帧内预测模式编码方式大大降低了对预测模式的编码量。
步骤S108:如果否,令编码方式标记变量值为假,将5种最可能预测模式的编号按降序排列,将最佳预测模式编号与5种最可能预测模式的编号进行比较,直至遍历完按降序排列的5种最可能预测模式的编号,其中在每一次比较中,如果最佳预测模式编号大于最可能预测模式编号,则将最佳预测模式编号的值减一作为下一次比较的最佳预测模式编号并且将编码方式标记变量的值和遍历比较后的最佳预测模式编号编码到码流中。
应当知道,图1中以虚线示出的步骤S101、步骤S102和步骤S103为可选的步骤,是为了更全面的说明整个过程,使得本领域技术人员能够更好的理解本发明的各种实施方式。
以支持37种预测模式的情形为例,如果当前块的最佳预测模式编号为32,并且其不在预测列表中,首先要对预测列表中的5种最可能预测模式的编号由大到小排序,例如排序后的5种最可能预测模式编号依次为31、30、29、28以及27。因为最佳预测模式编号32不在预测列表中,需要对最佳预测模式的编号进行调整,以得到它在除预测列表中的预测模式编号之外的32种预测模式中的位置。用最佳预测模式编号32与预测列表中的编号31比较,因为编号32大于编号31,则在编号32的基础上减一得到31,再用31和预测列表中的编号30比较,31大于编号30,则在31的基础上减一得到30,再用30和预测列表中的编号29比较,重复上述过程,最后当前块的最佳预测模式编号由32调整为27,对调整之后的编号27进行编码。这样做的好处就是,可以节省编码的比特数。这么说是因为,最佳预测模式的编号可能是0~36中的任何一个,如果最佳预测模式的编号不在预测列表中,直接对最佳预测模式的编号进行编码,就需要6个比特数实现,而经过上述调整过程,就会使得最佳预测模式的编号都归到0~31范围内,这样就可以用5个比特数对其编码,从而节省了编码量。当预测列表中包括5种最可能预测模式时,大大提高了当前区块在预测列表中的命中率,即便出现不在预测列表里边的情况,也会使对预测模式的编码量减少。
图2为本发明一个实施例提供的一种帧内预测模式解码方法流程图。图2中给出的一种帧内预测模式解码方法包括:
步骤S201:将所有预测模式编号。
步骤S202:将重建图像划分为多个区块。
步骤S203:针对当前区块,获取当前区块的左边块的已解码的预测模式编号和上边块的已解码的预测模式编号。
步骤S204:根据所述左边块的预测模式编号和所述上边块的预测模式编号构建包括5种最可能预测模式编号的所述当前区块的预测列表。解码中的预测列表的构建准则与编码段保持一致。
步骤S205:获取编码过程中的编码方式标记变量的值。
步骤S206:如果标记变量值为真,则从编码码流中解码出当前区块的最佳预测模式编号在预测列表中的位置标号,获得当前区块的最佳预测模式编号。根据本发明一个实施方式中对位置标号的编码如下:位置标号0对应“0”,位置标号1对应“100”,位置标号2对应“101”,位置标号3对应“110”,位置标号4对应“111”。则在解码过程中,如果位置标号为“100”,则解码的位置标号为“1”,依次类推。
步骤S207:如果标记变量值为假,则将5种最可能预测模式的编号按升序排列,从编码码流中解码出经调整的最佳预测模式编号,将经调整的最佳预测模式编号与5种最可能预测模式的编号进行比较,直至遍历完按升序排列的5种最可能预测模式的编号,其中在每一次比较中,如果最佳预测模式编号大于或等于最可能预测模式的编号,则将最佳预测模式编号的值加一作为下一次比较的经调整的最佳预测模式编号,遍历比较后所得的经调整的最佳预测模式编号即为当前区块的最佳预测模式编号。例如:以支持37种预测模式的情形为例,如果当前块的最佳预测模式编号为32,预测列表中的5种最可能预测模式的编号由大到小依次为31、30、29、28以及27,则经过遍历调整后,当前块的最佳预测模式编号为27,编码过程对27采用5个比特数编码为“11011”;则在解码过程中,首先获取“11011”,对“11011”解码得到最佳预测模式的编号为27,应当知道,这个解码得到的编号27是经过编码过程中调整之后的编码,并不是最开始对0~32种预测模式编号所对应的编号27,也就是说2个编号27对应的并不是同一种预测模式,而我们的目的是要得到0~32种预测模式编号所对应的编号27。因为编码过程与解码过程中的预测列表的构建准则一致,即解码过程得到的预测列表中5种最可能预测模式编号仍为31、30、29、28以及27,对该5种最可能预测模式编号升序排列则为27、28、29、30以及31,经过遍历比较调整的过程,即27+1+1+1+1+1,得到当前块的最佳预测模式编号32,即在0~32种预测模式编号中的位置。
为了使上述编码和解码方法能够更清楚明白,下面以一个具体的实施例来说明当前块的最佳预测模式编号不在预测列表里的编解码过程。
例如:当前块的最佳预测模式编号为27(即在0~32种帧内预测模式当中的编号),预测列表中的5种最可能预测模式编号降序排列之后,依次为31、30、28、26以及20。首先对最佳预测模式编号进行调整:用最佳预测模式编号27依次与预测列表中的编号比较,当编号27大于预测列表中的编号,就在编号27的基础上减一,那么调整之后的最佳预测模式编号为25,对编号25用5个比特数编码为“11001”。
在解码过程中通过解码编码方式标记变量的值为假,可知当前块的最佳预测模式编号不在预测列表中,则获取最佳预测模式编号的编码“11001”,对其解码得到最佳预测模式编号为25。此编号为编码过程中经过调整之后的编号,要得到最佳预测模式在0~32种预测模式当中的真实的编号,就要对得到的最佳预测模式编号25进行反调整。因为编解码过程的预测列表构建准则相同,所以解码过程中得到的预测列表里的5种最可能预测模式编号仍为31、30、28、26以及20,对其按升序排列,得到20、26、28、30以及31。将最佳预测模式编号25依次与5种最可能预测模式编号比较,如果最佳预测模式编号大于等于预测列表中的预测模式编号,则在得到的最佳预测模式编号基础上加一,即,用最佳预测模式编号25与预测列表中的编号20比较,满足大于等于的条件,在最佳预测模式编号25的基础上加一,最佳预测模式编号调整为26,再用这个调整之后的最佳预测模式编号26与预测列表中的编号26比较,仍满足大于等于的条件,在最佳预测模式编号26的基础上加一,最佳预测模式编号调整为27,用调整之后的最佳预测模式编号27与预测列表中的预测模式编号28比较,不满足大于等于的条件,结束遍历过程,返回最佳预测模式编号27,即为解码之后的当前块的最佳预测模式编号在0~32种帧内预测模式当中的编号。
图3为本发明一实施例提供的AVS2的33种帧内预测模式及其编号。按照图3所示的编号方式对33种帧内预测模式编号,其中DC模式编号为0,Plane模式编号为1,TM模式编号为2,其余编号3~32为角度预测模式。
图4所示为本发明一实施例提供的最可能预测模式列表的构建准则的程序流程图。基于图3所示的AVS2的33种帧内预测模式的编号方式,从图4可以看出根据当前区块的左边块和上边块的最佳预测模式的关系,预测模式列表的构建准则包括:
首先需要说明的是,为了便于描述,在下面的表述中将左边块的最佳帧内预测模式编号表示为intraPredMode_left,将右边块的最佳帧内预测模式编号表示为intraPredMode_above。并且令PredMode0=min(intraPredMode_left,intraPredMode_above),令PredMode1=max(intraPredMode_left,intraPredMode_above)。预测列表表示为Intra_candlis[i],其中i=0~4,表示预测列表中的位置标号。
步骤S401:判断PredMode0==PredMode1是否成立;
步骤S402:如果成立,判断PredMode0>2是否成立,如果成立,预测列表按表1所示的形式构建;如果不成立,预测列表按表2所示的形式构建。
表1预测列表的第一种构建形式
Intra_candlis[i],i=0~4 |
最可能预测模式编号 |
0 |
PredMode0 |
1 |
0 |
2 |
2 |
3 |
((PredMode0+29)%32)+2 |
4 |
((PredMode0-1)%32)+2 |
其中,表1中的“%”为取余运算,例如:35%32,结果为3。
表2预测列表的第二种构建形式
Intra_candlis[i],i=0~4 |
最可能预测模式编号 |
0 |
PredMode0 |
1 |
PredMode0==0?1:0 |
2 |
PredMode>1?1:2 |
3 |
12 |
4 |
24 |
其中:表2中的“PredMode0==0?1:0”,表示判断PredMode0是否为0,如果是,则Intra_candlis[1]=1;如果否,则Intra_candlis[1]=0。
步骤S403:如果不成立,判断PredMode0>2是否成立。
步骤S404:如果成立,判断PredMode1-PredMode0<4是否成立,如果成立,预测列表按表3的形式构建;如果不成立,判断PredMode1-PredMode0<12是否成立,如果成立,预测列表按表4的形式构建;如果不成立,预测列表按表5的形式构建。
表3预测列表的第三种构建形式
Intra_candlis[i],i=0~4 |
最可能预测模式编号 |
0 |
(PredMode0+PredMode1)>>1 |
1 |
Intra_candlis[0]-2 |
2 |
Intra_candlis[0]-1 |
3 |
Intra_candlis[0]+1 |
4 |
Intra_candlis[0]+2 |
其中:表3中的“(PredMode0+PredMode1)>>1”表示将(PredMode0+PredMode1)的和右移一位,即除以2,也就是取二者的平均值。在这里表示取两个角度预测方向的中间角度方向。
表4预测列表的第四种构建形式
Intra_candlis[i],i=0~4 |
最可能预测模式编号 |
0 |
(PredMode0+PredMode1)>>1 |
1 |
PredMode0-1 |
2 |
PredMode0 |
3 |
PredMode1 |
4 |
PredMode1==32?24:((PredMode1-1)%32)+2 |
表5预测列表的第五种构建形式
Intra_candlis[i],i=0~4 |
最可能预测模式编号 |
0 |
2 |
1 |
PredMode0 |
2 |
PredMode0+1 |
3 |
PredMode1 |
4 |
PredMode1-1 |
步骤S405:如果不成立,判断PredMode1>3是否成立,如果成立,预测列表按照表6的形式构建;如果不成立,预测列表按照表7的形式构建。
表6预测列表的第六种构建形式
Intra_candlis[i],i=0~4 |
最可能预测模式编号 |
0 |
PredMode0 |
1 |
PredMode1==2?0:2 |
2 |
PredMode1-1 |
3 |
PredMode1 |
4 |
PredMode1==32?24:((PredMode1-1)%32)+2 |
表7预测列表的第七种构建形式
Intra_candlis[i],i=0~4 |
最可能预测模式编号 |
0 |
2 |
1 |
0 |
2 |
1 |
3 |
PredMode1>2?PredMode1:12 |
4 |
24 |
编解码算法评价标准主要有两个,一个是视频编码后数据的压缩比,一个是解码后视频画面的失真度。判断一个新的算法是否要优于旧的算法时,要综合考虑失真度与码率(也即压缩比)。业界公认的用编码性能增益来统筹考虑失真度与压缩比。开发过程中经过大量测试数据的统计结果表明预测列表使用如图4及表1~表7的构建准则,编码性能增益在其他同等条件下要好。具体测试结果如表8所示:(其中,负数表示新算法要优于旧的算法)
表8编码性能增益测试结果
根据本发明的各种实施方式提供一种用于帧内预测模式编码的设备,包括:
获取模块,用于获取当前区块的左边块的预测模式编号和上边块的预测模式编号,其中所述左边块和所述上边块为已编码的区块;
预测列表构建模块,用于根据所述左边块的预测模式编号和所述上边块的预测模式编号构建包括5种最可能预测模式编号的所述当前区块的预测列表;
编码模块,用于判断所述当前区块的最佳预测模式编号是否在所述预测列表内,
-如果所述最佳预测模式编号在所述预测列表内,则令编码方式标记变量的值为真,并将所述编码方式标记变量的值和所述最佳预测模式编号在所述预测列表中的位置标号编码到码流中,
-如果所述最佳预测模式编号不在所述预测列表内,则令所述编码方式标记变量的值为假,将所述5种最可能预测模式编号按降序排列,将所述最佳预测模式编号与所述5种最可能预测模式的编号进行比较,直至遍历完按降序排列的所述5种最可能预测模式的编号,其中在每一次比较中,如果所述最佳预测模式编号大于所述最可能预测模式的编号,则将所述最佳预测模式编号的值减一作为下一次比较的最佳预测模式编号,并且将所述编码方式标记变量的值和遍历比较后的最佳预测模式编号编码到码流中。
根据本发明的各种实施方式,还提供了一种用于帧内预测模式解码的设备,包括:
获取模块,获取所述当前区块的左边块的已解码的预测模式编号和上边块的已解码的预测模式编号;
预测列表构建模块,用于根据所述左边块的预测模式编号和所述上边块的预测模式编号构建包括5种最可能预测模式编号的所述当前块的预测列表;
解码模块,用于获取编码码流中的编码方式标记变量的值,并且判断所述编码方式标记变量的值的真假,
-如果所述编码方式标记变量的值为真,则从编码码流中解码出所述当前块的最佳预测模式编号在所述预测列表中的位置标号,获得所述当前区块的最佳预测模式编号,
-如果所述编码方式标记变量的值为假,则将所述5种最可能预测模式编号按升序排列,从编码码流中解码出经调整的最佳预测模式编号,将所述经调整的最佳预测模式编号与所述5种最可能预测模式的编号进行比较,直至遍历完按升序排列的所述5种最可能预测模式的编号,其中在每一次比较中,如果所述最佳预测模式编号大于等于所述最可能预测模式的编号,则将所述最佳预测模式编号的值加一作为下一次比较的经调整的最佳预测模式编号,遍历比较后所得的经调整的最佳预测模式编号即为所述当前区块的最佳预测模式编号。
以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内,所作的任何修改、等同替换等,均应包含在本发明的保护范围之内。