一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

帧间预测方法、编码器、解码器以及计算机存储介质与流程

2022-03-01 20:50:29 来源:中国专利 TAG:


1.本技术涉及视频编解码技术领域,尤其涉及一种帧间预测方法、编码器、解码器以及计算机存储介质。


背景技术:

2.在视频编解码领域,为了兼顾性能和代价,一般情况下,在多功能视频编码(versatile video coding,vvc)及数字音视频编解码技术标准工作组(audio video coding standard workgroup of china,avs)中的仿射预测是基于子块来实现的。目前,一方面提出了使用光流原理的预测修正(prediction refinement with optical flow,prof)使用光流原理对基于子块的仿射预测进行修正;另一方面提出了在基于子块的预测之后使用二次预测获得更加准确的预测值,从而实现了对仿射预测的改善。具体地,prof依赖于基准位置的水平方向和垂直方向的梯度来修正仿射预测结果,而二次预测则是使用滤波器对子块中的一个像素位置再次进行预测。
3.然而,当二次预测或prof需要使用的滤波器的中心位置如果存在较大的运动矢量偏差时,预测的准确性可能会大大降低,也就是说,现有的prof修正预测值方法和二次预测方法其实并不严谨,在对仿射预测进行改善时,并不能很好的适用于全部场景,编码性能有待提升。


技术实现要素:

4.本技术提出一种帧间预测方法、编码器、解码器以及计算机存储介质,可以减小预测的误差,大大提升编码性能,从而提高了编解码效率。
5.本技术的技术方案是这样实现的:
6.第一方面,本技术实施例提供了一种帧间预测方法,应用于解码器,该方法包括:
7.解析码流,获取当前块的预测模式参数;
8.当所述预测模式参数指示使用帧间预测模式确定所述当前块的帧间预测值时,确定所述当前块的子块的第一运动矢量;其中,所述当前块包括多个子块;
9.基于所述第一运动矢量确定所述子块的第一预测值,和所述子块中的每一个像素位置与所述子块之间的第一运动矢量偏差;
10.根据所述第一运动矢量偏差确定所述每一个像素位置对应的中心位置和第二运动矢量偏差;
11.基于所述第一预测值,按照所述中心位置和所述第二运动矢量偏差进行二次预测或prof处理,确定所述子块的第二预测值,将所述第二预测值确定为所述子块的帧间预测值。
12.第二方面,本技术实施例提供了一种帧间预测方法,应用于编码器,该方法包括:
13.确定当前块的预测模式参数;
14.当所述预测模式参数指示使用帧间预测模式确定所述当前块的帧间预测值时,确
定所述当前块的子块的第一运动矢量;其中,所述当前块包括多个子块;
15.基于所述第一运动矢量确定所述子块的第一预测值,和所述子块中的每一个像素位置与所述子块之间的第一运动矢量偏差;
16.根据所述第一运动矢量偏差确定所述每一个像素位置对应的中心位置和第二运动矢量偏差;
17.基于所述第一预测值,按照所述中心位置和所述第二运动矢量偏差进行二次预测或prof处理,确定所述子块的第二预测值,将所述第二预测值确定为所述子块的帧间预测值。
18.第三方面,本技术实施例提供了一种解码器,所述解码器包括解析单元,第一确定单元;
19.所述解析单元,用于解析码流,获取当前块的预测模式参数;
20.所述第一确定单元,用于当所述预测模式参数指示使用帧间预测模式确定所述当前块的帧间预测值时,确定所述当前块的子块的第一运动矢量;其中,所述当前块包括多个子块;以及基于所述第一运动矢量确定所述子块的第一预测值,和所述子块中的每一个像素位置与所述子块之间的第一运动矢量偏差;以及根据所述第一运动矢量偏差确定所述每一个像素位置对应的中心位置和第二运动矢量偏差;以及基于所述第一预测值,按照所述中心位置和所述第二运动矢量偏差进行二次预测或 prof处理,确定所述子块的第二预测值,将所述第二预测值确定为所述子块的帧间预测值。
21.第四方面,本技术实施例提供了一种解码器,所述解码器包括第一处理器、存储有所述第一处理器可执行指令的第一存储器,当所述指令被执行时,所述第一处理器执行时实现如上所述的帧间预测方法。
22.第五方面,本技术实施例提供了一种编码器,所述编码器包括第二确定单元;
23.所述第二确定单元,用于确定当前块的预测模式参数;以及当所述预测模式参数指示使用帧间预测模式确定所述当前块的帧间预测值时,确定所述当前块的子块的第一运动矢量;其中,所述当前块包括多个子块;以及基于所述第一运动矢量确定所述子块的第一预测值,和所述子块中的每一个像素位置与所述子块之间的第一运动矢量偏差;以及根据所述第一运动矢量偏差确定所述每一个像素位置对应的中心位置和第二运动矢量偏差;以及基于所述第一预测值,按照所述中心位置和所述第二运动矢量偏差进行二次预测或prof处理,确定所述子块的第二预测值,将所述第二预测值确定为所述子块的帧间预测值。
24.第六方面,本技术实施例提供了一种编码器,所述编码器包括第二处理器、存储有所述第二处理器可执行指令的第二存储器,当所述指令被执行时,所述第二处理器执行时实现如上所述的帧间预测方法。
25.第七方面,本技术实施例提供了一种计算机存储介质,该计算机存储介质存储有计算机程序,所述计算机程序被第一处理器和第二处理器执行时,实现如上所述的帧间预测方法。
26.本技术实施例所提供的一种帧间预测方法、编码器、解码器以及计算机存储介质,解码器解析码流,获取当前块的预测模式参数;当预测模式参数指示使用帧间预测模式确定当前块的帧间预测值时,确定当前块的子块的第一运动矢量;其中,当前块包括多个子块;基于第一运动矢量确定子块的第一预测值,和子块中的每一个像素位置与子块之间的
第一运动矢量偏差;根据第一运动矢量偏差确定每一个像素位置对应的中心位置和第二运动矢量偏差;基于第一预测值,按照中心位置和第二运动矢量偏差进行二次预测或prof处理,确定子块的第二预测值,将第二预测值确定为子块的帧间预测值。编码器确定当前块的预测模式参数;当预测模式参数指示使用帧间预测模式确定当前块的帧间预测值时,确定当前块的子块的第一运动矢量;其中,当前块包括多个子块;基于第一运动矢量确定子块的第一预测值,和子块中的每一个像素位置与子块之间的第一运动矢量偏差;根据第一运动矢量偏差确定每一个像素位置对应的中心位置和第二运动矢量偏差;基于第一预测值,按照中心位置和第二运动矢量偏差进行二次预测或prof处理,确定子块的第二预测值,将第二预测值确定为子块的帧间预测值。也就是说,本技术提出的帧间预测方法,可以在基于子块的预测之后,对运动矢量与子块的运动矢量之间的第一运动矢量偏差较大的像素位置,可以基于第一运动矢量偏差重新确定进行二次预测或prof处理所使用的中心位置和第二运动矢量偏差的确定,从而可以在基于子块的第一预测值的基础上,利用中心位置和第二运动矢量偏差进行基于点的二次预测,获得第二预测值。可见,本技术提出的帧间预测方法能够很好的适用于全部场景,可以减小预测的误差,大大提升编码性能,从而提高了编解码效率。
附图说明
27.图1为仿射模型的示意图一;
28.图2为仿射模型的示意图二;
29.图3为像素的插值示意图;
30.图4为子块插值的示意图一;
31.图5为子块插值的示意图二;
32.图6为每个子块的运动矢量示意图;
33.图7为样本位置示意图;
34.图8为中心位置的示意图一;
35.图9为中心位置的示意图二;
36.图10为本技术实施例提供的一种视频编码系统的组成框图示意图;
37.图11为本技术实施例提供的一种视频解码系统的组成框图示意图;
38.图12为帧间预测方法的实现流程示意图一;
39.图13为中心位置的示意图三;
40.图14为帧间预测方法的实现流程示意图二;
41.图15为帧间预测方法的实现流程示意图三;
42.图16为帧间预测方法的实现流程示意图四;
43.图17为二维滤波器的示意图二;
44.图18为帧间预测方法的实现流程示意图三;
45.图19为帧间预测方法的实现流程示意图四;
46.图20为解码器的组成结构示意图一;
47.图21为解码器的组成结构示意图二;
48.图22为编码器的组成结构示意图一;
49.图23为编码器的组成结构示意图二。
具体实施方式
50.下面将结合本技术实施例中的附图,对本技术实施例中的技术方案进行清楚、完整地描述。可以理解的是,此处所描述的具体实施例仅仅用于解释相关申请,而非对该申请的限定。另外还需要说明的是,为了便于描述,附图中仅示出了与有关申请相关的部分。
51.目前,通用的视频编解码标准基于都采用基于块的混合编码框架。视频图像中的每一帧被分割成相同大小(比如128
×ꢀ
128,64
×
64等)的正方形的最大编码单元(largest coding unit,lcu),每个最大编码单元还可以根据规则划分成矩形的编码单元(coding unit,cu);而且编码单元可能还会划分成更小的预测单元(prediction unit,pu)。具体地,混合编码框架可以包括有预测、变换(transform)、量化(quantization)、熵编码(entropycoding)、环路滤波(in loop filter) 等模块;其中,预测模块可以包括帧内预测(intraprediction)和帧间预测(interprediction),帧间预测可以包括运动估计(motionestimation)和运动补偿(motion compensation)。由于视频图像的一个帧内相邻像素之间存在很强的相关性,在视频编解码技术中使用帧内预测方式能够消除相邻像素之间的空间冗余;但是由于视频图像中的相邻帧之间也存在着很强的相似性,在视频编解码技术中使用帧间预测方式消除相邻帧之间的时间冗余,从而能够提高编码效率。下述本技术将以帧间预测进行详细描述。
52.帧间预测即使用已经编/解码的帧来预测当前帧中需要编/解码的部分,在基于块的编解码框架里,需要编/解码的部分通常是编码单元或预测单元。这里把需要编/解码的编码单元或预测单元统称为当前块。平移运动是视频中的一种常见而且简单的运动方式,所以平移的预测也是视频编解码中的一种传统的预测方法。视频中的平移运动可以理解为一部分内容随着时间的变化,从一个帧上的某一个位置移动到了另一个帧上的某一个位置。平移的一个简单的单向预测可以用某一帧与当前帧之间的一个运动矢量(motion vector,mv)来表示。这里所说的某一帧为当前帧的一个参考帧,当前块通过这个包含参考帧和运动矢量的运动信息可以找到参考帧上的一个与当前块大小相同的参考块,把这个参考块作为当前块的预测块。理想的平移运动中,当前块的内容在不同帧之间没有变形、旋转等变化以及亮度颜色的变化等,然而,视频中的内容并不总是符合这样的理想情况。双向预测在一定程度上可以解决上述问题。通常的双向预测是指双向的平移的预测。双向预测即是用两个参考帧和运动矢量的运动信息分别从两个参考帧(两个参考帧可能是同一个参考帧)找到两个与当前块大小相同的参考块,利用这两个参考块生成当前块的预测块。生成方法包括平均、加权平均以及一些其他的计算等。
53.在本技术中,可以认为预测是运动补偿的一部分,有些文献会把本技术中的预测称为运动补偿,如本技术所说仿射预测,有些文献会叫作仿射运动补偿。
54.旋转、放大、缩小、扭曲、形变等也是在视频中常见的变化,然而,普通的平移预测并不能很好地处理这种变化,于是仿射(affine)预测模型被应用于视频编解码中,如vvc和avs中的仿射,其中,vvc和avs3的仿射预测模型相似。在旋转、放大、缩小、扭曲、形变等变化中,可以认为当前块不是所有点都使用相同的mv,因此需要导出每一个点的mv。仿射预测模型用少量的几个参数通过计算导出每一个点的mv。vvc和avs3的仿射预测模型都使用了2控
制点(4参数) 和3控制点(6参数)模型。2控制点即当前块的左上角和右上角2个控制点,3控制点即当前块的左上角、右上角和左下角3个控制点。示例性的,图1为仿射模型的示意图一,图2为仿射模型的示意图二,如图1和2所示。因为每个mv包括一个x分量和一个y分量,所以2个控制点有4个参数,3个控制点有6个参数。
55.根据仿射预测模型可以为每一个像素位置导出一个mv,每一个像素位置都可以在参考帧中找到其对应的位置,如果这个位置不是整像素位置,那么需要通过插值的方法得出这个分像素位置的值。现在视频编解码标准中使用的插值方法通常都是有限长单位冲激响应(finite impulse response,fir)滤波器来实现,而按这种方式实现复杂度(成本)是很高的。例如,在avs3中,对亮度分量使用8抽头的插值滤波器,而且普通模式分像素精度是1/4像素的,affine模式的分像素精度是1/16 像素的。对每一个符合1/16像素精度的分像素点,需要使用水平方向的8个整像素和垂直方向8个整像素即64个整像素插值得到。图3为像素的插值示意图,如图3所示,圆形像素是想要得到的分像素点,深色的正方形像素是该分像素对应的整像素的位置,它们两个之间的矢量就是分像素的运动矢量,浅色的正方形像素是对圆形分像素位置的插值需要用到的像素,要得到该分像素位置的值,需要这些8x8的浅色的正方形像素区域的像素值进行插值,也包含深色的像素位置。
56.在传统的平移的预测中,当前块的每个像素位置的mv是相同的。如果进一步地引入子块的概念,子块的大小如4x4, 8x8等。图4为子块插值的示意图一,4x4的块插值需要使用的像素区域如图4所示。图5为子块插值的示意图二,8x8的块插值需要使用的像素区域如图5所示。
57.如果一个子块中的每个像素位置的mv是相同的。那么一个子块中的像素位置可以一起进行插值,从而分摊带宽、使用同一个相位的滤波器以及共享插值过程的中间值。但是如果每一个像素点使用一个mv,那么带宽就会增加,而且可能会使用不同相位的滤波器以及不能共享插值过程的中间值。
58.基于点的仿射预测代价很高,因此,为了兼顾性能和代价,在vvc和avs3中的仿射预测是基于子块来实现的。avs3 中的子块大小有4x4和8x8两种大小,vvc中使用4x4的子块大小。每一个子块有一个mv,子块内部的像素位置共享同一个mv。从而对子块内部的所有像素位置统一做插值。通过上述方法,基于子块的仿射预测与其他基于子块的预测方法的运动补偿复杂度相近。
59.可见,基于子块的仿射预测方法中,子块内部的像素位置共享同一个mv,其中,确定这个共享mv的方法是取当前子块中心的mv。而对4x4、8x8等水平垂直方向上至少有一个是偶数个像素的子块来说,其中心其实是落在非整数像素位置上的。目前的标准中都取一个整数像素的位置,例如,如对4x4子块,取距离左上角位置为(2,2)的像素位置。对8x8 子块,取距离左上角位置为(4,4)的像素位置。
60.仿射预测模型可以根据当前块所使用的控制点(2个控制点或3个控制点)导出每一个像素位置的mv。在基于子块的仿射预测中,根据上一段中像素位置计算出这个位置的mv,作为该子块的mv。图6为每个子块的运动矢量示意图,如图 6所示,为了推导每个子块的运动矢量,每个子块的中心采样的运动矢量如图所示,取整到1/16精度,然后进行运动补偿。
61.随着技术的发展,一个叫做使用光流的预测改进技术prof的方法被提出。这个技
术可以在不增加带宽的情况下,对基于块的仿射预测的预测值进行改进。在基于子块的仿射预测做完后,对每一个已完成基于子块的仿射预测的像素点计算其水平方向和垂直方向的梯度。在vvc中prof计算梯度时使用的是3抽头的滤波器[-1,0,1],其计算方法和双向光流 (bi-directional optical flow,bdof)的方法相同。之后,对每一个像素位置,计算其运动矢量偏差,该运动矢量偏差即为当前像素位置的运动矢量与整个子块使用mv的差值。这些运动矢量偏差都可以根据仿射预测模型的公式计算得出。由于公式的特性,一些子块的相同位置的运动矢量偏差是相同的,对这些子块,只需要计算出一组运动矢量偏差,其他子块可以直接复用这些值。对每一个像素位置,使用该点的水平像素垂直梯度及运动矢量偏差(包括水平方向的偏差和垂直方向的偏差)计算出该像素位置的预测值的修正值,然后将原预测值,即基于子块的仿射预测的预测值,加上预测值的修正值,便可以得到修正后的预测值。
[0062]
计算水平垂直方向的梯度时,使用[-1,0,1]滤波器,也就是对当前像素位置,水平方向会使用到其左边距离为1的像素位置和右边距离为1的像素位置的预测值,垂直方向会使用到其上边距离为1的像素位置和下边距离为1的像素位置的预测值。如果当前像素位置是当前块的边界位置,那么上述的几个像素位置中有的会超过当前块的边界一个像素距离。使用当前块的边界的预测值向外填充一个像素距离的位置以满足梯度计算,从而不需要额外地增加上述超过当前块的边界一个像素距离的预测值。由于梯度计算只需要使用基于子块的仿射预测的预测值,所以不需要增加额外的带宽。
[0063]
在vvc标准文本中,对根据控制点的mv导出当前块的各个子块的mv以及子块内的各像素位置的运动矢量偏差。 vvc中每个子块使用的作为子块mv的像素位置都相同,所以只需要导出一组子块的运动矢量偏差,其他子块可以复用该子块。进一步地,在vvc标准文本中,对prof流程的描述,prof对运动矢量偏差的计算包含在上面的流程中。
[0064]
avs3的仿射预测在计算子块的mv时,和vvc的基本原理相同,但avs3对当前块的左上角子块a,右上角子块b 和左下角子块c有特殊的处理。
[0065]
下面是avs3标准文本对仿射运动单元子块运动矢量阵列的导出的描述:
[0066]
如果仿射控制点运动矢量组中有3个运动矢量,那么运动矢量组可以表示为mvsaffine(mv0,mv1,mv2);如果仿射控制点运动矢量组中有2个运动矢量,那么运动矢量组可以表示为mvsaffine(mv0,mv1)。接着,可以按照以下步骤导出仿射运动单元子块运动矢量阵列:
[0067]
1、计算变量dhorx、dverx、dhory和dvery:
[0068]
dhorx=(mv1_x-mv0_x)《《(7-log(width));
[0069]
dhory=(mv1_y-mv0_y)《《(7-log(width));
[0070]
若运动矢量组为mvsaffine(mv0,mv1,mv2),则:
[0071]
dverx=(mv2_x-mv0_x)《《(7-log(height));
[0072]
dvery=(mv2_y-mv0_y)《《(7-log(height));
[0073]
若运动矢量组为mvsaffine(mv0,mv1),则:
[0074]
dverx=-dhory;
[0075]
dvery=dhorx;
[0076]
需要说明的是,图7为样本位置示意图,如图7所示,(xe,ye)是当前预测单元亮度
预测块左上角样本在当前图像的亮度样本矩阵中的位置,当前预测单元的宽度和高度分别是width和height,每个子块的宽度和高度分别是subwidth和 subheight,当前预测单元亮度预测块的左上角样本所在的子块为a,右上角样本所在的子块为b,左下角样本所在的子块为 c。
[0077]
2.1、如果当前预测单元的预测参考模式是

pred_list01’或affinesubblocksizeflag等于1(affinesubblocksizeflag用于指示子块尺寸的大小),则subwidth和subheight均等于8,(x,y)是尺寸为8x8的子块左上角位置的坐标,则可以计算每个8x8亮度子块的运动矢量mve(mve_x,mve_y):
[0078]
如果子块是a,则xpos和ypos均等于0;
[0079]
如果子块是b,则xpos等于width,ypos等于0;
[0080]
如果子块为c且mvsaffine中有3个运动矢量,则xpos等于0,ypos等于height;
[0081]
否则,xpos等于(x-xe) 4,ypos等于(y-ye) 4;
[0082]
因此,当前8x8子块的运动矢量mve为:
[0083]
mve_x=clip3(-131072,131071,rounding((mv0_x《《7) dhorx
×
xpos dverx
×
ypos,7));
[0084]
mve_y=clip3(-131072,131071,rounding((mv0_y《《7) dhory
×
xpos dvery
×
ypos,7));
[0085]
2.2、如果当前预测单元的预测参考模式是

pred_list0’或

pred_list1’,且affinesubblocksizeflag等于0,则subwidth 和subheight均等于4,(x,y)是尺寸为4x4的子块左上角位置的坐标,计算每个4x4亮度子块的运动矢量mve(mve_x, mve_y):
[0086]
如果子块是a,则xpos和ypos均等于0;
[0087]
如果子块是b,则xpos等于width,ypos等于0;
[0088]
如果子块是c且mvaffine中有3个运动矢量,则xpos等于0,ypos等height;
[0089]
否则,xpos等于(x-xe) 2,ypos等于(y-ye) 2;
[0090]
因此,当前4x4子块的运动矢量mve为:
[0091]
mve_x=clip3(-131072,131071,rounding((mv0_x《《7) dhorx
×
xpos dverx
×
ypos,7));
[0092]
mve_y=clip3(-131072,131071,rounding((mv0_y《《7) dhory
×
xpos dvery
×
ypos,7))。
[0093]
下面是avs3文本对于仿射预测样本导出及亮度、色度样本插值的描述:
[0094]
如果当前预测单元亮度预测块左上角样本在当前图像的亮度样本矩阵中的位置为(xe,ye)。
[0095]
如果当前预测单元的预测参考模式是

pred_list0’且affinesubblocksizeflag的值为0,mv0e0是mvarrayl0运动矢量集合在(xe x,ye y)位置的、4x4单元的lo运动矢量。亮度预测样本矩阵predmatrixl0中的元素predmatrixl0[x][y] 的值,是参考图像队列0中参考索引为refidxl0的1/16精度亮度样本矩阵中位置为(((xe x)《《4) mv0e0_x,(ye y) 《《4) mv0e0_y)))的样本值,色度预测样本矩阵predmatrixl0中的元素predmatrixl0[x][y]的值,是参考图像队列0中参考索引为refidxl0的1/32精度色度样本矩阵中位置为(((xe 2x)《《4) mvc_x,(ye 2y)《《4) mvc_y)))的样本值。其中,x1=((xe 2x)》》3)《《3,y1=((ye
(((xe x)《《4) mv0e0_x,(ye y)《《4) mv0e0_y)))的样本值,色度预测样本矩阵predmatrixl0中的元素predmatrixl0[x][y] 的值是参考图像队列0中参考索引为refidxl0的1/32精度色度样本矩阵中位置为(((xe 2x)《《4) mvc0_x,(ye 2y) 《《4) mvc0_y)))的样本值,亮度预测样本矩阵predmatrixl1中的元素predmatrixl1[x][y]的值是参考图像队列1中参考索引为refidxl1的1/16精度亮度样本矩阵中位置为((((xe x)《《4) mv0e1_x,(ye y)《《4) mv0e1_y)))) 的样本值,色度预测样本矩阵predmatrixl1中的元素predmatrixl1[x][y]的值是参考图像队列1中参考索引为refidxl1的1/32 精度色度样本矩阵中位置为(((xe 2x)《《4) mvc1_x,(ye 2y)《《4) mvc1_y)))的样本值。其中mvc0_x等于 mv0e0_x,mvc0_y等于mv0e0_y,mvc1_x等于mv0e1_x,mvc1_y等于mv0e1_y。
[0104]
其中,参考图像的亮度1/16精度样本矩阵和色度1/32精度样本矩阵中各个位置的元素值通过如下的仿射亮度样本插值过程和仿射色度样本插值过程所定义的插值方法得到。参考图像外的整数样本应使用该图像内距离该样本最近的整数样本 (边缘或角样本)代替,即运动矢量能指向参考图像外的样本。
[0105]
具体地,仿射亮度样本插值过程如下:
[0106]
a,b,c,d是相邻整像素样本,dx与dy是整像素样本a周边分像素样本a(dx,dy)与a的水平和垂直距离,dx 等于fx&15,dy等于fy&15,其中(fx,fy)是该分像素样本在1/16精度的亮度样本矩阵中的坐标。整像素a
x,y
的周边有的255个分像素样本a
x,y
(dx,dy)。
[0107]
具体地,样本位置a
x,0
(x=1~15)由水平方向上距离插值点最近得8个整数值滤波得到,预测值的获取方式如下:
[0108]ax,0
=clip1((fl[x][0]
×
a-3,0
fl[x][1]
×
a-2,0
fl[x][2]
×
a-1,0
fl[x][3]
×a0,0
fl[x][4]
×a1,0
fl[x][5]
×a2,0
fl[x][6]
ꢀ×a3,0
fl[x][7]
×a4,0
32)》》6)。
[0109]
具体地,样本位置a
0,y
(y=1~15)由垂直方向上距离插值点最近得8个整数值滤波得到,预测值的获取方式如下:
[0110]a0,y
=clip1((fl[y][0]
×a0,-3
fl[y][1]
×
a-2,0
fl[y][2]
×
a-1,0
fl[y][3]
×a0,0
fl[y][4]
×a1,0
fl[y][5]
×a2,0
fl[y][6]
×a3,0
fl[y][7]
×
a-4,0
32)》》6)。
[0111]
具体地,样本位置a
x,y
(x=1~15,y=1~15)的预测值的获取方式如下:
[0112]ax,y
=clip1((fl[y][0]
×
a'
x,y-3
fl[y][1]
×
a'
x,y-2
fl[y][2]
×
a'x,y-1
fl[y][3]
×
a'x,y
fl[y][4]
×
a'x,y 1
fl[y][5]
×
a'x,y
2 fl[y][6]
×
a'x,y 3
fl[y][7]
×
a'x,y 4
(1《《(19-bitdepth)))》》(20-bitdepth))。
[0113]
其中:
[0114]
a'
x,y
=(fl[x][0]
×
a-3,y
fl[x][1]
×
a-2,y
fl[x][2]
×
a-1,y
fl[x][3]
×a0,y
fl[x][4]
×a1,y
fl[x][5]
×a2,y
fl[x][6]
×a3,y
fl[x][7]
×a4,y
((1《《(bitdepth-8))》》1))》》(bitdepth-8)。
[0115]
亮度插值滤波器系数如表1所示:
[0116]
表1
[0117][0118]
具体地,仿射色度样本插值过程如下:
[0119]
a,b,c,d是相邻整像素样本,dx与dy是整像素样本a周边分像素样本a(dx,dy)与a的水平和垂直距离,dx 等于fx&31,dy等于fy&31,其中(fx,fy)是该分像素样本在1/32精度的色度样本矩阵中的坐标。整像素a
x,y
的周边有 1023个分像素样本a
x,y
(dx,dy)。
[0120]
具体地,对于dx等于0或dy等于0的分像素点,可直接用色度整像素插值得到,对于dx不等于0且dy不等于0的点,使用整像素行(dy等于0)上的分像素进行计算:
[0121]
if(dx==0){
[0122]ax,y
(0,dy)=clip3(0,(1《《bitdepth)-1,(fc[dy][0]
×ax,y-1 fc[dy][1]
×ax,y
fc[dy][2]
×ax,y
1 fc[dy][3]
×ax,y
2 32)》》6)
[0123]
}
[0124]
else if(dy==0){
[0125]ax,y
(dx,0)=clip3(0,(1《《bitdepth)-1,(fc[dx][0]
×ax-1,y
fc[dx][1]
×ax,y
fc[dx][2]
×ax 1,y
fc[dx][3]
×ax 2,y 32
)》》6)
[0126]
}
[0127]
else{
[0128]ax,y
(dx,dy)=clip3(0,(1《《bitdepth)-1,(c[dy][0]
×
a'
x,y-1
(dx,0) c[dy][1]
×
a'
x,y
(dx,0) c[dy][2]
×
a'
x,y
1 (dx,0) c[dy][3]
×
a'
x,y
2(dx,0) (1《《(19-bitdepth)))》》(20-bitdepth))
[0129]
}
[0130]
其中,a'
x,y
(dx,0)是整像素行上的分像素的临时值,定义为:a'
x,y
(dx,0)=(fc[dx][0]
×ax-1,y
fc[dx][1]
×ax,y
fc[dx][2]
×ax 1

y
fc[dx][3]
×ax 2,y
((1《《(bitdepth-8))》》1))》》(bitdepth-8)。
[0131]
色度插值滤波器系数如表2所示:
[0132]
表2
[0133][0134][0135]
常见的仿射预测的方法可以包括以下步骤:
[0136]
步骤101、确定控制点的运动矢量。
[0137]
步骤102、根据控制点的运动矢量确定子块的运动矢量。
[0138]
步骤103、根据子块的运动矢量对子块进行预测。
[0139]
目前,在通过prof改进基于块的仿射预测的预测值时,具体可以包括以下步骤:
[0140]
步骤101、确定控制点的运动矢量。
[0141]
步骤102、根据控制点的运动矢量确定子块的运动矢量。
[0142]
步骤103、根据子块的运动矢量对子块进行预测。
[0143]
步骤104、根据控制点的运动矢量与子块的运动矢量确定子块内每个位置与子块的运动矢量偏差。
[0144]
步骤105、根据控制点的运动矢量确定子块的运动矢量。
[0145]
步骤106、使用基于子块的预测值导出每一个位置计算水平和垂直方向的梯度。
[0146]
步骤107、利用光流原理,根据每一个位置的运动矢量偏差和水平、垂直方向的梯度,计算每一个位置的预测值的偏差值。
[0147]
步骤108、对每一个位置基于子块的预测值加上预测值的偏差值,得到修正后的预测值。
[0148]
目前,在通过prof改进基于块的仿射预测的预测值时,具体还可以包括以下步骤:
[0149]
步骤101、确定控制点的运动矢量。
[0150]
步骤109、根据控制点的运动矢量确定子块的运动矢量及子块内每个位置与子块的运动矢量的偏差。
[0151]
步骤103、根据子块的运动矢量对子块进行预测。
[0152]
步骤106、使用基于子块的预测值导出每一个位置计算水平和垂直方向的梯度。
[0153]
步骤107、利用光流原理,根据每一个位置的运动矢量偏差和水平、垂直方向的梯度,计算每一个位置的预测值的偏差值。
[0154]
步骤108、对每一个位置基于子块的预测值加上预测值的偏差值,得到修正后的预测值。
[0155]
prof可以使用光流原理对基于子块的仿射预测进行修正,提高了压缩性能。然而,prof的应用是基于子块内的像素位置的运动矢量与子块运动矢量的偏差非常小的情况,也就是说,子块内的像素位置的运动矢量与子块运动矢量的偏差非常小的情况下使用prof的光流计算方法是有效的,但是,由于prof依赖于基准位置的水平方向和垂直方向的梯度,在实际位置离基准位置较远的情况下,基准位置的水平和垂直方向的梯度并不能真实的反映基准位置和实际位置之间的水平和垂直方向的梯度,因此,在子块内的像素位置的运动矢量与子块运动矢量的偏差较大的情况下,该方法就不是特别有效了。
[0156]
此时,提出了二次预测的方法来克服prof的缺陷。解码器进行二次预测的方法可以包括以下步骤:
[0157]
步骤201、根据子块的运动矢量对子块进行预测,获得预测值。
[0158]
步骤202、确定子块内每一个位置与子块的运动矢量偏差。
[0159]
步骤203、根据每一个位置的运动矢量偏差,利用二维滤波器对预测值进行滤波,得到二次预测的预测值。
[0160]
也就是说,二次预测方法可以在基于子块的预测之后,对运动矢量与子块的运动矢量有偏差的像素位置,在基于子块的预测的基础上进行基于点的二次预测,最终完成对预测值的修正,获得新的预测值,即二次预测的预测值。
[0161]
具体地,基于点的二次预测使用二维滤波器。二维滤波器是相邻的构成预设形状的点的构成的滤波器。相邻的构成预设形状的点可以为9个点。对一个像素位置,滤波器处理的结果为该位置的二次预测的预测值。其中,二维滤波器的滤波系数由每一个位置的运动矢量偏差确定,二维滤波器的输入为预测值,输出为二次预测的预测值。
[0162]
进一步地,在本技术中,如果本技术中对当前块使用仿射模式,那么需要先对控制点的运动矢量进行确定。解码器进行二次预测的方法可以包括以下步骤:
[0163]
步骤204、确定控制点的运动矢量。
[0164]
步骤205、根据控制点的运动矢量确定子块的运动矢量。
[0165]
步骤201、根据子块的运动矢量对子块进行预测,获得预测值。
[0166]
步骤202、确定子块内每一个位置与子块的运动矢量偏差。
[0167]
步骤203、根据每一个位置的运动矢量偏差,利用二维滤波器对预测值进行滤波,得到二次预测的预测值。
[0168]
由此可见,在本技术的实施例中,在对控制点的运动矢量进行确定之后,可以利用控制点的运动矢量对子块进行预测处理,并在确定出子块中的像素位置与子块的运动矢量偏差之后,对运动矢量与子块的运动矢量有偏差的像素位置,在基于子块的预测的基础上进行基于点的二次预测,最终完成对预测值的修正,获得新的预测值,即二次预测的预测值。
[0169]
进一步地,在本技术中,也可以将确定子块的运动矢量和确定子块内每个位置与子块的运动矢量偏差的两个步骤同时进行。解码器进行二次预测的方法可以包括以下步骤:
[0170]
步骤204、确定控制点的运动矢量。
[0171]
步骤206、根据控制点的运动矢量确定子块的运动矢量,和子块内每一个位置与子块的运动矢量偏差。
[0172]
步骤201、根据子块的运动矢量对子块进行预测,获得预测值。
[0173]
步骤203、根据每一个位置的运动矢量偏差,利用二维滤波器对预测值进行滤波,得到二次预测的预测值。
[0174]
由此可见,在本技术的实施例中,在对控制点的运动矢量进行确定之后,可以同时进行子块的运动矢量和子块内每一个位置与子块的运动矢量偏差的确定,然后对运动矢量与子块的运动矢量有偏差的像素位置,在基于子块的预测的基础上进行基于点的二次预测,最终完成对预测值的修正,获得新的预测值,即二次预测的预测值。
[0175]
需要说明的是,因为仿射模型可以明确地计算出每一个像素位置的运动矢量,或者说子块内每一个像素位置与子块运动矢量的偏差,因此,二次预测方法可以用于对仿射预测进行改善,当然,二次预测也可以应用于其他基于子块的预测的改善。也就是说,本技术所提出的基于子块的预测包括但不限于仿射基于子块的预测。
[0176]
进一步地,二次预测方法可以以avs3标准为基础,也可以应用于vvc标准,本技术不作具体限定。
[0177]
对于子块中的每一个像素位置的像素,在进行二次预测或prof处理时,默认的滤波器的中心点是基于子块的预测的预测块中与该像素位置相同的像素位置,假设运动矢量偏差为0,那么该像素位置的预测值就是基于子块的预测的预测块中与该像素位置相同的像素位置的值。一般情况下,上述方法可以应用于像素位置与子块之间的运动矢量偏差很小的条件。但是,对于像素位置与子块之间的运动矢量偏差不是很小的情况,例如在水平或垂直方向上,偏差超过半个像素或一定的比例时,二次预测或prof处理获得的预测效果可能会大大降低。
[0178]
图8为中心位置的示意图一,如图8所示,正方形表示基于子块的预测的预测块的像素位置,圆形表示待预测像素位置在基于子块的预测的预测块中的实际位置,其中,正方形1表示基于子块的预测的预测块中与该待预测像素位置相同的像素位置,即子块的(1,1)位置。该正方形1即是默认的基于点的预测的基准位置,即滤波器的中心位置,其运动矢量偏差记为(dmv_x0,dmv_y0)。
[0179]
图9为中心位置的示意图二,如图9所示,如果dmv_x0和dmv_y0都大于二分之一个像素,那么在该子块中,该正方形1与待预测像素位置之间存在较大的距离,如果以该正方形1作为滤波器的中心位置进行二次预测或prof处理,最终获得的预测结果会存在较大的误差。
[0180]
由此可见,当二次预测或prof需要使用的滤波器的中心位置如果存在较大的运动矢量偏差时,可能会造成预测性能下降的问题,即现有的prof修正预测值方法和二次预测方法其实并不严谨,在对仿射预测进行改善时,并不能很好的适用于全部场景,编码性能有待提升。
[0181]
为了解决现有技术中存在的缺陷,在本技术的实施例中,可以在基于子块的预测之后,对运动矢量与子块的运动矢量之间的第一运动矢量偏差较大的像素位置,可以基于第一运动矢量偏差重新确定进行二次预测或prof处理所使用的中心位置和第二运动矢量偏差的确定,从而可以在基于子块的第一预测值的基础上,利用中心位置和第二运动矢量偏差进行基于点的二次预测,获得第二预测值。可见,本技术提出的帧间预测方法能够很好的适用于全部场景,可以减小预测的误差,大大提升编码性能,从而提高了编解码效率。
[0182]
应理解,本技术实施例提供一种视频编码系统,图10为本技术实施例提供的一种视频编码系统的组成框图示意图,如图10所示,该视频编码系统11可以包括:变换单元111、量化单元112、模式选择和编码控制逻辑单元113、帧内预测单元114、帧间预测单元115(包括:运动补偿和运动估计)、反量化单元116、反变换单元117、环路滤波单元118、编码单元119和解码图像缓存单元110;针对输入的原始视频信号,通过编码树块(coding tree unit,ctu)的划分可以得到一个视频重建块,通过模式选择和编码控制逻辑单元113确定编码模式,然后,对经过帧内或帧间预测后得到的残差像素信息,通过变换单元111、量化单元112对该视频重建块进行变换,包括将残差信息从像素域变换到变换域,并对所得的变换系数进行量化,用以进一步减少比特率;帧内预测单元114用于对该视频重建块进行帧内预测;其中,帧内预测单元114用于确定该视频重建块的最优帧内预测模式(即目标预测模式);帧间预测单元115用于执行所接收的视频重建块相对于一或多个参考帧中的一或多个块的帧间预测编码,以提供时间预测信息;其中吗,运动估计为产生运动向量的过程,运动向量可以估计该视频重建块的运动,然后,运动补偿基于由运动估计所确定的运动向量执行运动补偿;在确定帧间预测模式之后,帧间预测单元115还用于将所选择的帧间预测数据提供到编码单元119,而且,将所计算确定的运动向量数据也发送到编码单元 119;此外,反量化单元116和反变换单元117用于该视频重建块的重构建,在像素域中重构建残差块,该重构建残差块通过环路滤波单元118去除方块效应伪影,然后,将该重构残差块添加到解码图像缓存单元110的帧中的一个预测性块,用以产生经重构建的视频重建块;编码单元119是用于编码各种编码参数及量化后的变换系数。而解码图像缓存单元110用于存放重构建的视频重建块,用于预测参考。随着视频图像编码的进行,会不断生成新的重构建的视频重建块,这些重构建的视频重建块都会被存放在解码图像缓存单元110中。
[0183]
本技术实施例还提供一种视频解码系统,图11为本技术实施例提供的一种视频解码系统的组成框图示意图,如图11 所示,该视频解码系统12可以包括:解码单元121、反变换单元127,与反量化单元122、帧内预测单元123、运动补偿单元124、环路滤波单元125和解码图像缓存单元126单元;输入的视频信号经过视频编码系统11进行编码处理之后,输出该
视频信号的码流;该码流输入视频解码系统12中,首先经过解码单元121,用于得到解码后的变换系数;针对该变换系数通过反变换单元127与反量化单元122进行处理,以便在像素域中产生残差块;帧内预测单元123可用于基于所确定的帧内预测方向和来自当前帧或图片的先前经解码块的数据而产生当前视频解码块的预测数据;运动补偿单元124是通过剖析运动向量和其他关联语法元素来确定用于视频解码块的预测信息,并使用该预测信息以产生正被解码的视频解码块的预测性块;通过对来自反变换单元127与反量化单元122的残差块与由帧内预测单元123或运动补偿单元124产生的对应预测性块进行求和,而形成解码的视频块;该解码的视频信号通过环路滤波单元125以便去除方块效应伪影,可以改善视频质量;然后将经解码的视频块存储于解码图像缓存单元126中,解码图像缓存单元126存储用于后续帧内预测或运动补偿的参考图像,同时也用于视频信号的输出,得到所恢复的原始视频信号。
[0184]
本技术实施例提供的一种帧间预测方法主要作用于视频编码系统11的帧间预测单元215和视频解码系统12的帧间预测单元,即运动补偿单元124;也就是说,如果在视频编码系统11能够通过本技术实施例提供的帧间预测方法得到一个较好的预测效果,那么,对应地,在视频解码系统12,也能够改善视频解码恢复质量。
[0185]
基于此,下面结合附图和实施例对本技术的技术方案进一步详细阐述。在进行详细阐述之前,需要说明的是,说明书通篇中提到的“第一”、“第二”、“第三”等,仅仅是为了区分不同的特征,不具有限定优先级、先后顺序、大小关系等功能。
[0186]
需要说明的是,本实施例以avs3标准为基础进行示例性说明,本技术提出的帧间预测方法同样可以适用于vvc等其他编码标准技术,不申请对此不作具体限定。
[0187]
本技术实施例提供一种帧间预测方法,该方法应用于视频解码设备,即解码器。该方法所实现的功能可以通过解码器中的第一处理器调用计算机程序来实现,当然计算机程序可以保存在第一存储器中,可见,该解码器至少包括第一处理器和第一存储器。
[0188]
进一步地,在本技术的实施例中,图12为帧间预测方法的实现流程示意图一,如图12所示,解码器进行帧间预测的方法可以包括以下步骤:
[0189]
步骤301、解析码流,获取当前块的预测模式参数。
[0190]
在本技术的实施例中,解码器可以先解析二进制码流,从而获得当前块的预测模式参数。其中,预测模式参数可以用于对当前块所使用的预测模式进行确定。
[0191]
需要说明的是,待解码图像可以划分为多个图像块,而当前待解码的图像块可以称为当前块(可以用cu表示),与当前块相邻的图像块可以称为相邻块;即在待解码图像中,当前块与相邻块之间具有相邻关系。这里,每个当前块可以包括第一图像分量、第二图像分量和第三图像分量,也即当前块表示待解码图像中当前待进行第一图像分量、第二图像分量或者第三图像分量预测的图像块。
[0192]
其中,假定当前块进行第一图像分量预测,而且第一图像分量为亮度分量,即待预测图像分量为亮度分量,那么当前块也可以称为亮度块;或者,假定当前块进行第二图像分量预测,而且第二图像分量为色度分量,即待预测图像分量为色度分量,那么当前块也可以称为色度块。
[0193]
进一步地,在本技术的实施例中,预测模式参数不仅可以指示当前块采用的预测模式,还可以指示与该预测模式相关的参数。
[0194]
可以理解的是,在本技术的实施例中,预测模式可以包括有帧间预测模式、传统帧内预测模式以及非传统帧内预测模式等。
[0195]
也就是说,在编码侧,编码器可以选取最优的预测模式对当前块进行预编码,在这过程中就可以确定出当前块的预测模式,然后确定用于指示预测模式的预测模式参数,从而将相应的预测模式参数写入码流,由编码器传输到解码器。
[0196]
相应地,在解码器侧,解码器通过解析码流便可以直接获取到当前块的预测模式参数,并根据解析获得的预测模式参数确定当前块所使用的预测模式,以及该预测模式对应的相关参数。
[0197]
进一步地,在本技术的实施例中,解码器在解析获得预测模式参数之后,可以基于预测模式参数确定当前块是否使用帧间预测模式。
[0198]
步骤302、当预测模式参数指示使用帧间预测模式确定当前块的帧间预测值时,确定当前块的子块的第一运动矢量;其中,当前块包括多个子块。
[0199]
在本技术的实施例中,解码器在解析获得预测模式参数之后,如果解析获得的预测模式参数指示当前块使用帧间预测模式确定当前块的帧间预测值,那么解码器可以先确定出当前块的每一个子块的第一运动矢量。其中,一个子块对应有一个第一运动矢量。
[0200]
需要说明的是,在本技术的实施例中,当前块为当前帧中待解码的图像块,当前帧以图像块的形式按一定顺序依次进行解码,该当前块为当前帧内按该顺序下一时刻待解码的图像块。当前块可具有多种规格尺寸,例如16
×
16、32
×
32或32
×
16 等规格,其中数字表示当前块上像素点的行数和列数。
[0201]
进一步对,在本技术的实施例中,当前块可以划分为多个子块,其中,每一个子块的尺寸大小都是相同的,子块为较小规格的像素点集合。子块的尺寸可以为8
×
8或4
×
4。
[0202]
示例性的,在本技术中,当前块的尺寸为16
×
16,可以划分为4个尺寸均为8
×
8的子块。
[0203]
可以理解的是,在本技术的实施例中,在解码器解析码流获取到预测模式参数指示使用帧间预测模式确定当前块的帧间预测值的情况下,就可以继续采用本技术实施例所提供的帧间预测方法。
[0204]
在本技术的实施例中,进一步地,当预测模式参数指示使用帧间预测模式确定当前块的帧间预测值时,解码器确定当前块的子块的第一运动矢量的方法可以包括以下步骤:
[0205]
步骤302a、解析码流,获取当前块的仿射模式参数和预测参考模式。
[0206]
步骤302b、当仿射模式参数指示使用仿射模式时,确定控制点模式和子块尺寸参数。
[0207]
步骤302c、根据预测参考模式、控制点模式以及子块尺寸参数,确定第一运动矢量。
[0208]
在本技术的实施例中,解码器在解析获得预测模式参数之后,如果解析获得的预测模式参数指示当前块使用帧间预测模式确定当前块的帧间预测值,那么解码器可以通过解析码流,获得仿射模式参数和预测参考模式。
[0209]
需要说明的是,在本技术的实施例中,仿射模式参数用于对是否使用仿射模式进行指示。具体地,仿射模式参数可以为仿射运动补偿允许标志affine_enable_flag,解码器
通过仿射模式参数的取值的确定,可以进一步确定是否使用仿射模式。
[0210]
也就是说,在本技术中,仿射模式参数可以为一个二值变量。若仿射模式参数的取值为1,则指示使用仿射模式;若仿射模式参数的取值为0,则指示不使用仿射模式。
[0211]
可以理解的是,在本技术中,解码器解析码流,如果未解析得到仿射模式参数,那么也可以理解为指示不使用仿射模式。
[0212]
示例性的,在本技术中,仿射模式参数的取值可以等于仿射运动补偿允许标志affine_enable_flag的值,如果 affine_enable_flag的值为
‘1’
,表示可使用仿射运动补偿;如果affine_enable_flag的值为
‘0’
,表示不应使用仿射运动补偿。
[0213]
进一步地,在本技术的实施例中,如果解码器解析码流所获取的仿射模式参数指示使用仿射模式,那么解码器可以进行控制点模式和子块尺寸参数的获取。
[0214]
需要说明的是,在本技术的实施例中,控制点模式用于对控制点的个数进行确定。在仿射模型中,一个子块可以有2 个控制点或者3个控制点,相应地,控制点模式可以为2个控制点对应的控制点模式,或者为3个控制点对应的控制点模式。即控制点模式可以包括4参数模式和6参数模式。
[0215]
可以理解的是,在本技术的实施例中,对于avs3标准,如果当前块使用了仿射模式,那么解码器还需要确定出当前块在仿射模式中控制点的个数进行确定,从而可以确定出使用的是4参数(2个控制点)模式,还是6参数(3个控制点)模式。
[0216]
进一步地,在本技术的实施例中,如果解码器解析码流所获取的仿射模式参数指示使用仿射模式,那么解码器可以通过解析码流,进一步获取子块尺寸参数。
[0217]
具体地,子块尺寸参数可以通过仿射预测子块尺寸标志affine_subblock_size_flag确定,解码器通过解析码流,获得子块尺寸标志,并根据子块标志的取值确定当前块的子块的尺寸大小。其中,子块的尺寸大小可以为8
×
8或4
×
4。具体地,在本技术中,子块尺寸标志可以为一个二值变量。若子块尺寸标志的取值为1,则指示子块尺寸参数为8
×
8;若子块尺寸标志的取值为0,则指示子块尺寸参数为4
×
4。
[0218]
示例性的,在本技术中,子块尺寸标志的取值可以等于仿射预测子块尺寸标志affine_subblock_size_flag的值,如果 affine_subblock_size_flag的值为
‘1’
,则当前块划分为尺寸为8
×
8的子块;如果affine_subblock_size_flag的值为
‘0’
,则当前块划分为尺寸为4
×
4的子块。
[0219]
可以理解的是,在本技术中,解码器解析码流,如果未解析得到子块尺寸标志,那么也可以理解为当前块划分为4
×
4 的子块。也就是说,如果码流中不存在affine_subblock_size_flag,可以直接将子块尺寸标志的取值设置为0。
[0220]
进一步地,在本技术的实施例中,解码器在确定控制点模式和子块尺寸参数之后,便可以根据预测参考模式、控制点模式以及子块尺寸参数,进一步确定出当前块中的子块的第一运动矢量。
[0221]
具体地,在本技术的实施例中,解码器可以先根据预测参考模式确定控制点运动矢量组;然后可以基于控制点运动矢量组、控制点模式以及子块尺寸参数,确定出子块的第一运动矢量。
[0222]
可以理解的是,在本技术的实施例中,控制点运动矢量组可以用于对控制点的运动矢量进行确定。
[0223]
需要说明的是,在本技术的实施例中,解码器可以按照上述方法,遍历当前块中的每一个子块,利用每一个子块的控制点运动矢量组、控制点模式以及子块尺寸参数,确定出每一个子块的第一运动矢量,从而可以根据每一个子块的第一运动矢量构建获得运动矢量集合。
[0224]
可以理解的是,在本技术的实施例中,当前块的运动矢量集合中可以包括当前块的每一个子块的第一运动矢量。
[0225]
进一步地,在本技术的实施例中,解码器在根据控制点运动矢量组、控制点模式以及子块尺寸参数,确定第一运动矢量时,可以先根据控制点运动矢量组、控制点模式以及当前块的尺寸参数,确定差值变量;然后可以基于预测模式参数和子块尺寸参数,确定子块位置;最后,便可以利用差值变量和子块位置,确定子块的第一运动矢量,进而可以获得当前块的多个子块的运动矢量集合。
[0226]
示例性的,在本技术中,差值变量可以包括4个变量,具体为dhorx、dverx、dhory和dvery,在计算差值变量时,解码器需要先确定出控制点运动矢量组,其中,控制点运动矢量组可以对控制点的运动矢量进行表征。
[0227]
具体地,如果控制点模式为6参数模式,即存在3个控制点,那么控制点运动矢量组可以为包括3个运动矢量的运动矢量组,表示为mvsaffine(mv0,mv1,mv2);如果控制点模式为4参数模式,即存在2个控制点,那么控制点运动矢量组可以为包括2个运动矢量的运动矢量组,表示为mvsaffine(mv0,mv1)。
[0228]
接着,解码器便可以利用控制点运动矢量组进行差值变量的计算:
[0229]
dhorx=(mv1_x-mv0_x)《《(7-log(width));
[0230]
dhory=(mv1_y-mv0_y)《《(7-log(width));
[0231]
若运动矢量组为mvsaffine(mv0,mv1,mv2),则:
[0232]
dverx=(mv2_x-mv0_x)《《(7-log(height));
[0233]
dvery=(mv2_y-mv0_y)《《(7-log(height));
[0234]
若运动矢量组为mvsaffine(mv0,mv1),则:
[0235]
dverx=-dhory;
[0236]
dvery=dhorx。
[0237]
其中,width和height分别为当前块的宽度和高度,即当前块的尺寸参数,具体地,当前块的尺寸参数可以为解码器通过解析码流获取的。
[0238]
进一步地,在本技术的实施例中,解码器在确定出差值变量之后,可以接着基于预测模式参数和子块尺寸参数,确定子块位置。具体地,解码器可以通过字块尺寸标志确定出子块的尺寸,同时可以通过预测模式参数确定具体使用哪一种预测模式,然后便可以根据子块的尺寸和使用的预测模式,确定出子块位置。
[0239]
示例性的,在本技术中,如果当前块的预测参考模式的取值为2,即为第三参考模式

pred_list01’,或者,子块尺寸标志的取值为1,即子块的宽度subwidth和高度subheight均等于8,则(x,y)是8
×
8子块左上角位置的坐标,那么可以通过以下方式确定子块位置的坐标xpos和ypos:
[0240]
如果子块是当前块的左上角的控制点,则xpos和ypos均等于0;
[0241]
如果子块是当前块的右上角的控制点,则xpos等于width,ypos等于0;
[0242]
如果子块是当前块的左下角的控制点,控制点运动矢量组可以为包括3个运动矢量的运动矢量组,则xpos等于0,ypos 等于height;
[0243]
否则,xpos等于(x-xe) 4,ypos等于(y-ye) 4。
[0244]
示例性的,在本技术中,如果当前块的预测参考模式的取值0或1,即为第一参考模式

pred_list0’或第二参考模式

pred_list1’,且子块尺寸标志的取值为0,即子块的宽度subwidth和高度subheight均等于4,(x,y)是4
×
4子块左上角位置的坐标,那么可以通过以下方式确定子块位置的坐标xpos和ypos:
[0245]
如果子块是当前块的左上角的控制点,则xpos和ypos均等于0;
[0246]
如果子块是当前块的右上角的控制点,则xpos等于width,ypos等于0;
[0247]
如果子块是当前块的左下角的控制点,控制点运动矢量组可以为包括3个运动矢量的运动矢量组,则xpos等于0,ypos 等于height;
[0248]
否则,xpos等于(x-xe) 2,ypos等于(y-ye) 2。
[0249]
进一步地,在本技术的实施例中,解码器计算获得子块位置之后,接着可以基于子块位置和差值变量确定出该子块的第一运动矢量,最后,遍历当前块的每一个子块,获得每一个子块的第一运动矢量,便可以构建获得当前块的多个子块的运动矢量集合。
[0250]
示例性的,在本技术中,解码器在确定出子块位置xpos和ypos之后,可以通过以下方式确定出子块的第一运动矢量 mve(mve_x,mve_y)
[0251]
mve_x=clip3(-131072,131071,rounding((mv0_x《《7) dhorx
×
xpos dverx
×
ypos,7));
[0252]
mve_y=clip3(-131072,131071,rounding((mv0_y《《7) dhory
×
xpos dvery
×
ypos,7))。
[0253]
需要说明的是,在本技术中,在确定子块内的每个位置与子块的运动矢量的偏差时,如果当前块使用的是仿射预测模型,可以根据仿射预测模型的公式计算出子块内的每个位置的运动矢量,与子块的运动矢量相减得到它们的偏差。如果子块的运动矢量都选择子块内同一位置的运动矢量,如4x4的块使用距离左上角(2,2)的位置,8x8的块使用距离左上角(4,4) 的位置,根据现在标准包括vvc和avs3中使用的仿射模型,每个子块相同位置的运动矢量偏差都是相同的。但是avs在左上角,右上角,以及3个控制点的情况下的左下角(上述avs3文本中的,如图7所示的a,b,c位置)与其他块使用的位置不同,相应地在计算左上角,右上角,以及3控制点的情况下的左下角的子块的运动矢量偏差时与其他块也不同。
[0254]
步骤303、基于第一运动矢量确定子块的第一预测值,和子块中的每一个像素位置与子块之间的第一运动矢量偏差。
[0255]
在本技术的实施例中,解码器在确定出当前块的每一个子块的第一运动矢量之后,可以基于子块的第一运动矢量,分别确定出子块的第一预测值和该子块中的每一个像素位置与该子块之间的第一运动矢量偏差,其中,一个像素位置对应一个第一运动矢量偏差。
[0256]
可以理解的是,在本技术的实施例中,步骤303具体可以包括:
[0257]
步骤303a、基于第一运动矢量确定子块的第一预测值。
[0258]
步骤303b、基于第一运动矢量确定子块中的每一个像素位置与子块之间的第一运动矢量偏差。
[0259]
其中,本技术实施例提出的帧间预测方法对解码器执行步骤303a和步骤303b的顺序不进行限定,也就是说,在本技术中,在确定出当前块的每一个子块的第一运动矢量之后,解码器可以先执行步骤303a,然后执行步骤303b,也可以先执行步骤303b,再执行步骤303a,还可以同时执行步骤303a和步骤303b。
[0260]
进一步地,在本技术的实施例中,解码器在基于第一运动矢量确定子块的第一预测值时,可以先确定样本矩阵;其中,样本矩阵包括亮度样本矩阵和色度样本矩阵;然后可以根据预测参考模式、子块尺寸参数、样本矩阵以及运动矢量集合,确定第一预测值。
[0261]
需要说明的是,在本技术的实施例中,解码器在根据预测参考模式、子块尺寸参数、样本矩阵以及运动矢量集合,确定第一预测值时,可以先根据预测参考模式和子块尺寸参数,从运动矢量集合中确定目标运动矢量;然后可以利用预测参考模式对应的参考图像队列和参考索引样本矩阵以及目标运动矢量,确定预测样本矩阵;其中,预测样本矩阵包括多个子块的第一预测值。
[0262]
具体地,在本技术的实施例中,样本矩阵可以包括亮度样本矩阵和色度样本矩阵,相应地,解码器确定出的预测样本矩阵可以包括亮度预测样本矩阵和色度预测样本矩阵,其中,亮度预测样本矩阵包括多个子块的第一亮度预测值,色度预测样本矩阵包括多个子块的第一色度预测值,第一亮度预测值和第一色度预测值构成子块的第一预测值。
[0263]
示例性的,在本技术中,假设当前块左上角样本在当前图像的亮度样本矩阵中的位置为(xe,ye)。如果当前块的预测参考模式取值为0,即使用第一参考模式

pred_list0’,且子块尺寸标志的取值为0,即子块尺寸参数为4
×
4,那么目标运动矢量mv0e0是当前块的运动矢量集合在(xe x,ye y)位置的4
×
4子块的第一运动矢量。亮度预测样本矩阵 predmatrixl0中的元素predmatrixl0[x][y]的值是参考图像队列0中参考索引为refidxl0的1/16精度亮度样本矩阵中位置为 (((xe x)《《4) mv0e0_x,(ye y)《《4) mv0e0_y)))的样本值,色度预测样本矩阵predmatrixl0中的元素predmatrixl0[x][y] 的值是参考图像队列0中参考索引为refidxl0的1/32精度色度样本矩阵中位置为(((xe 2
×
x)《《4) mvc_x,(ye 2
×
y) 《《4) mvc_y)))的样本值。其中,x1=((xe 2
×
x)》》3)《《3,y1=((ye 2
×
y)》》3)《《3,mv1e0是当前块的运动矢量集合在(x1,y1)位置的4
×
4单元的第一运动矢量,mv2e0是当前块的运动矢量集合在(x1 4,y1)位置的4
×
4单元的第一运动矢量,mv3e0是当前块的运动矢量集合在(x1,y1 4)位置的4
×
4单元的第一运动矢量,mv4e0是当前块的运动矢量集合在(x1 4,y1 4)位置的4
×
4单元的第一运动矢量。
[0264]
具体地,mvc_x和mvc_y可以通过以下方式确定:
[0265]
mvc_x=(mv1e0_x mv2e0_x mv3e0_x mv4e0_x 2)》》2
[0266]
mvc_y=(mv1e0_y mv2e0_y mv3e0_y mv4e0_y 2)》》2
[0267]
示例性的,在本技术中,假设当前块左上角样本在当前图像的亮度样本矩阵中的位置为(xe,ye),如果当前块的预测参考模式取值为0,即使用第一参考模式

pred_list0’,且子块尺寸标志的取值为1,即子块尺寸参数为8
×
8,那么目标运动矢量mv0e0是当前块的运动矢量集合在(xe x,ye y)位置的8
×
8单元的第一运动矢量。亮度预测样本矩阵predmatrixl0中的元素predmatrixl0[x][y]的值是参考图像队列0中参考索引为refidxl0的1/16精度亮度样本矩阵中位置为 (((xe x)《《4) mv0e0_x,(ye y)《《4) mv0e0_y)))的样本值,色度预测样本矩阵predmatrixl0中的元素predmatrixl0[x][y] 的值是参考图像队
列0中参考索引为refidxl0的1/32精度色度样本矩阵中位置为(((xe 2
×
x)《《4) mvc_x,(ye 2
×
y) 《《4) mvc_y)))的样本值。其中,mvc_x等于mv0e0_x,mvc_y等于mv0e0。
[0268]
示例性的,在本技术中,假设当前块左上角样本在当前图像的亮度样本矩阵中的位置为(xe,ye)。如果当前块的预测参考模式取值为1,即使用第二参考模式

pred_list1’,且子块尺寸标志的取值为0,即子块尺寸参数为4
×
4,那么目标运动矢量mv0e1是当前块的运动矢量集合在(xe x,ye y)位置的4
×
4单元的第一运动矢量。亮度预测样本矩阵 predmatrixl1中的元素predmatrixl1[x][y]的值是参考图像队列1中参考索引为refidxl1的1/16精度亮度样本矩阵中位置为 (((xe x)《《4) mv0e1_x,(ye y)《《4) mv0e1_y)))的样本值,色度预测样本矩阵predmatrixl1中的元素predmatrixl1[x][y] 的值是参考图像队列1中参考索引为refidxl1的1/32精度色度样本矩阵中位置为(((xe 2
×
x)《《4) mvc_x,(ye 2
×
y) 《《4) mvc_y)))的样本值。其中,x1=((xe 2
×
x)》》3)《《3,y1=((ye 2
×
y)》》3)《《3,mv1e1是mvarray第一运动矢量集合在(x1,y1)位置的4
×
4单元的第一运动矢量,mv2e1是mvarray第一运动矢量集合在(x1 4,y1)位置的 4
×
4单元的第一运动矢量,mv3e1是mvarray第一运动矢量集合在(x1,y1 4)位置的4
×
4单元的第一运动矢量,mv4e1 是mvarray第一运动矢量集合在(x1 4,y1 4)位置的4
×
4单元的第一运动矢量。
[0269]
具体地,mvc_x和mvc_y可以通过以下方式确定:
[0270]
mvc_x=(mv1e1_x mv2e1_x mv3e1_x mv4e1_x 2)》》2
[0271]
mvc_y=(mv1e1_y mv2e1_y mv3e1_y mv4e1_y 2)》》2
[0272]
示例性的,在本技术中,假设当前块左上角样本在当前图像的亮度样本矩阵中的位置为(xe,ye)。如果当前块的预测参考模式取值为1,即使用第二参考模式

pred_list1’,且子块尺寸标志的取值为1,即子块尺寸参数为8
×
8,那么目标运动矢量mv0e1是当前块的运动矢量集合在(xe x,ye y)位置的8
×
8单元的第一运动矢量。亮度预测样本矩阵 predmatrixl1中的元素predmatrixl1[x][y]的值是参考图像队列1中参考索引为refidxl1的1/16精度亮度样本矩阵中位置为 (((xe x)《《4) mv0e1_x,(ye y)《《4) mv0e1_y)))的样本值,色度预测样本矩阵predmatrixl1中的元素predmatrixl1[x][y] 的值是参考图像队列1中参考索引为refidxl1的1/32精度色度样本矩阵中位置为(((xe 2
×
x)《《4) mvc_x,(ye 2
×
y) 《《4) mvc_y)))的样本值。其中mvc_x等于mv0e1_x,mvc_y等于mv0e1。
[0273]
示例性的,在本技术中,假设当前块左上角样本在当前图像的亮度样本矩阵中的位置为(xe,ye)。如果当前块的预测参考模式取值为2,即使用第三参考模式

pred_list01’,那么目标运动矢量mv0e0是当前块的运动矢量集合在(xe x, ye y)位置的8
×
8单元的第一运动矢量,目标运动矢量mv0e1是当前块的运动矢量集合在(x,y)位置的8
×
8单元的第一运动矢量。亮度预测样本矩阵predmatrixl0中的元素predmatrixl0[x][y]的值是参考图像队列0中参考索引为refidxl0的1/16 精度亮度样本矩阵中位置为(((xe x)《《4) mv0e0_x,(ye y)《《4) mv0e0_y)))的样本值,色度预测样本矩阵 predmatrixl0中的元素predmatrixl0[x][y]的值是参考图像队列0中参考索引为refidxl0的1/32精度色度样本矩阵中位置为 (((xe 2
×
x)《《4) mvc0_x,(ye 2
×
y)《《4) mvc0_y)))的样本值,亮度预测样本矩阵predmatrixl1中的元素 predmatrixl1[x][y]的值是参考图像队列1中参考索引为refidxl1的1/16精度亮度样本矩阵中位置为((((xe x)《《4) mv0e1_x,(ye y)《《4) mv0e1_y))))的样本值,色度预测样本矩阵predmatrixl1中的元素predmatrixl1[x][y]的
值是参考图像队列1中参考索引为refidxl1的1/32精度色度样本矩阵中位置为(((xe 2
×
x)《《4) mvc1_x,(ye 2
×
y) 《《4) mvc1_y)))的样本值。其中mvc0_x等于mv0e0_x,mvc0_y等于mv0e0_y,mvc1_x等于mv0e1_x,mvc1_y 等于mv0e1_y。
[0274]
需要说明的是,在申请的实施例中,样本矩阵中的亮度样本矩阵可以为1/16精度亮度样本矩阵,样本矩阵中的色度样本矩阵可以为1/32精度色度样本矩阵。
[0275]
可以理解的是,在本技术的实施例中,对于不同的预测参考模式,解码器通过解析码流所获取的参考图像队列和参考索引是不相同的。
[0276]
进一步地,在本技术的实施例中,解码器确定样本矩阵时,可以先获取亮度插值滤波器系数和色度插值滤波器系数;然后可以基于亮度插值滤波器系数确定亮度样本矩阵,同时,可以基于色度插值滤波器系数确定色度样本矩阵。
[0277]
示例性的,在本技术中,解码器在确定亮度样本矩阵时,获取的亮度插值滤波器系数如上述表1所示,然后按照像素位置和样本位置,计算获得亮度样本矩阵。
[0278]
具体地,样本位置a
x,0
(x=1~15)由水平方向上距离插值点最近得8个整数值滤波得到,预测值的获取方式如下:
[0279]ax,0
=clip1((fl[x][0]
×
a-3,0
fl[x][1]
×
a-2,0
fl[x][2]
×
a-1,0
fl[x][3]
×a0,0
fl[x][4]
×a1,0
fl[x][5]
×a2,0
fl[x][6]
ꢀ×a3,0
fl[x][7]
×a4,0
32)》》6)。
[0280]
具体地,样本位置a
0,y
(y=1~15)由垂直方向上距离插值点最近得8个整数值滤波得到,预测值的获取方式如下:
[0281]a0,y
=clip1((fl[y][0]
×a0,-3
fl[y][1]
×
a-2,0
fl[y][2]
×
a-1,0
fl[y][3]
×a0,0
fl[y][4]
×a1,0
fl[y][5]
×a2,0
fl[y][6]
×a3,0
fl[y][7]
×
a-4,0
32)》》6)。
[0282]
具体地,样本位置a
x,y
(x=1~15,y=1~15)的预测值的获取方式如下:
[0283]ax,y
=clip1((fl[y][0]
×
a'
x,y-3
fl[y][1]
×
a'
x,y-2
fl[y][2]
×
a'x,y-1
fl[y][3]
×
a'x,y
fl[y][4]
×
a'x,y 1
fl[y][5]
×
a'x,y
2 fl[y][6]
×
a'x,y 3
fl[y][7]
×
a'x,y 4
(1《《(19-bitdepth)))》》(20-bitdepth))。
[0284]
其中:
[0285]
a'
x,y
=(fl[x][0]
×
a-3,y
fl[x][1]
×
a-2,y
fl[x][2]
×
a-1,y
fl[x][3]
×a0,y
fl[x][4]
×a1,y
fl[x][5]
×a2,y
fl[x][6]
×a3,y
fl[x][7]
×a4,y
((1《《(bitdepth-8))》》1))》》(bitdepth-8)。
[0286]
示例性的,在本技术中,解码器在确定色度样本矩阵时,可以先解析码流获得色度插值滤波器系数如上述表2所示,然后按照像素位置和样本位置,计算获得色度样本矩阵。
[0287]
具体地,对于dx等于0或dy等于0的分像素点,可直接用色度整像素插值得到,对于dx不等于0且dy不等于0的点,使用整像素行(dy等于0)上的分像素进行计算:
[0288]
if(dx==0){
[0289]ax,y
(0,dy)=clip3(0,(1《《bitdepth)-1,(fc[dy][0]
×ax,y-1 fc[dy][1]
×ax,y
fc[dy][2]
×ax,y
1 fc[dy][3]
×ax,y
2 32)》》6)
[0290]
}
[0291]
else if(dy==0){
[0292]ax,y
(dx,0)=clip3(0,(1《《bitdepth)-1,(fc[dx][0]
×ax-1,y
fc[dx][1]
×ax,y
fc[dx][2]
×ax 1,y
fc[dx][3]
×ax 2,y 32
)》》6)
[0293]
}
[0294]
else{
[0295]ax,y
(dx,dy)=clip3(0,(1《《bitdepth)-1,(c[dy][0]
×
a'
x,y-1
(dx,0) c[dy][1]
×
a'
x,y
(dx,0) c[dy][2]
×
a'
x,y
1 (dx,0) c[dy][3]
×
a'
x,y
2(dx,0) (1《《(19-bitdepth)))》》(20-bitdepth))
[0296]
}
[0297]
其中,a'
x,y
(dx,0)是整像素行上的分像素的临时值,定义为:a'
x,y
(dx,0)=(fc[dx][0]
×ax-1,y
fc[dx][1]
×ax,y
fc[dx][2]
×ax 1,y
fc[dx][3]
×ax 2,y
((1《《(bitdepth-8))》》1))》》(bitdepth-8)。
[0298]
进一步地,在本技术的实施例中,解码器在基于像素位置与子块之间的第一运动矢量偏差时,可以先解析码流,获取二次预测参数;如果二次预测参数指示使用二次预测,那么解码器可以基于值变量确定子块与每一个像素位置之间的第一运动矢量偏差。
[0299]
具体地,在本技术的实施例中,解码器在基于差值变量确定子块与每一个像素位置之间的第一运动矢量偏差时,可以按照上述步骤302所提出的方法,根据控制点运动矢量组、控制点模式以及当前块的尺寸参数,确定出dhorx、dverx、dhory 和dvery这4个差值变量,然后再利用差值变量进一步确定出子块中的每一个像素位置所对应的第一运动矢量偏差。
[0300]
示例性的,在本技术中,width和height分别为解码器获取的当前块的宽度和高度,利用子块尺寸参数所确定出子块的宽度subwidth和高度subheight。假设(i,j)为子块内部的任意像素点的坐标,其中,i的取值范围是0~(subwidth-1), j的取值范围是0~(subheight-1),那么,可以通过以下方法计算4不同类型的子块的内部每个像素(i,j)位置的第一运动矢量偏差:
[0301]
如果子块是当前块的左上角的控制点a,那么(i,j)像素的第一运动矢量偏差dmva[i][j]:
[0302]
dmva[i][j][0]=dhorx
×
i dverx
×j[0303]
dmva[i][j][1]=dhory
×
i dvery
×
j;
[0304]
如果子块是当前块的右上角的控制点b,那么(i,j)像素的第一运动矢量偏差dmvb[i][j]:
[0305]
dmvb[i][j][0]=dhorx
×
(i-subwidth) dverx
×j[0306]
dmvb[i][j][1]=dhory
×
(i-subwidth) dvery
×
j;
[0307]
如果子块是当前块的左下角的控制点c,控制点运动矢量组可以为包括3个运动矢量的运动矢量组,那么(i,j)像素的第一运动矢量偏差dmvc[i][j]:
[0308]
dmvc[i][j][0]=dhorx
×
i dverx
×
(j-subheight)
[0309]
dmvc[i][j][1]=dhory
×
i dvery
×
(j-subheight);
[0310]
否则,(i,j)像素的第一运动矢量偏差dmvn[i][j]:
[0311]
dmvn[i][j][0]=dhorx
×
(i

(subwidth》》1)) dverx
×
(j

(subheight》》1))
[0312]
dmvn[i][j][1]=dhory
×
(i

(subwidth》》1)) dvery
×
(j

(subheight》》1))。
[0313]
其中,dmvx[i][j][0]表示第一运动矢量偏差在水平分量的偏差值,dmvx[i][j][1]表示第一运动矢量偏差在垂直分量的偏差值。x为a,b,c或n。
[0314]
可以理解的是,在本技术的实施例中,解码器在基于差值变量确定子块与每一个像素位置之间的第一运动矢量偏差之后,便可以利用子块内的全部像素位置对应的全部第一运动矢量偏差,构建出该子块对应的运动矢量偏差矩阵。可见,运动矢量偏差矩阵中包括有子块与任意一个内部的像素点之间的运动矢量偏差,即第一运动矢量偏差。
[0315]
进一步地,在本技术的实施例中,如果解码器解析码流获得的二次预测参数指示不使用二次预测,那么,解码器可以选择直接将上述步骤303a中所获得的当前块的子块的第一预测值作为子块的第二预测值,而不再进行下述步骤304和步骤305 的处理。
[0316]
具体地,在本本技术的实施例中,如果二次预测参数指示不使用二次预测,那么解码器可以利用预测样本矩阵确定出第二预测值。其中,预测样本矩阵包括多个子块的第一预测值,解码器可以将像素位置所在的子块的第一预测值确定为自身的第二预测值。
[0317]
示例性的,在本技术中,如果当前块的预测参考模式取值为0或1,即使用第一参考模式

pred_list0’,或使用第二参考模式

pred_list1’,那么可以直接从包括有一个亮度预测样本矩阵和两个色度预测样本矩阵的预测样本矩阵中,选择像素位置所在的子块的第一预测值,并将该第一预测值确定为像素位置的帧间预测值,即第二预测值。
[0318]
示例性的,在本技术中,如果当前块的预测参考模式取值为2,即使用第三参考模式

pred_list01’,那么可以先对预测样本矩阵中所包括的2个亮度预测样本矩阵(2组共4个色度预测样本矩阵)进行均值运算,得到1个平均后的亮度预测样本(2个平均后的色度预测样本),最后便从这个平均后的亮度预测样本(2个平均后的色度预测样本)中,选择像素位置所在的子块的第一预测值,并将该第一预测值确定为像素位置的帧间预测值,即第二预测值。
[0319]
步骤304、根据第一运动矢量偏差确定每一个像素位置对应的中心位置和第二运动矢量偏差。
[0320]
在本技术的实施例中,解码器在基于第一运动矢量分别确定子块的第一预测值,和子块中的每一个像素位置与子块之间的第一运动矢量偏差之后,便可以根据第一运动矢量偏差每一个像素位置对应的中心位置和第二运动矢量偏差。
[0321]
需要说明的是,在本技术的实施例中,对于子块中的每一个像素位置的像素,在进行二次预测或prof处理时,如果滤波器使用的默认的中心位置与子块之间的运动矢量偏差较大,那么获得的预测结果就可能存在较大的误差,因此,解码器在确定出每一个像素位置与子块之间的第一运动矢量偏差之后,可以先对每一个像素位置是否适合作为某个像素二次预测或 prof处理时所使用的滤波器的中心位置进行确认,如果不适合,还可以重新进行中心位置的调整。
[0322]
可以理解的是,在本技术中,一个像素位置对应的中心位置和第二运动矢量偏差,可以为对该像素位置进行二次预测或 prof处理时所使用的滤波器的中心位置和运动矢量偏差。即中心位置和第二运动矢量偏差用于对该像素位置进行二次预测或prof处理。
[0323]
进一步地,在本技术的实施例中,解码器根据第一运动矢量偏差确定每一个像素位置对应的中心位置和第二运动矢量偏差的方法可以包括以下步骤:
[0324]
步骤304a、确定第一运动矢量偏差的水平偏差和垂直偏差;
[0325]
步骤304b、根据水平偏差的第一绝对值、垂直偏差的第二绝对值以及预设偏差阈值,确定中心位置和第二运动矢量偏差。
[0326]
在本技术的实施例中,解码器可以先去确定出第一运动矢量偏差在不同方向上的偏差值,即确定出第一运动矢量偏差对应的水平偏差和垂直偏差。接着,解码器可以进一步计算水平偏差的绝对值,即第一绝对值,以及垂直偏差的绝对值,即第二绝对值。最后,解码器可以根据该第一绝对值、第二绝对值以及预设偏差阈值,进一步确定出进行二次预测或prof处理时所使用的中心位置和第二运动矢量偏差。
[0327]
需要说明的是,在申请的实施例中,解码器可以将水平偏差的第一绝对值和垂直偏差的第二绝对值分别与预设偏差阈值进行比较,从而可以根据比较结果进行中心位置和第二运动矢量偏差的确定。其中,预设偏差阈值可以为预先设置的、用于判断是否进行中心位置和运动矢量偏差的调整。
[0328]
示例性的,在本技术中,预设偏差阈值可以以像素为单元,具体地,预设偏差阈值可以为k个像素;其中,k大于0.5 且小于或者等于1。也就是说,可以预先将预设偏差阈值设置为二分之一个像素、四分之三个像素或者一个像素。
[0329]
进一步都,在本技术的实施例中,解码器在根据水平偏差、垂直偏差以及预设偏差阈值,确定中心位置和第二运动矢量偏差时,如果第一绝对值和第二绝对值均小于预设偏差阈值,那么可以将第一运动矢量偏差确定为第二运动矢量偏差,将每一个像素位置确定为中心位置。
[0330]
可以理解的是,在申请的实施例中,解码器在将水平偏差的第一绝对值和垂直偏差的第二绝对值分别与预设偏差阈值进行比较之后,如果第一绝对值和第二绝对值均小于预设偏差,便可以认为像素位置与子块之间的矢量偏差较小,使用该像素位置作为滤波器的中心位置进行二次预测或prof处理所获得的预测结果比较准确,因此,可以直接将该像素位置对应的第一运动矢量偏差确定为用于进行二次预测或prof处理的第二运动矢量偏差,同时,可以直接将该像素位置确定为进行二次预测或prof处理的滤波器所使用的中心位置。
[0331]
进一步都,在本技术的实施例中,解码器在根据水平偏差、垂直偏差以及预设偏差阈值,确定中心位置和第二运动矢量偏差时,如果第一绝对值大于或者等于预设偏差阈值,且第二绝对值小于预设偏差阈值,那么可以根据水平偏差确定第一调整方向;然后可以根据第一调整方向,确定中心位置和第二运动矢量偏差。
[0332]
需要说明的是,在本技术的实施例中,第一调整方向用于对第一运动矢量在水平方向上进行调整,因此,第一调整方向包括左侧和右侧。
[0333]
可以理解的是,在申请的实施例中,解码器在将水平偏差的第一绝对值和垂直偏差的第二绝对值分别与预设偏差阈值进行比较之后,如果第一绝对值大于或者等于预设偏差阈值,且第二绝对值小于预设偏差阈值,便可以认为像素位置与子块之间在水平方向上的运动矢量偏差较大,如果使用该像素作为滤波器的中心位置进行二次预测或prof处理所获得的预测结果可能存在误差,因此,需要进一步按照水平偏差确定出第一调整方向,然后再根据第一调整方向进行调整,最终便可以确定出进行二次预测或prof处理时所使用的中心位置和第二运动矢量偏差。
[0334]
示例性的,在本技术中,当像素位置的第一运动矢量偏差为(0.75,0),预设偏差阈值为1/2像素时,第一绝对值为 0.75,第二绝对值为0,可见,第一绝对值大于预设偏差阈值,第二绝对值小于预设偏差阈值,即该像素位置在水平方向上的运动矢量偏差较大,且基
于对应的水平偏差0.75可以确定其更靠近右侧,因此,可以确定第一调整方向为右侧。
[0335]
示例性的,在本技术中,当像素位置的第一运动矢量偏差为(-0.75,0),预设偏差阈值为1/2像素时,第一绝对值为 0.75,第二绝对值为0,可见,第一绝对值大于预设偏差阈值,第二绝对值小于预设偏差阈值,即该像素位置在水平方向上的运动矢量偏差较大,且基于对应的水平偏差-0.75可以确定其更靠近左侧,因此,可以确定第一调整方向为左侧。
[0336]
进一步地,在本技术的实施例中,解码器在根据第一调整方向,确定中心位置和第二运动矢量偏差时,如果第一调整方向为左侧,那么可以将该任一像素位置的相邻左侧像素位置作为中心位置,然后,可以将第一运动矢量偏差加(1,0),从而可以获得对应的第二运动矢量偏差。
[0337]
示例性的,在本技术中,当像素位置的第一运动矢量偏差为(-0.75,0),预设偏差阈值为1/2像素时,确定第一调整方向为左侧,那么可以将与该像素位置相邻的、左侧的像素位置作为滤波器使用的中心位置,然后,便可以将对应的第一运动矢量偏差(-0.75,0)加(1,0),最终获得的第二运动矢量偏差为(0.25,0)。
[0338]
进一步地,在本技术的实施例中,解码器在根据第一调整方向,确定中心位置和第二运动矢量偏差,如果第一调整方向为右侧,那么可以将任一像素位置的相邻右侧像素位置作为中心位置,然后,可以将第一运动矢量偏差减(1,0),从而可以获得第二运动矢量偏差。
[0339]
示例性的,在本技术中,当像素位置的第一运动矢量偏差为(0.75,0),预设偏差阈值为1/2像素时,确定第一调整方向为右侧,那么可以将与该像素位置相邻的、右侧的像素位置作为滤波器使用的中心位置,然后,便可以将对应的第一运动矢量偏差(0.75,0)减(1,0),最终获得的第二运动矢量偏差为(-0.25,0)。
[0340]
进一步都,在本技术的实施例中,解码器在根据水平偏差、垂直偏差以及预设偏差阈值,确定中心位置和第二运动矢量偏差时,如果第二绝对值大于或者等于预设偏差阈值,且第一绝对值小于预设偏差阈值,那么可以根据垂直偏差确定第二调整方向;然后可以根据第二调整方向,确定中心位置和第二运动矢量偏差。
[0341]
需要说明的是,在本技术的实施例中,第二调整方向用于对第一运动矢量在垂直方向上进行调整,因此,第二调整方向包括上侧和下侧。
[0342]
可以理解的是,在申请的实施例中,解码器在将水平偏差的第一绝对值和垂直偏差的第二绝对值分别与预设偏差阈值进行比较之后,如果第二绝对值大于或者等于预设偏差阈值,且第一绝对值小于预设偏差阈值,便可以认为像素位置与子块之间在垂直方向上的运动矢量偏差较大,如果使用该像素作为滤波器的中心位置进行二次预测或prof处理所获得的预测结果可能存在误差,因此,需要进一步按照垂直偏差确定出第二调整方向,然后再根据第二调整方向进行调整,最终便可以确定出进行二次预测或prof处理时所使用的中心位置和第二运动矢量偏差。
[0343]
示例性的,在本技术中,当像素位置的第一运动矢量偏差为(0,0.75),预设偏差阈值为1/2像素时,第二绝对值为0.75,第一绝对值为0,可见,第二绝对值大于预设偏差阈值,第一绝对值小于预设偏差阈值,即该像素位置在垂直方向上的运动矢量偏差较大,且基于对应的垂直偏差0.75可以确定其更靠近下侧,因此,可以确定第二调整方向为下侧。
[0344]
示例性的,在本技术中,当像素位置的第一运动矢量偏差为(0,-0.75),预设偏差
阈值为1/2像素时,第二绝对值为 0.75,第一绝对值为0,可见,第二绝对值大于预设偏差阈值,第一绝对值小于预设偏差阈值,即该像素位置在垂直方向上的运动矢量偏差较大,且基于对应的垂直偏差-0.75可以确定其更靠近上侧,因此,可以确定第二调整方向为上侧。
[0345]
进一步地,在本技术的实施例中,解码器在根据第二调整方向,确定中心位置和第二运动矢量偏差时,如果第二调整方向为上侧,那么可以将该任一像素位置的相邻上侧像素位置作为中心位置,然后,可以将第一运动矢量偏差加(0,1),从而可以获得对应的第二运动矢量偏差。
[0346]
示例性的,在本技术中,当像素位置的第一运动矢量偏差为(0,-0.75),预设偏差阈值为1/2像素时,确定第二调整方向为上侧,那么可以将与该像素位置相邻的、上侧的像素位置作为滤波器使用的中心位置,然后,便可以将对应的第一运动矢量偏差(0,-0.75)加(0,1),最终获得的第二运动矢量偏差为(0,0.25)。
[0347]
进一步地,在本技术的实施例中,解码器在根据第二调整方向,确定中心位置和第二运动矢量偏差,如果第二调整方向为下侧,那么可以将任一像素位置的相邻下侧像素位置作为中心位置,然后,可以将第一运动矢量偏差减(0,1),从而可以获得第二运动矢量偏差。
[0348]
示例性的,在本技术中,当像素位置的第一运动矢量偏差为(0,0.75),预设偏差阈值为1/2像素时,确定第二调整方向为下侧,那么可以将与该像素位置相邻的、下侧的像素位置作为滤波器使用的中心位置,然后,便可以将对应的第一运动矢量偏差(0,0.75)减(0,1),最终获得的第二运动矢量偏差为(0,0.25)。
[0349]
进一步都,在本技术的实施例中,解码器在根据水平偏差、垂直偏差以及预设偏差阈值,确定中心位置和第二运动矢量偏差时,如果第一绝对值和第二绝对值均大于或者等于预设偏差阈值,那么可以根据水平偏差和垂直偏差确定第三调整方向;然后可以根据第三调整方向,确定中心位置和第二运动矢量偏差。
[0350]
需要说明的是,在本技术的实施例中,第三调整方向用于对第一运动矢量在水平方向和垂直方向上同时进行调整,因此,第三调整方向包括右上侧、右下侧、左上侧以及左下侧。
[0351]
可以理解的是,在申请的实施例中,解码器在将水平偏差的第一绝对值和垂直偏差的第二绝对值分别与预设偏差阈值进行比较之后,如果第一绝对值和第二绝对值都大于或者等于预设偏差阈值,便可以认为像素位置与子块之间在水平方向和垂直方向上的运动矢量偏差均较大,如果使用该像素作为滤波器的中心位置进行二次预测或prof处理所获得的预测结果可能存在误差,因此,需要进一步按照水平偏差和垂直偏差确定出第三调整方向,然后再根据第三调整方向进行调整,最终便可以确定出进行二次预测或prof处理时所使用的中心位置和第二运动矢量偏差。
[0352]
示例性的,在本技术中,当像素位置的第一运动矢量偏差为(0.75,0.75),预设偏差阈值为1/2像素时,第一绝对值为0.75,第二绝对值为0.75,可见,第一绝对值和第二绝对值均大于预设偏差阈值,即该像素位置在水平方向和垂直方向上的运动矢量偏差较大,且基于对应的水平偏差0.75可以确定其更靠近右侧,同时,基于对应的垂直偏差0.75可以确定其更靠近下侧,因此,可以确定第三调整方向为右下侧。
[0353]
示例性的,在本技术中,当像素位置的第一运动矢量偏差为(-0.75,-0.75),预设
偏差阈值为1/2像素时,第一绝对值为-0.75,第二绝对值为-0.75,可见,第一绝对值和第二绝对值均大于预设偏差阈值,即该像素位置在水平方向和垂直方向上的运动矢量偏差较大,且基于对应的水平偏差-0.75可以确定其更靠近左侧,同时,基于对应的垂直偏差-0.75可以确定其更靠近上侧,因此,可以确定第三调整方向为左上侧。
[0354]
进一步地,在本技术的实施例中,解码器在根据第三调整方向,确定中心位置和第二运动矢量偏差时,如果第三调整方向为左上侧,那么可以将该任一像素位置的相邻左上侧像素位置作为中心位置,然后,可以将第一运动矢量偏差加(1,1),从而可以获得对应的第二运动矢量偏差。
[0355]
示例性的,在本技术中,当像素位置的第一运动矢量偏差为(-0.75,-0.75),预设偏差阈值为1/2像素时,确定第三调整方向为左上侧,那么可以将与该像素位置相邻的、左上侧的像素位置作为滤波器使用的中心位置,然后,便可以将对应的第一运动矢量偏差(-0.75,-0.75)加(1,1),最终获得的第二运动矢量偏差为(0.25,0.25)。
[0356]
进一步地,在本技术的实施例中,解码器在根据第三调整方向,确定中心位置和第二运动矢量偏差,如果第三调整方向为右下侧,那么可以将任一像素位置的相邻右下侧像素位置作为中心位置,然后,可以将第一运动矢量偏差减(1,1),从而可以获得第二运动矢量偏差。
[0357]
示例性的,在本技术中,当像素位置的第一运动矢量偏差为(0.75,0.75),预设偏差阈值为1/2像素时,确定第三调整方向为右下侧,那么可以将与该像素位置相邻的、右下侧的像素位置作为滤波器使用的中心位置,然后,便可以将对应的第一运动矢量偏差(0.75,0.75)减(1,1),最终获得的第二运动矢量偏差为(-0.25,-0.25)。
[0358]
可以理解的是,在本技术的实施例中,第二运动矢量偏差在水平方向和垂直方向上的偏差值均小于预设偏差阈值。
[0359]
也就是说,在本技术中,解码器在确定出子块中的每一个像素位置的运动矢量与子块的运动矢量的偏差之后,且在对基于子块的预测的预测块进行滤波之前,可以先进行中心位置和第二运动矢量偏差的确定,其中,中心位置和第二运动矢量用于进行二次预测或prof处理。
[0360]
具体地,在本技术中,对于子块中的每一个像素位置,可以先确定其与子块之间的第一运动矢量偏差的大小,其中包括第一运动矢量偏差在水平方向和垂直方向上的水平偏差和垂直偏差。如果某个像素位置的运动矢量偏差的水平方向和/或垂直方向的绝对值大于预设偏差阈值,那么可以确定该像素位置对应的滤波器的中心位置不再是该像素位置本身,而需要进一步对中心位置和第二运动矢量偏差进行确定。
[0361]
示例性的,在本技术中,假设前像素位置为current,相应地,当前像素位置在水平方向左侧的像素位置为left,则left为current的坐标加上(-1,0);当前像素位置在水平方向右侧的像素位置为right,则right为current 的坐标加上(1,0);当前像素位置在垂直方向上侧的像素位置为up,则up为current的坐标加上(0,-1);当前像素位置在垂直方向下侧的像素位置为down,则down为current的坐标加上(0,1);当前像素位置左上侧的像素位置为upleft,则upleft为current的坐标加上(-1,-1);当前像素位置右上侧的像素位置为upright,则upright 为current的坐标加上(1,-1);当前像素位置左下侧的像素位置为downleft,则downleft为current的坐标加上(-1,1);当前像素位置右下侧的像素位置为
downright,则downright为current的坐标加上(1,1)。
[0362]
进一步地,在本技术的实施例中,在对子块中的一个像素位置进行二次预测或prof处理之前,如果确定该像素位置与子块之间的第一运动矢量偏差在水平方向和\或垂直方向的偏差分量的绝对值大于或者等于预设偏差阈值(如1/2像素、3/4 像素或1像素),那么便需要对二次预测或prof处理所使用的起始点进行调整,即二次预测或prof处理所使用的二维滤波器的中心位置进行调整。
[0363]
可以理解的是,在本技术中,在对中心位置和运动矢量偏差进行调整时,可以在当前块中选择该与像素位置在水平方向和垂直方向上的运动矢量偏差均小于或者等于预设偏差阈值的另一个像素位置。
[0364]
示例性的,在本技术中,如果子块中的当前像素位置的运动矢量与子块的运动矢量的第一运动矢量偏差是(0.75,0),预设偏差阈值为1/2像素,那么可以使用当前像素位置current的右侧的像素位置,即right作为当前像素位置的二次预测的起始位置,即二维滤波器的中心位置。相应地,在调整了二次预测的起始位置之后,对应地需要调整第一运动矢量偏差,具体地,可以按照当前像素位置的运动矢量与中心位置的运动矢量之间的偏差确定第二运动矢量偏差。例如,由于起始位置由current调整到了right,第一运动矢量偏差需要减去(1,0),那么调整后的第二运动矢量偏差是(-0.25,0)。
[0365]
示例性的,在本技术中,如果子块中的当前像素位置的运动矢量与子块的运动矢量的第一运动矢量偏差是(0.75,0.75),预设偏差阈值为1/2像素,那么可以使用当前像素位置current的右下侧的像素位置,即downright作为当前像素位置的prof处理的起始位置,即一维滤波器的中心位置。相应地,在调整了二次预测的起始位置之后,对应地需要调整第一运动矢量偏差,具体地,可以按照当前像素位置的运动矢量与中心位置的运动矢量之间的偏差确定第二运动矢量偏差。例如,由于起始位置由current调整到了downright,第一运动矢量偏差需要减去(1,1),那么调整后的第二运动矢量偏差是(-0.25,-0.25)。
[0366]
基于上述图9,图13为中心位置的示意图三,如图13所示,dmv_x0和dmv_y0都大于二分之一像素,可以看出离圆形最近的是坐标为(2,2)的正方形2的像素位置,如果把基准位置也就是滤波器的中心位置设置在这个位置上,可以认为获得的预测结果比原来的更精确。调整后的运动矢量偏差为(dmv_x,dmv_y),dmv_x的绝对值比dmv_x0要小,dmv_y 的绝对值比dmv_y0要小。图中虚线框表示调整前的滤波器使用的像素位置,图中的实线框表示调整后的滤波器使用的像素位置。
[0367]
在本技术的实施例中,进一步地,图14为帧间预测方法的实现流程示意图二,如图14所示,在根据第一运动矢量偏差确定每一个像素位置对应的中心位置和第二运动矢量偏差之前,即步骤304之前,解码器进行帧间预测的方法还可以包括以下步骤:
[0368]
步骤306、按照预设偏差范围对第一运动矢量偏差进行限制处理;其中,预设偏差范围包括偏差下限值和偏差上限值。
[0369]
在本技术的实施例中,解码器在根据第一运动矢量偏差确定每一个像素位置对应的中心位置和第二运动矢量偏差之前,可以先对第一运动矢量进行限制。具体地,解码器可以按照预设偏差范围对第一运动矢量偏差进行限制处理;其中,预设偏差范围包括偏差下限值和偏差上限值。
[0370]
进一步地,在本技术的实施例中,解码器按照预设偏差范围对第一运动矢量偏差
进行限制处理时,如果水平偏差和\或垂直偏差小于偏差下限值,那么可以将水平偏差和\或垂直偏差设置为偏差下限值;如果水平偏差和\或垂直偏差大于偏差上限值,那么可以将水平偏差和\或垂直偏差设置为偏差上限值。
[0371]
需要说明的是,在本技术中,解码器既可以不对第一运动矢量偏差进行限制,即不进行步骤306,而是直接根据第一运动矢量偏差将中心位置调整到任何合适的像素位置。也可以先按照步骤306执行对第一运动矢量偏差的限制处理,或者是对可调整的范围及运动矢量偏差进行限制。
[0372]
进一步地,在本技术的实施例中,预设偏差范围可以由偏差下限值min和偏差上限值max构成,即预设偏差范围可以表示为(min,max),在对第一运动矢量偏差进行限制处理时,如果第一运动矢量偏差的水平方向和\或垂直方向的偏差值小于偏差下限值min,那么可以直接将该偏差值设为min;如果第一运动矢量偏差的水平方向和\或垂直方向的偏差值大于 max,那么可以直接将该偏差值设为max。
[0373]
示例性的,在本技术中,假设上限值max为1,即限制第一运动矢量偏差为1个像素,如果第一运动矢量偏差的水平方向和\或垂直方向的偏差值的绝对值(第一绝对值和\或第二绝对值)大于1,则将第一运动矢量偏差的水平方向和\或垂直方向的偏差值的绝对值设置为1个像素。
[0374]
在本技术的实施例中,进一步地,图15为帧间预测方法的实现流程示意图三,如图15所示,在根据第一运动矢量偏差确定每一个像素位置对应的中心位置和第二运动矢量偏差之后,即步骤304之后,解码器进行帧间预测的方法还可以包括以下步骤:
[0375]
步骤307、若中心位置不属于当前块,则按照当前块中的像素位置重新确定中心位置。
[0376]
在本技术的实施例中,解码器在根据第一运动矢量偏差确定每一个像素位置对应的中心位置和第二运动矢量偏差之后,可以先对中心位置是否超出了当前块进行确定,如果中心位置超出了当前块的范围,即中心位置不属于当前块,那么解码器便需要按照当前块中的像素位置重新确定中心位置。
[0377]
在本技术的实施例中,进一步地,图16为帧间预测方法的实现流程示意图四,如图16所示,在根据第一运动矢量偏差确定每一个像素位置对应的中心位置和第二运动矢量偏差之后,即步骤304之后,解码器进行帧间预测的方法还可以包括以下步骤:
[0378]
步骤308、若中心位置不属于当前块,则直接将每一个像素位置确定为每一个像素位置对应的中心位置。
[0379]
在本技术的实施例中,解码器在根据第一运动矢量偏差确定每一个像素位置对应的中心位置和第二运动矢量偏差之后,可以先对中心位置是否超出了当前块进行确定,如果中心位置超出了当前块的范围,即中心位置不属于当前块,那么解码器可以直接将对应的、原始的像素位置确定为中心位置。即基于子块中的每一个像素位置对应的第一运动矢量偏差所确定的中心位置如果超出了当前块的范围,那么解码器可以选择任然将该每一个像素位置作为中心位置。
[0380]
也就是说,在本技术的实施例中,对于调整后的二次预测的起始位置,即基于第一运动矢量偏差所确定的滤波器使用的中心位置,解码器可以限制该中心位置不超过当前块的范围,即不会超过当前块中的所有像素位置在调整前的二次预测的起始位置的范围。
[0381]
步骤305、基于第一预测值,按照中心位置和第二运动矢量偏差进行二次预测或prof处理,确定子块的第二预测值,将第二预测值确定为子块的帧间预测值。
[0382]
在本技术的实施例中,解码器在根据第一运动矢量偏差确定每一个像素位置对应的中心位置和第二运动矢量偏差之后,便可以基于第一预测值,按照中心位置和第二运动矢量偏差进行二次预测或prof处理,从而可以获得每一个像素位置的像素的预测值。
[0383]
进一步地,在本技术的实施例中,解码器在遍历子块中的每一个像素位置,获得每一个像素位置的像素的预测值之后,便可以根据每一个像素位置的像素的预测值确定出子块的第二预测值,从而可以将第二预测值确定为子块的帧间预测值。
[0384]
需要说明的是,在本技术的实施例中,由于中心位置和第二运动矢量偏差可以用于对子块中的每一个像素位置的像素点进行二次预测或prof处理,因此,在获得中心位置和第二运动矢量偏差以后,解码器可以基于第一预测值,利用中心位置和第二运动矢量偏差对每一个像素位置的像素点进行二次预测或prof处理,最终可以获得子块对应的第二预测值,从而便可以将第二预测值确定为子块的帧间预测值。
[0385]
进一步地,在本技术的实施例中,解码器基于第一预测值,按照中心位置和第二运动矢量偏差进行二次预测或prof 处理,确定子块的第二预测值,将第二预测值确定为子块的帧间预测值的方法可以包括以下步骤:
[0386]
步骤305a、解析码流,获取prof参数;
[0387]
步骤305b、当prof参数指示进行prof处理时,基于第一预测值确定中心位置对应的像素水平梯度和像素垂直梯度;
[0388]
步骤305c、根据像素水平梯度、像素垂直梯度以及第二运动矢量偏差,计算每一个像素位置对应的偏差值;
[0389]
步骤305d、基于第一预测值和偏差值,获得每一个像素位置的像素的预测值;
[0390]
步骤305e、利用每一个像素位置的像素的预测值,确定第二预测值。
[0391]
在本技术的实施例中,解码器可以先解析码流,获得prof参数,如果prof参数指示进行prof处理,那么解码器可以基于第一预测值确定中心位置对应的像素水平梯度和像素垂直梯度;其中,像素水平梯度即为中心位置对应的像素值与水平方向上的、相邻像素位置对应的像素值之间的梯度值;像素垂直梯度即为中心位置对应的像素值与垂直方向上的、相邻像素位置对应的像素值之间的梯度值。
[0392]
进一步地,在本技术的实施例中,解码器可以根据每一个像素位置对应的中心位置的像素水平梯度、像素垂直梯度以及第二运动矢量偏差,计算获得与每一个像素位置对应的偏差值。其中,该偏差值可以用于对每一个像素位置的像素值的预测值进行修正处理。
[0393]
需要说明的是,在本技术的实施例中,解码器可以进一步根据第一预测值和偏差值,获得任一个像素位置所对应的的修正后预测值,并在遍历当前子块中的每一个像素位置,获得每一个像素位置对应的修正后预测值之后,利用全部像素位置对应的修正后预测值确定出当前子块对应的第二预测值,从而确定出对应的帧间预测值。具体地,在本技术中,在完成基于子块的预测之后,将当前子块的第一预测值作为每一个像素位置的预测值,接着,将第一预测值与每一个像素位置对应的偏差值相加,即可以完成对每一个像素位置的预测值的修正处理,获得修正后预测值,从而可以进一步获得当前子块的第二预测值,并将第二预测值作为当前子块对应的帧间预测值。
[0394]
进一步地,在本技术的实施例中,解码器基于第一预测值,按照中心位置和第二运动矢量偏差进行二次预测或prof 处理,确定子块的第二预测值,将第二预测值确定为子块的帧间预测值的方法可以包括以下步骤:
[0395]
步骤305f、解析码流,获取二次预测参数;
[0396]
步骤305g、当二次预测参数指示使用二次预测时,根据第二运动矢量偏差确定二维滤波器的滤波系数;其中,二维滤波器用于按照预设形状进行二次预测处理;
[0397]
步骤305h、基于滤波系数和第一预测值,确定每一个像素位置的像素的预测值;
[0398]
步骤305i、利用每一个像素位置的像素的预测值,确定第二预测值。
[0399]
在本技术的实施例中,解码器可以先解析码流,获得二次预测参数,如果二次预测参数指示使用二次预测,那么解码器可以根据第二运动矢量偏差确定二维滤波器的滤波系数;其中,二维滤波器用于按照预设形状进行二次预测处理。
[0400]
需要说明的是,在本技术的实施例中,二维滤波器的滤波器系数是与目标像素位置所对应的第二运动矢量偏差相关的。也就是说,对于不同的目标像素位置,如果对应的第二运动矢量偏差不同,那么使用的二维滤波器的滤波系数也是不同的。
[0401]
可以理解的是,在本技术的实施例中,二维滤波器用于利用多个相邻的、构成预设形状的像素位置进行二次预测。其中,预设形状为矩形、菱形或任意一种对称形状。
[0402]
也就是说,在本技术的中,用于进行二次预测的二维滤波器是相邻的构成预设形状的点所构成的滤波器。相邻的构成预设形状的点可以包括多个点,例如由9个点构成。预设形状可以为对称形状,例如,预设形状可以包括矩形、菱形或其他任意一种对称形状。
[0403]
示例性的,在本技术中,二维滤波器是一个矩形的滤波器,具体地,二维滤波器是由9个相邻的构成矩形的像素位置组成的滤波器。在9个像素位置中,位于中心的像素位置是当前需要二次预测的像素的像素位置,即当前像素位置。
[0404]
进一步地,在本技术的实施例中,解码器在根据第二运动矢量偏差确定二维滤波器的滤波系数时,可以先解析码流,获取比例参数,然后可以根据比例参数和第二运动矢量偏差,确定像素位置对应的滤波器系数。
[0405]
需要说明的是,在本技术的实施例中,比例参数可以包括至少一个比例值,第二运动矢量偏差包括水平偏差和垂直偏差;其中,至少一个比例值均为非零实数。
[0406]
具体地,在本技术中,当二维滤波器利用9个相邻的、构成矩形的像素位置进行二次预测时,位于矩形的中心的像素位置为待预测位置,即当前像素位置,其他8个目标像素位置依次位于当前像素位置的左上、上、右上、右、右下、下、左下、左这8个方向。
[0407]
相应地,在本技术中,解码器可以基于至少一个比例值和待预测位置的第二运动矢量偏差,按照预设计算规则计算获得 9个相邻的像素位置对应的9个滤波器系数系数。
[0408]
需要说明的是,在本技术中,预设计算规则可以包括多种不同的计算方式,如加法运算、减法运算、乘法运动等。其中,对于不同的像素位置,可以使用不同的计算方式进行滤波器系数的计算。
[0409]
可以理解的是,在本技术中,解码器在按照预设计算规则中不同的计算方法计算获得多个像素位置对应的多个滤波器系数中,部分滤波器系数可以为第二运动矢量偏差的一次函数,即两者为线性关系,还可以为第二运动矢量偏差的二次函数或高次函数,即两者为非线性关系。
[0410]
也就是说,在本技术中,多个相邻的像素位置对应的多个滤波器系数中的任意一个滤波器系数,可以为第二运动矢量偏差的一次函数、二次函数或者高次函数。
[0411]
示例性的,在本技术中,假设像素位置的第二运动矢量偏差为(dmv_x,dmv_y),其中,如果目标像素位置的坐标为 (i,j),那么dmv_x可以表示为dmvx[i][j][0],即表示第二运动矢量偏差在水平分量的偏差值,dmv_y可以表示为 dmvx[i][j][1],即表示第二运动矢量偏差在垂直分量的偏差值。
[0412]
相应地,表3为基于第二运动矢量偏差(dmv_x,dmv_y)所获得的滤波器系数,如表3所示,对于二维滤波器,按照像素位置的第二运动矢量偏差(水平偏差为dmv_x,垂直偏差为dmv_y)和不同的比例参数,如m和n,可以获得9个相邻的像素位置对应的9个滤波器系数,其中,解码器可以直接将中心的当前像素位置的滤波器系数设置为1。
[0413]
表3
[0414]
像素位置滤波器系数左上(-dmv_x-dmv_y)
×
m左-dmv_x
×
n左下(-dmv_x dmv_y)
×
m上-dmv_y
×
n中心1下dmv_y
×
n右上(dmv_x-dmv_y)
×
m右dmv_x
×
n右下(dmv_x dmv_y)
×m[0415]
其中,比例参数m和n一般是小数或分数,一种可能的情况是m和n都是2的幂,如1/2,1/4,1/8等。这里的dmv_x, dmv_y都是其实际的大小,即dmv_x,dmv_y的1表示1个像素的距离,dmv_x,dmv_y是小数或者分数。
[0416]
需要说明的是,在本技术的实施例中,与现有的8抽头的滤波器相比,目前常见的8抽头的滤波器所对应的整像素位置和分像素位置的运动矢量在水平和垂直方向均为非负的,且大小均属于0像素到1像素之间,即dmv_x,dmv_y不可以为负的。而在本技术中,滤波器对应的整像素位置和分像素位置的运动矢量在水平和垂直方向都可以为负的,即dmv_x,dmv_y 可以为负的。
[0417]
示例性的,在本技术的实施例中,如果比例参数m为1/16,n为1/2,那么上述表3可以表示为下表4:
[0418]
表4
[0419]
像素位置滤波器系数左上(-dmv_x-dmv_y)/16左-dmv_x/2左下(-dmv_x dmv_y)/16上-dmv_y/2中心1下dmv_y/2
右上(dmv_x-dmv_y)/16右dmv_x/2右下(dmv_x dmv_y)/16
[0420]
可以理解的是,在本技术的实施例中,在视频编解码技术以及标准中,通常使用放大倍数以避免小数,浮点数运算,然后将计算的结果缩小合适的倍数以得到正确的结果。放大倍数时通常使用左移,缩小倍数时通常使用右移。因此,在通过二维滤波器进行二次预测时,在实际应用时会写成如下的形式:
[0421]
假设像素位置的第二运动矢量偏差为(dmv_x,dmv_y),经过左移shift1得到(dmv_x’,dmv_y’),基于上述表4,二维滤波器的系数可以表示为下表5:
[0422]
表5
[0423]
像素位置滤波器系数左上-dmv_x
’-
dmv_y’左-dmv_x
’×
8左下-dmv_x’ dmv_y’上-dmv_y
’×
8中心16《《shift1下dmv_y
’×
8右上dmv_x
’-
dmv_y’右dmv_x
×
8右下dmv_x’ dmv_y’[0424]
图17为二维滤波器的示意图一,如图17所示,以基于子块的预测的结果为二次预测的基础,浅色正方形为该滤波器的整像素位置,也就是基于子块的预测得到的位置。圆形是需要进行二次预测的分像素位置,即像素位置的位置,深色正方形是该分像素位置对应的整像素位置,插值得到这个分像素位置时需要如图所示的9个整像素位置。
[0425]
图18为二维滤波器的示意图二,如图18所示,以基于子块的预测的结果为二次预测的基础,浅色正方形为该滤波器的整像素位置,也就是基于子块的预测得到的位置。圆形是需要进行二次预测的分像素位置,即像素位置的位置,深色正方形是该分像素位置对应的整像素位置,插值得到这个分像素位置时需要如图所示的13个整像素位置。
[0426]
进一步地,在本技术的实施例中,解码器在根据第二运动矢量偏差确定出二维滤波器的滤波系数之后,便可以基于滤波系数和第一预测值,确定当前子块的第二预测值,从而可以实现对当前子块的二次预测。
[0427]
可以理解的是,在本技术的实施例中,解码器利用像素位置所对应的第二运动矢量偏差确定出滤波器系数,从而可以按照滤波器系数,通过二维滤波器对第一预测值进行修正,获得修正后的、当前子块的第二预测值。可见,第二预测值为基于第一预测值的修正值。
[0428]
进一步地,在本技术的实施例中,解码器在基于滤波系数和第一预测值,确定当前子块的第二预测值时,可以先对滤波器系数与第一预测值进行乘法运算,获得乘积结果,遍历当前子块中的全部像素位置之后,再对当前子块的全部像素位置的乘积结果进行加法运算,获得求和结果,最后可以对加法结果进行归一化处理,最终便可以获得当前子块修正后
的第二预测值。
[0429]
需要说明的是,在本技术的实施例中,在进行二次预测之前,一般情况下是将像素位置所在的当前子块的第一预测值作为该像素位置的修正前的预测值,因此,在通过二维滤波器进行滤波时,可以将滤波器系数与对应像素位置的预测值,即第一预测值相乘,并对每一个像素位置对应的乘积结果进行累加,然后归一化。
[0430]
可以理解的是,在本技术中,解码器可以通过多种方式进行归一化处理,例如,可以将滤波器系数与对应的像素位置的预测值相乘后累加的结果,右移4 shift1位。或者,还可以将滤波器系数与对应的像素位置的预测值相乘后累加的结果,再加上(1《《(3 shift1)),然后右移4 shift1位。
[0431]
可见,在本技术中,在获得当前子块内部的像素位置对应的第二运动矢量偏差之后,对每一个子块,以及每一个子块中的每一个像素位置,可以根据第二运动矢量偏差,基于当前子块的运动补偿的第一预测值,使用二维滤波器进行滤波,完成对当前子块的二次预测,得到新的第二预测值。
[0432]
进一步地,在本技术的实施例中,二维滤波器可以理解为利用多个相邻的、构成预设形状的像素位置进行二次预测。其中,预设形状可以为矩形、菱形或任意一种对称形状。
[0433]
具体地,在本技术的实施例中,二维滤波器在利用9个相邻的、构成矩形的像素位置进行二次预测时,可以先确定当前块的预测样本矩阵,和当前块的当前子块的运动矢量偏差矩阵;其中,运动矢量偏差矩阵包括全部像素位置对应的第二运动矢量偏差;然后基于9个相邻的、构成矩形的像素位置,利用预测样本矩阵和运动矢量偏差矩阵,确定当前块的二次预测后的样本矩阵。
[0434]
示例性的,在本技术中,如果当前块的宽度和高度分别是width和height,每个子块的宽度和高度分别是subwidth和 subheight。如图7所示,当前块的亮度预测样本矩阵的左上角样本所在的子块为a,右上角样本所在的子块为b,左下角样本所在的子块为c,其他位置所在子块为其它子块。
[0435]
对当前块中的每个子块,可以将子块的运动矢量偏差矩阵记为dmv,那么:
[0436]
1、如果子块是a,dmv等于dmva;
[0437]
2、如果子块是b,dmv等于dmvb;
[0438]
3、如果子块为c,且该当前子块的控制点运动矢量组mvaffine中有3个运动矢量,dmv等于dmvc;
[0439]
4、如果子块为a、b、c以外的其他子块,dmv等于dmvn。
[0440]
进一步地,假设(x,y)是当前子块左上角位置的坐标,(i,j)是亮度子块内部像素的坐标,i的取值范围是0~(subwidth-1), j的取值范围是0~(subheight-1),基于子块的预测样本矩阵为predmatrixsb,二次预测的预测样本矩阵为predmatrixs, dcenterx,dcentery为二次预测起始位置水平方向和竖直方向的偏移量矩阵,可以按照以下方法计算(x i,y j)的二次预测的预测样本predmatrixs[x i][y j]:
[0441]
dcenterx[i][j]=(dmv[i][j][0]《0?-1:1)*((abs(dmv[i][j][0]) (1《《10))/(1《《11))
[0442]
dcenterx[i][j]=clip3(-i,width-1-i)
[0443]
dcentery[i][j]=(dmv[i][j][1]《0?-1:1)*((abs(dmv[i][j][1]) (1《《10))/(1
《《11))
[0444]
dcentery[i][j]=clip3(-j,height-1-j)
[0445]
dmv[i][j][0]=dmv[i][j][0]

dcenterx*(1《《11)
[0446]
dmv[i][j][1]=dmv[i][j][1]

dcentery*(1《《11)
[0447]
predmatrixs[x i][y j]=
[0448]
(upleft(x i,y j)
×
(-dmv[i][j][0]-dmv[i][j][1])
[0449]
up(x i,y j)
×
((-dmv[i][j][1])《《3)
[0450]
upright(x i,y j)
×
(dmv[i][j][0]-dmv[i][j][1])
[0451]
left(x i,y j)
×
((-dmv[i][j][0])《《3)
[0452]
center(x i,y j)
×
(1《《15)
[0453]
right(x i,y j)
×
(dmv[i][j][0]《《3)
[0454]
downleft(x i,y j)
×
(-dmv[i][j][0] dmv[i][j][1])
[0455]
down(x i,y j)
×
(dmv[i][j][1]《《3)
[0456]
downright(x i,y j)
×
(dmv[i][j][0] dmv[i][j][1])
[0457]
(1《《14))》》15
[0458]
predmatrixs[x i][y j]=clip3(0,(1《《bitdepth)-1,predmatrixs[x i][y j])。
[0459]
其中,upleft(x i,y j)=predmatrixsb[max(0,x i dcenterx[i][j]-1)][max(0,y j dcentery[i][j]-1)]
[0460]
up(x i,y j)=predmatrixsb[x i dcenterx[i][j]][max(0,y j dcentery[i][j]-1)]
[0461]
upright(x i,y j)=predmatrixsb[min(width-1,x i dcenterx[i][j] 1)][max(0,y j dcentery[i][j]-1)]
[0462]
left(x i,y j)=predmatrixsb[max(0,x i dcenterx[i][j]-1)][y j dcentery[i][j]]
[0463]
center(x i,y j)=predmatrixsb[x i dcenterx[i][j]][y j dcentery[i][j]]
[0464]
right(x i,y j)=predmatrixsb[min(width-1,x i dcenterx[i][j] 1)][y j dcentery[i][j]]
[0465]
downleft(x i,y j)=predmatrixsb[max(0,x i dcenterx[i][j]-1)][min(height-1,y j dcentery[i][j] 1)]
[0466]
down(x i,y j)=predmatrixsb[x i dcenterx[i][j]][max(0,x i dcenterx[i][j]-1)][min(height-1,y j dcentery[i][j] 1)]
[0467]
downright(x i,y j)=predmatrixsb[min(width-1,x i dcenterx[i][j] 1)][max(0,x i dcenterx[i][j]-1)][min(height-1, y j dcentery[i][j] 1)]
[0468]
其中,可以将max(a,b)理解为取a,b中的较大值,可以将min(a,b)理解为取a,b中的较小值。
[0469]
进一步地,在本技术中,如果采用了对基于子块的预测的预测块扩充一行一列的方法,即扩充出predmatrix的-1和height 的行以及-1和width列,上一段可表示为:
[0470]
upleft(x i,y j)=predmatrixsb[x i dcenterx[i][j]-1][y j dcentery[i]
[j]-1]
[0471]
up(x i,y j)=predmatrixsb[x i dcenterx[i][j]][y j dcentery[i][j]-1]
[0472]
upright(x i,y j)=predmatrixsb[x i dcenterx[i][j] 1][y j dcentery[i][j]-1]
[0473]
left(x i,y j)=predmatrixsb[x i dcenterx[i][j]-1][y j dcentery[i][j]]
[0474]
center(x i,y j)=predmatrixsb[x i dcenterx[i][j]][y j dcentery[i][j]]
[0475]
right(x i,y j)=predmatrixsb[x i dcenterx[i][j] 1][y j dcentery[i][j]]
[0476]
downleft(x i,y j)=predmatrixsb[x i dcenterx[i][j]-1][y j dcentery[i][j] 1]
[0477]
down(x i,y j)=predmatrixsb[x i dcenterx[i][j]][y j dcentery[i][j] 1]
[0478]
downright(x i,y j)=predmatrixsb[x i dcenterx[i][j] 1][y j dcentery[i][j] 1]。
[0479]
进一步地,在本技术中,dcenterx,dcentery也可以不写成矩阵的形式,而写成临时变量的形式。
[0480]
可以理解的是,在本技术的实施例中,center(x i,y j)像素位置可以为上述9个相邻的、构成矩形的像素位置中的中心位置,然后可以基于该(x i,y j)像素位置,以及与其相邻的其他8个像素位置,进行二次预测处理。具体地,其他8个像素位置分别为up(上)、upright(右上)、left(左)、right(右)、downleft(左下)、down(下)、 downright(右下)、upleft(左上)。
[0481]
需要说明的是,在本技术中,predmatrixs[x i][y j]的计算公式的精度可以使用更低的精度。比如将每一个乘法右边的项都右移,如dmv[i][j][0]和dmv[i][j][1]都右移shift3位,相应的,1《《15变为1《《(15-shift3),

(1《《10))》》11变为

(1《《(10-shift3)))》》(11-shift3)。
[0482]
示例性的,可以限制运动矢量的大小在一个合理的范围,如上述使用的运动矢量在水平方向和垂直方向的正负值都不超过1个像素或1/2像素或1/4像素等。
[0483]
可以理解的是,如果当前块的预测参考模式是

pred_list01’,那么解码器将各分量的多个预测样本矩阵平均得到该分量的最终的预测样本矩阵。例如,2个亮度预测样本矩阵平均后得到新的亮度预测样本矩阵。
[0484]
进一步地,在本技术的实施例中,在得到当前块的预测样本矩阵后,如果当前块没有变换系数,那么预测矩阵就作为当前块的解码结果,如果当前块还有变换系数,那么,可以先解码变换系数,并通过反变换、反量化得到残差矩阵,将残差矩阵加到预测矩阵上得到解码结果。
[0485]
可以理解的是,本技术提出的帧间预测方法,可以先基于子块中的一个像素位置所对应的第一运动矢量偏差来调整二次预测的初始位置,即调整进行二次预测或prof处理的滤波器所使用的中心位置,然后可以基于调整后所确定的中心位置进一步对第一运动矢量进行调整,获得第二运动矢量偏差,最终便可以利用该中心位置和第二运动矢量偏差对该像素位置进行基于点的预测,进而获得子块的第二预测值。
[0486]
需要说明的是,本技术提出的帧间预测方法,可以适用于任何一个图像分量上,在
本实施例中示例性的对亮度分量使用二次预测方案,但是也可以用于色度分量,或者其他格式的任一分量。本技术提出的帧间预测方法也可以适用于任何一种视频格式上,包括但不限于yuv格式,包括但不限于yuv格式的亮度分量。
[0487]
本实施例提供了一种帧间预测方法,可以在基于子块的预测之后,对运动矢量与子块的运动矢量之间的第一运动矢量偏差较大的像素位置,可以基于第一运动矢量偏差重新确定进行二次预测或prof处理所使用的中心位置和第二运动矢量偏差的确定,从而可以在基于子块的第一预测值的基础上,利用中心位置和第二运动矢量偏差进行基于点的二次预测,获得第二预测值。可见,本技术提出的帧间预测方法能够很好的适用于全部场景,可以减小预测的误差,大大提升编码性能,从而提高了编解码效率。
[0488]
本技术实施例提供一种帧间预测方法,该方法应用于视频编码设备,即编码器。该方法所实现的功能可以通过编码器中的第二处理器调用计算机程序来实现,当然计算机程序可以保存在第二存储器中,可见,该编码器至少包括第二处理器和第二存储器。
[0489]
图19为帧间预测方法的实现流程示意图五,如图19所示,编码器进行帧间预测的方法可以包括以下步骤:
[0490]
步骤401、确定当前块的预测模式参数。
[0491]
在本技术的实施例中,编码器可以先确定当前块的预测模式参数。具体地,编码器可以先确定当前块使用的预测模式,然后基于该预测模式确定对应的预测模式参数。其中,预测模式参数可以用于对当前块所使用的预测模式进行确定。
[0492]
需要说明的是,在本技术的实施例中,待编码图像可以划分为多个图像块,当前待编码的图像块可以称为当前块,与当前块相邻的图像块可以称为相邻块;即在待编码图像中,当前块与相邻块之间具有相邻关系。这里,每个当前块可以包括第一图像分量、第二图像分量和第三图像分量;也即当前块为待编码图像中当前待进行第一图像分量、第二图像分量或者第三图像分量预测的图像块。
[0493]
其中,假定当前块进行第一图像分量预测,而且第一图像分量为亮度分量,即待预测图像分量为亮度分量,那么当前块也可以称为亮度块;或者,假定当前块进行第二图像分量预测,而且第二图像分量为色度分量,即待预测图像分量为色度分量,那么当前块也可以称为色度块。
[0494]
需要说明的是,在本技术的实施例中,预测模式参数指示了当前块采用的预测模式以及与该预测模式相关的参数。这里,针对预测模式参数的确定,可以采用简单的决策策略,比如根据失真值的大小进行确定;也可以采用复杂的决策策略,比如根据率失真优化(rate distortion optimization,rdo)的结果进行确定,本技术实施例不作任何限定。通常而言,可以采用 rdo方式来确定当前块的预测模式参数。
[0495]
具体地,在一些实施例中,编码器在确定当前块的预测模式参数时,可以先利用多种预测模式对当前块进行预编码处理,获得每一种预测模式对应的率失真代价值;然后从所获得的多个率失真代价值中选择最小率失真代价值,并根据最小率失真代价值对应的预测模式确定当前块的预测模式参数。
[0496]
也就是说,在编码器侧,针对当前块可以采用多种预测模式分别对当前块进行预编码处理。这里,多种预测模式通常包括有帧间预测模式、传统帧内预测模式和非传统帧内预测模式;其中,传统帧内预测模式可以包括有直流(direct current, dc)模式、平面
(planar)模式和角度模式等,非传统帧内预测模式可以包括有基于矩阵的帧内预测(matrix-basedintraprediction,mip)模式、跨分量线性模型预测(cross-component linearmodelprediction,cclm)模式、帧内块复制(intrablock copy,ibc)模式和plt(palette)模式等,而帧间预测模式可以包括有普通帧间预测模式、gpm模式和awp模式等。
[0497]
这样,在利用多种预测模式分别对当前块进行预编码之后,可以得到每一种预测模式对应的率失真代价值;然后从所得到的多个率失真代价值中选取最小率失真代价值,并将该最小率失真代价值对应的预测模式确定为当前块的预测模式参数。除此之外,还可以在利用多种预测模式分别对当前块进行预编码之后,得到每一种预测模式对应的失真值;然后从所得到的多个失真值中选取最小失真值,然后将该最小失真值对应的预测模式确定为当前块使用的预测模式,并根据该预测模式设置对应的预测模式参数。如此,最终使用所确定的预测模式参数对当前块进行编码,而且在这种预测模式下,可以使得预测残差较小,能够提高编码效率。
[0498]
也就是说,在编码侧,编码器可以选取最优的预测模式对当前块进行预编码,在这过程中就可以确定出当前块的预测模式,然后确定用于指示预测模式的预测模式参数,从而将相应的预测模式参数写入码流,由编码器传输到解码器。
[0499]
相应地,在解码器侧,解码器通过解析码流便可以直接获取到当前块的预测模式参数,并根据解析获得的预测模式参数确定当前块所使用的预测模式,以及该预测模式对应的相关参数。
[0500]
步骤402、当预测模式参数指示使用帧间预测模式确定当前块的帧间预测值时,确定当前块的子块的第一运动矢量;其中,当前块包括多个子块。
[0501]
在本技术的实施例中,如果预测模式参数指示当前块使用帧间预测模式确定当前块的帧间预测值,那么编码器可以先确定出当前块的每一个子块的第一运动矢量。其中,一个子块对应有一个第一运动矢量。
[0502]
需要说明的是,在本技术的实施例中,当前块为当前帧中待编码的图像块,当前帧以图像块的形式按一定顺序依次进行编码,该当前块为当前帧内按该顺序下一时刻待编码的图像块。当前块可具有多种规格尺寸,例如16
×
16、32
×
32或32
×
16 等规格,其中数字表示当前块上像素点的行数和列数。
[0503]
进一步对,在本技术的实施例中,当前块可以划分为多个子块,其中,每一个子块的尺寸大小都是相同的,子块为较小规格的像素点集合。子块的尺寸可以为8
×
8或4
×
4。
[0504]
示例性的,在本技术中,当前块的尺寸为16
×
16,可以划分为4个尺寸均为8
×
8的子块。
[0505]
可以理解的是,在本技术的实施例中,在编码器确定预测模式参数指示使用帧间预测模式确定当前块的帧间预测值的情况下,就可以继续采用本技术实施例所提供的帧间预测方法。
[0506]
在本技术的实施例中,进一步地,当预测模式参数指示使用帧间预测模式确定当前块的帧间预测值时,编码器确定当前块的子块的第一运动矢量时,可以确定当前块的仿射模式参数和预测参考模式。当仿射模式参数指示使用仿射模式时,确定控制点模式和子块尺寸参数。最后可以根据预测参考模式、控制点模式以及子块尺寸参数,确定第一运动矢量。
[0507]
在本技术的实施例中,编码器在确定预测模式参数之后,如果预测模式参数指示当前块使用帧间预测模式确定当前块的帧间预测值,那么编码器可以确定仿射模式参数和预测参考模式。
[0508]
需要说明的是,在本技术的实施例中,仿射模式参数用于对是否使用仿射模式进行指示。具体地,仿射模式参数可以为仿射运动补偿允许标志affine_enable_flag,编码器通过仿射模式参数的取值的确定,可以进一步确定是否使用仿射模式。
[0509]
也就是说,在本技术中,仿射模式参数可以为一个二值变量。若仿射模式参数的取值为1,则指示使用仿射模式;若仿射模式参数的取值为0,则指示不使用仿射模式。
[0510]
示例性的,在本技术中,仿射模式参数的取值可以等于仿射运动补偿允许标志affine_enable_flag的值,如果 affine_enable_flag的值为
‘1’
,表示可使用仿射运动补偿;如果affine_enable_flag的值为
‘0’
,表示不应使用仿射运动补偿。
[0511]
进一步地,在本技术的实施例中,如果编码器确定的仿射模式参数指示使用仿射模式,那么编码器可以进行获取控制点模式和子块尺寸参数。
[0512]
需要说明的是,在本技术的实施例中,控制点模式用于对控制点的个数进行确定。在仿射模型中,一个子块可以有2 个控制点或者3个控制点,相应地,控制点模式可以为2个控制点对应的控制点模式,或者为3个控制点对应的控制点模式。即控制点模式可以包括4参数模式和6参数模式。
[0513]
可以理解的是,在本技术的实施例中,对于avs3标准,如果当前块使用了仿射模式,那么编码器还需要确定出当前块在仿射模式中控制点的个数进行确定,从而可以确定出使用的是4参数(2个控制点)模式,还是6参数(3个控制点)模式。
[0514]
进一步地,在本技术的实施例中,如果编码器确定的仿射模式参数指示使用仿射模式,那么编码器可以进一步确定子块尺寸参数。
[0515]
具体地,可以通过仿射预测子块尺寸标志affine_subblock_size_flag表征子块尺寸参数,编码器可以对子块尺寸标志的取值的设定来指示子块尺寸参数,即指示当前块的子块的尺寸大小。其中,子块的尺寸大小可以为8
×
8或4
×
4。具体地,在本技术中,子块尺寸标志可以为一个二值变量。若子块尺寸标志的取值为1,则指示子块尺寸参数为8
×
8;若子块尺寸标志的取值为0,则指示子块尺寸参数为4
×
4。
[0516]
示例性的,在本技术中,子块尺寸标志的取值可以等于仿射预测子块尺寸标志affine_subblock_size_flag的值,如果 affine_subblock_size_flag的值为
‘1’
,则当前块划分为尺寸为8
×
8的子块;如果affine_subblock_size_flag的值为
‘0’
,则当前块划分为尺寸为4
×
4的子块。
[0517]
进一步地,在本技术的实施例中,编码器在确定控制点模式和子块尺寸参数之后,便可以根据预测参考模式、控制点模式以及子块尺寸参数,进一步确定出当前块中的子块的第一运动矢量。
[0518]
具体地,在本技术的实施例中,编码器可以先根据预测参考模式确定控制点运动矢量组;然后可以基于控制点运动矢量组、控制点模式以及子块尺寸参数,确定出子块的第一运动矢量。
[0519]
可以理解的是,在本技术的实施例中,控制点运动矢量组可以用于对控制点的运动矢量进行确定。
[0520]
需要说明的是,在本技术的实施例中,编码器可以按照上述方法,遍历当前块中的每一个子块,利用每一个子块的控制点运动矢量组、控制点模式以及子块尺寸参数,确定出每一个子块的第一运动矢量,从而可以根据每一个子块的第一运动矢量构建获得运动矢量集合。
[0521]
可以理解的是,在本技术的实施例中,当前块的运动矢量集合中可以包括当前块的每一个子块的第一运动矢量。
[0522]
进一步地,在本技术的实施例中,编码器在根据控制点运动矢量组、控制点模式以及子块尺寸参数,确定第一运动矢量时,可以先根据控制点运动矢量组、控制点模式以及当前块的尺寸参数,确定差值变量;然后可以基于预测模式参数和子块尺寸参数,确定子块位置;最后,便可以利用差值变量和子块位置,确定子块的第一运动矢量,进而可以获得当前块的多个子块的运动矢量集合。
[0523]
需要说明的是,在本技术中,在确定子块内的每个位置与子块的运动矢量的偏差时,如果当前块使用的是仿射预测模型,可以根据仿射预测模型的公式计算出子块内的每个位置的运动矢量,与子块的运动矢量相减得到它们的偏差。如果子块的运动矢量都选择子块内同一位置的运动矢量,如4x4的块使用距离左上角(2,2)的位置,8x8的块使用距离左上角(4,4) 的位置,根据现在标准包括vvc和avs3中使用的仿射模型,每个子块相同位置的运动矢量偏差都是相同的。但是avs在左上角,右上角,以及3控制点的情况下的左下角(上述avs3文本中的,如图7所示的a,b,c位置)与其他块使用的位置不同,相应地在计算左上角,右上角,以及3控制点的情况下的左下角的子块的运动矢量偏差时与其他块也不同。具体如实施例。
[0524]
步骤403、基于第一运动矢量确定子块的第一预测值,和子块中的每一个像素位置与子块之间的第一运动矢量偏差。
[0525]
在本技术的实施例中,编码器在确定出当前块的每一个子块的第一运动矢量之后,可以基于子块的第一运动矢量,分别确定出子块的第一预测值和子块中的每一个像素位置与子块之间的第一运动矢量偏差。
[0526]
可以理解的是,在本技术的实施例中,步骤403具体可以包括:
[0527]
步骤403a、基于第一运动矢量确定子块的第一预测值。
[0528]
步骤403b、基于第一运动矢量确定子块中的每一个像素位置与子块之间的第一运动矢量偏差。
[0529]
其中,本技术实施例提出的帧间预测方法对编码器执行步骤403a和步骤403b的顺序不进行限定,也就是说,在本技术中,在确定出当前块的每一个子块的第一运动矢量之后,编码器可以先执行步骤403a,然后执行步骤403b,也可以先执行步骤403b,再执行步骤403a,还可以同时执行步骤403a和步骤403b。
[0530]
进一步地,在本技术的实施例中,编码器在基于第一运动矢量确定子块的第一预测值时,可以先确定样本矩阵;其中,样本矩阵包括亮度样本矩阵和色度样本矩阵;然后可以根据预测参考模式、子块尺寸参数、样本矩阵以及运动矢量集合,确定第一预测值。
[0531]
需要说明的是,在本技术的实施例中,编码器在根据预测参考模式、子块尺寸参数、样本矩阵以及运动矢量集合,确定第一预测值时,可以先根据预测参考模式和子块尺寸参数,从运动矢量集合中确定目标运动矢量;然后可以利用预测参考模式对应的参考图像
队列和参考索引样本矩阵以及目标运动矢量,确定预测样本矩阵;其中,预测样本矩阵包括多个子块的第一预测值。
[0532]
具体地,在本技术的实施例中,样本矩阵可以包括亮度样本矩阵和色度样本矩阵,相应地,编码器确定出的预测样本矩阵可以包括亮度预测样本矩阵和色度预测样本矩阵,其中,亮度预测样本矩阵包括多个子块的第一亮度预测值,色度预测样本矩阵包括多个子块的第一色度预测值,第一亮度预测值和第一色度预测值构成子块的第一预测值。
[0533]
需要说明的是,在申请的实施例中,样本矩阵中的亮度样本矩阵可以为1/16精度亮度样本矩阵,样本矩阵中的色度样本矩阵可以为1/32精度色度样本矩阵。
[0534]
可以理解的是,在本技术的实施例中,对于不同的预测参考模式,编码器获取的参考图像队列和参考索引是不相同的。
[0535]
进一步地,在本技术的实施例中,编码器确定样本矩阵时,可以先获取亮度插值滤波器系数和色度插值滤波器系数;然后可以基于亮度插值滤波器系数确定亮度样本矩阵,同时,可以基于色度插值滤波器系数确定色度样本矩阵。
[0536]
进一步地,在本技术的实施例中,编码器在确定子块中的每一个像素位置与子块之间的第一运动矢量偏差时,可以确定二次预测参数;如果二次预测参数指示使用二次预测,那么编码器可以基于差值变量确定子块与每一个像素位置之间的第一运动矢量偏差。
[0537]
可以理解的是,在本技术的实施例中,编码器在基于差值变量确定子块与每一个像素位置之间的第一运动矢量偏差之后,便可以利用子块内的全部像素位置对应的全部第一运动矢量偏差,构建出该子块对应的运动矢量偏差矩阵。可见,运动矢量偏差矩阵中包括有子块与任意一个内部的像素点之间的运动矢量偏差,即第一运动矢量偏差。
[0538]
进一步地,在本技术的实施例中,如果编码器确定的二次预测参数指示不使用二次预测,那么,编码器可以选择直接将上述步骤403a中所获得的当前块的子块的第一预测值作为子块的第二预测值,而不再进行下述步骤404和步骤405的处理。
[0539]
具体地,在本本技术的实施例中,如果二次预测参数指示不使用二次预测,那么编码器可以利用预测样本矩阵确定出第二预测值。其中,预测样本矩阵包括多个子块的第一预测值,编码器可以将像素位置所在的子块的第一预测值确定为自身的第二预测值。
[0540]
示例性的,在本技术中,如果当前块的预测参考模式取值为0或1,即使用第一参考模式

pred_list0’,或使用第二参考模式

pred_list1’,那么可以直接从包括有1个亮度预测样本矩阵(2个色度预测样本矩阵)的预测样本矩阵中,选择像素位置所在的子块的第一预测值,并将该第一预测值确定为像素位置的帧间预测值,即第二预测值。
[0541]
示例性的,在本技术中,如果当前块的预测参考模式取值为2,即使用第三参考模式

pred_list01’,那么可以先对预测样本矩阵中所包括的2个亮度预测样本矩阵(2组共4个色度预测样本矩阵)进行均值运算,得到1个平均后的亮度预测样本(2个平均后的色度预测样本),最后便从这个平均后的亮度预测样本(2个平均后的色度预测样本)中,选择像素位置所在的子块的第一预测值,并将该第一预测值确定为像素位置的帧间预测值,即第二预测值。
[0542]
步骤404、根据第一运动矢量偏差确定每一个像素位置对应的中心位置和第二运动矢量偏差。
[0543]
在本技术的实施例中,编码器在基于第一运动矢量分别确定子块的第一预测值,
和子块中的每一个像素位置与子块之间的第一运动矢量偏差之后,便可以根据第一运动矢量偏差每一个像素位置对应的中心位置和第二运动矢量偏差。
[0544]
需要说明的是,在本技术的实施例中,对于子块中的每一个像素位置的像素,在进行二次预测或prof处理时,如果滤波器使用的默认的中心位置与子块之间的运动矢量偏差较大,那么获得的预测结果就可能存在较大的误差,因此,编码器在确定出每一个像素位置与子块之间的第一运动矢量偏差之后,可以先对每一个像素位置是否适合作为某个像素二次预测或 prof处理时所使用的滤波器的中心位置进行确认,如果不适合,还可以重新进行中心位置的调整。
[0545]
可以理解的是,在本技术中,一个像素位置对应的中心位置和第二运动矢量偏差,可以为对该像素位置进行二次预测或 prof处理时所使用的滤波器的中心位置和运动矢量偏差。即中心位置和第二运动矢量偏差用于对该像素位置进行二次预测或prof处理。
[0546]
进一步地,在本技术的实施例中,编码器根据第一运动矢量偏差确定每一个像素位置对应的中心位置和第二运动矢量偏差的方法可以包括以下步骤:
[0547]
步骤404a、确定第一运动矢量偏差的水平偏差和垂直偏差;
[0548]
步骤404b、根据水平偏差的第一绝对值、垂直偏差的第二绝对值以及预设偏差阈值,确定中心位置和第二运动矢量偏差。
[0549]
在本技术的实施例中,编码器可以先去确定出第一运动矢量偏差在不同方向上的偏差值,即确定出第一运动矢量偏差对应的水平偏差和垂直偏差。接着,编码器可以进一步计算水平偏差的绝对值,即第一绝对值,以及垂直偏差的绝对值,即第二绝对值。最后,编码器可以根据该第一绝对值、第二绝对值以及预设偏差阈值,进一步确定出进行二次预测或prof处理时所使用的中心位置和第二运动矢量偏差。
[0550]
需要说明的是,在申请的实施例中,编码器可以将水平偏差的第一绝对值和垂直偏差的第二绝对值分别与预设偏差阈值进行比较,从而可以根据比较结果进行中心位置和第二运动矢量偏差的确定。其中,预设偏差阈值可以为预先设置的、用于判断是否进行中心位置和运动矢量偏差的调整。
[0551]
进一步都,在本技术的实施例中,编码器在根据水平偏差、垂直偏差以及预设偏差阈值,确定中心位置和第二运动矢量偏差时,如果第一绝对值和第二绝对值均小于预设偏差阈值,那么可以将第一运动矢量偏差确定为第二运动矢量偏差,将每一个像素位置确定为中心位置。
[0552]
可以理解的是,在申请的实施例中,编码器在将水平偏差的第一绝对值和垂直偏差的第二绝对值分别与预设偏差阈值进行比较之后,如果第一绝对值和第二绝对值均小于预设偏差,便可以认为像素位置与子块之间的矢量偏差较小,使用该像素位置作为滤波器的中心位置进行二次预测或prof处理所获得的预测结果比较准确,因此,可以直接将该像素位置对应的第一运动矢量偏差确定为用于进行二次预测或prof处理的第二运动矢量偏差,同时,可以直接将该像素位置确定为进行二次预测或prof处理的滤波器所使用的中心位置。
[0553]
进一步都,在本技术的实施例中,编码器在根据水平偏差、垂直偏差以及预设偏差阈值,确定中心位置和第二运动矢量偏差时,如果第一绝对值大于或者等于预设偏差阈值,且第二绝对值小于预设偏差阈值,那么可以根据水平偏差确定第一调整方向;然后可以根
据第一调整方向,确定中心位置和第二运动矢量偏差。
[0554]
需要说明的是,在本技术的实施例中,第一调整方向用于对第一运动矢量在水平方向上进行调整,因此,第一调整方向包括左侧和右侧。
[0555]
可以理解的是,在申请的实施例中,编码器在将水平偏差的第一绝对值和垂直偏差的第二绝对值分别与预设偏差阈值进行比较之后,如果第一绝对值大于或者等于预设偏差阈值,且第二绝对值小于预设偏差阈值,便可以认为像素位置与子块之间在水平方向上的运动矢量偏差较大,如果使用该像素作为滤波器的中心位置进行二次预测或prof处理所获得的预测结果可能存在误差,因此,需要进一步按照水平偏差确定出第一调整方向,然后再根据第一调整方向进行调整,最终便可以确定出进行二次预测或prof处理时所使用的中心位置和第二运动矢量偏差。
[0556]
进一步地,在本技术的实施例中,编码器在根据第一调整方向,确定中心位置和第二运动矢量偏差时,如果第一调整方向为左侧,那么可以将该任一像素位置的相邻左侧像素位置作为中心位置,然后,可以将第一运动矢量偏差加(1,0),从而可以获得对应的第二运动矢量偏差。
[0557]
进一步地,在本技术的实施例中,编码器在根据第一调整方向,确定中心位置和第二运动矢量偏差,如果第一调整方向为右侧,那么可以将任一像素位置的相邻右侧像素位置作为中心位置,然后,可以将第一运动矢量偏差减(1,0),从而可以获得第二运动矢量偏差。
[0558]
进一步都,在本技术的实施例中,编码器在根据水平偏差、垂直偏差以及预设偏差阈值,确定中心位置和第二运动矢量偏差时,如果第二绝对值大于或者等于预设偏差阈值,且第一绝对值小于预设偏差阈值,那么可以根据垂直偏差确定第二调整方向;然后可以根据第二调整方向,确定中心位置和第二运动矢量偏差。
[0559]
需要说明的是,在本技术的实施例中,第二调整方向用于对第一运动矢量在垂直方向上进行调整,因此,第二调整方向包括上侧和下侧。
[0560]
可以理解的是,在申请的实施例中,编码器在将水平偏差的第一绝对值和垂直偏差的第二绝对值分别与预设偏差阈值进行比较之后,如果第二绝对值大于或者等于预设偏差阈值,且第一绝对值小于预设偏差阈值,便可以认为像素位置与子块之间在垂直方向上的运动矢量偏差较大,如果使用该像素作为滤波器的中心位置进行二次预测或prof处理所获得的预测结果可能存在误差,因此,需要进一步按照垂直偏差确定出第二调整方向,然后再根据第二调整方向进行调整,最终便可以确定出进行二次预测或prof处理时所使用的中心位置和第二运动矢量偏差。
[0561]
进一步地,在本技术的实施例中,编码器在根据第二调整方向,确定中心位置和第二运动矢量偏差时,如果第二调整方向为上侧,那么可以将该任一像素位置的相邻上侧像素位置作为中心位置,然后,可以将第一运动矢量偏差加(0,1),从而可以获得对应的第二运动矢量偏差。
[0562]
进一步地,在本技术的实施例中,编码器在根据第二调整方向,确定中心位置和第二运动矢量偏差,如果第二调整方向为下侧,那么可以将任一像素位置的相邻下侧像素位置作为中心位置,然后,可以将第一运动矢量偏差减(0,1),从而可以获得第二运动矢量偏差。
[0563]
进一步都,在本技术的实施例中,编码器在根据水平偏差、垂直偏差以及预设偏差阈值,确定中心位置和第二运动矢量偏差时,如果第一绝对值和第二绝对值均大于或者等于预设偏差阈值,那么可以根据水平偏差和垂直偏差确定第三调整方向;然后可以根据第三调整方向,确定中心位置和第二运动矢量偏差。
[0564]
需要说明的是,在本技术的实施例中,第三调整方向用于对第一运动矢量在水平方向和垂直方向上同时进行调整,因此,第三调整方向包括右上侧、右下侧、左上侧以及左下侧。
[0565]
可以理解的是,在申请的实施例中,编码器在将水平偏差的第一绝对值和垂直偏差的第二绝对值分别与预设偏差阈值进行比较之后,如果第一绝对值和第二绝对值都大于或者等于预设偏差阈值,便可以认为像素位置与子块之间在水平方向和垂直方向上的运动矢量偏差均较大,如果使用该像素作为滤波器的中心位置进行二次预测或prof处理所获得的预测结果可能存在误差,因此,需要进一步按照水平偏差和垂直偏差确定出第三调整方向,然后再根据第三调整方向进行调整,最终便可以确定出进行二次预测或prof处理时所使用的中心位置和第二运动矢量偏差。
[0566]
进一步地,在本技术的实施例中,编码器在根据第三调整方向,确定中心位置和第二运动矢量偏差时,如果第三调整方向为左上侧,那么可以将该任一像素位置的相邻左上侧像素位置作为中心位置,然后,可以将第一运动矢量偏差加(1,1),从而可以获得对应的第二运动矢量偏差。
[0567]
进一步地,在本技术的实施例中,编码器在根据第三调整方向,确定中心位置和第二运动矢量偏差,如果第三调整方向为右下侧,那么可以将任一像素位置的相邻右下侧像素位置作为中心位置,然后,可以将第一运动矢量偏差减(1,1),从而可以获得第二运动矢量偏差。
[0568]
可以理解的是,在本技术的实施例中,第二运动矢量偏差在水平方向和垂直方向上的偏差值均小于预设偏差阈值。
[0569]
也就是说,在本技术中,编码器在确定出子块中的每一个像素位置的运动矢量与子块的运动矢量的偏差之后,且在对基于子块的预测的预测块进行滤波之前,可以先进行中心位置和第二运动矢量偏差的确定,其中,中心位置和第二运动矢量用于进行二次预测或prof处理。
[0570]
具体地,在本技术中,对于子块中的每一个像素位置,可以先确定其与子块之间的第一运动矢量偏差的大小,其中包括第一运动矢量偏差在水平方向和垂直方向上的水平偏差和垂直偏差。如果某个像素位置的运动矢量偏差的水平方向和/或垂直方向的绝对值大于预设偏差阈值,那么可以确定该像素位置对应的滤波器的中心位置不再是该像素位置本身,而需要进一步对中心位置和第二运动矢量偏差进行确定。
[0571]
进一步地,在本技术的实施例中,在对子块中的一个像素位置进行二次预测或prof处理之前,如果确定该像素位置与子块之间的第一运动矢量偏差在水平方向和\或垂直方向的偏差分量的绝对值大于或者等于预设偏差阈值(如1/2像素、3/4 像素或1像素),那么便需要对二次预测或prof处理所使用的起始点进行调整,即二次预测或prof处理所使用的二维滤波器的中心位置进行调整。
[0572]
可以理解的是,在本技术中,在对中心位置和运动矢量偏差进行调整时,可以在当
前块中选择该与像素位置在水平方向和垂直方向上的运动矢量偏差均小于或者等于预设偏差阈值的另一个像素位置。
[0573]
在本技术的实施例中,进一步地,在根据第一运动矢量偏差确定每一个像素位置对应的中心位置和第二运动矢量偏差之前,即步骤404之前,编码器进行帧间预测的方法还可以包括以下步骤:
[0574]
步骤406、按照预设偏差范围对第一运动矢量偏差进行限制处理;其中,预设偏差范围包括偏差下限值和偏差上限值。
[0575]
在本技术的实施例中,编码器在根据第一运动矢量偏差确定每一个像素位置对应的中心位置和第二运动矢量偏差之前,可以先对第一运动矢量进行限制。具体地,编码器可以按照预设偏差范围对第一运动矢量偏差进行限制处理;其中,预设偏差范围包括偏差下限值和偏差上限值。
[0576]
进一步地,在本技术的实施例中,编码器按照预设偏差范围对第一运动矢量偏差进行限制处理时,如果水平偏差和\或垂直偏差小于偏差下限值,那么可以将水平偏差和\或垂直偏差设置为偏差下限值;如果水平偏差和\或垂直偏差大于偏差上限值,那么可以将水平偏差和\或垂直偏差设置为偏差上限值。
[0577]
需要说明的是,在本技术中,编码器既可以不对第一运动矢量偏差进行限制,即不进行步骤407,而是直接根据第一运动矢量偏差将中心位置调整到任何合适的像素位置。也可以先按照步骤407执行对第一运动矢量偏差的限制处理,或者是对可调整的范围及运动矢量偏差进行限制。
[0578]
进一步地,在本技术的实施例中,预设偏差范围可以由偏差下限值min和偏差上限值max构成,即预设偏差范围可以表示为(min,max),在对第一运动矢量偏差进行限制处理时,如果第一运动矢量偏差的水平方向和\或垂直方向的偏差值小于偏差下限值min,那么可以直接将该偏差值设为min;如果第一运动矢量偏差的水平方向和\或垂直方向的偏差值大于max,那么可以直接将该偏差值设为max。
[0579]
在本技术的实施例中,进一步地,在根据第一运动矢量偏差确定每一个像素位置对应的中心位置和第二运动矢量偏差之后,即步骤404之后,编码器进行帧间预测的方法还可以包括以下步骤:
[0580]
步骤407、若中心位置不属于当前块,则按照当前块中的像素位置重新确定中心位置。
[0581]
在本技术的实施例中,编码器在根据第一运动矢量偏差确定每一个像素位置对应的中心位置和第二运动矢量偏差之后,可以先对中心位置是否超出了当前块进行确定,如果中心位置超出了当前块的范围,即中心位置不属于当前块,那么编码器便需要按照当前块中的像素位置重新确定中心位置。
[0582]
在本技术的实施例中,进一步地,在根据第一运动矢量偏差确定每一个像素位置对应的中心位置和第二运动矢量偏差之后,即步骤404之后,编码器进行帧间预测的方法还可以包括以下步骤:
[0583]
步骤408、若中心位置不属于当前块,则直接将每一个像素位置确定为每一个像素位置对应的中心位置。
[0584]
在本技术的实施例中,编码器在根据第一运动矢量偏差确定每一个像素位置对应
的中心位置和第二运动矢量偏差之后,可以先对中心位置是否超出了当前块进行确定,如果中心位置超出了当前块的范围,即中心位置不属于当前块,那么编码器可以直接将对应的、原始的像素位置确定为中心位置。即基于子块中的每一个像素位置对应的第一运动矢量偏差所确定的中心位置如果超出了当前块的范围,那么编码器可以选择任然将该每一个像素位置作为中心位置。
[0585]
也就是说,在本技术的实施例中,对于调整后的二次预测的起始位置,即基于第一运动矢量偏差所确定的滤波器使用的中心位置,编码器可以限制该中心位置不超过当前块的范围,即不会超过当前块中的所有像素位置在调整前的二次预测的起始位置的范围。
[0586]
步骤405、基于第一预测值,按照中心位置和第二运动矢量偏差进行二次预测或prof处理,确定子块的第二预测值,将第二预测值确定为子块的帧间预测值。
[0587]
在本技术的实施例中,编码器在根据第一运动矢量偏差确定每一个像素位置对应的中心位置和第二运动矢量偏差之后,便可以基于第一预测值,按照中心位置和第二运动矢量偏差进行二次预测或prof处理,从而可以获得每一个像素位置的像素的预测值。
[0588]
进一步地,在本技术的实施例中,编码器在遍历子块中的每一个像素位置,获得每一个像素位置的像素的预测值之后,便可以根据每一个像素位置的像素的预测值确定出子块的第二预测值,从而可以将第二预测值确定为子块的帧间预测值。
[0589]
需要说明的是,在本技术的实施例中,由于中心位置和第二运动矢量偏差可以用于对子块中的每一个像素位置的像素点进行二次预测或prof处理,因此,在获得中心位置和第二运动矢量偏差以后,编码器可以基于第一预测值,利用中心位置和第二运动矢量偏差对每一个像素位置的像素点进行二次预测或prof处理,最终可以获得子块对应的第二预测值,从而便可以将第二预测值确定为子块的帧间预测值。
[0590]
进一步地,在本技术的实施例中,编码器基于第一预测值,按照中心位置和第二运动矢量偏差进行二次预测或prof 处理,确定子块的第二预测值,将第二预测值确定为子块的帧间预测值的方法可以包括以下步骤:
[0591]
步骤405a、确定prof参数;
[0592]
步骤405b、当prof参数指示进行prof处理时,基于第一预测值确定中心位置对应的像素水平梯度和像素垂直梯度;
[0593]
步骤405c、根据像素水平梯度、像素垂直梯度以及第二运动矢量偏差,计算每一个像素位置对应的偏差值;
[0594]
步骤405d、基于第一预测值和偏差值,获得每一个像素位置的像素的预测值;
[0595]
步骤405e、利用每一个像素位置的像素的预测值,确定第二预测值。
[0596]
在本技术的实施例中,编码器可以先确定prof参数,如果prof参数指示进行prof处理,那么编码器可以基于第一预测值确定中心位置对应的像素水平梯度和像素垂直梯度;其中,像素水平梯度即为中心位置对应的像素值与水平方向上的、相邻像素位置对应的像素值之间的梯度值;像素垂直梯度即为中心位置对应的像素值与垂直方向上的、相邻像素位置对应的像素值之间的梯度值。
[0597]
进一步地,在本技术的实施例中,编码器可以根据每一个像素位置对应的中心位置的像素水平梯度、像素垂直梯度以及第二运动矢量偏差,计算获得与每一个像素位置对应的偏差值。其中,该偏差值可以用于对每一个像素位置的像素值的预测值进行修正处理。
[0598]
需要说明的是,在本技术的实施例中,编码器可以进一步根据第一预测值和偏差值,获得任一个像素位置所对应的的修正后预测值,并在遍历当前子块中的每一个像素位置,获得每一个像素位置对应的修正后预测值之后,利用全部像素位置对应的修正后预测值确定出当前子块对应的第二预测值,从而确定出对应的帧间预测值。具体地,在本技术中,在完成基于子块的预测之后,将当前子块的第一预测值作为每一个像素位置的预测值,接着,将第一预测值与每一个像素位置对应的偏差值相加,即可以完成对每一个像素位置的预测值的修正处理,获得修正后预测值,从而可以进一步获得当前子块的第二预测值,并将第二预测值作为当前子块对应的帧间预测值。
[0599]
进一步地,在本技术的实施例中,编码器基于第一预测值,按照中心位置和第二运动矢量偏差进行二次预测或prof 处理,确定子块的第二预测值,将第二预测值确定为子块的帧间预测值的方法可以包括以下步骤:
[0600]
步骤405f、确定二次预测参数;
[0601]
步骤405g、当二次预测参数指示使用二次预测时,根据第二运动矢量偏差确定二维滤波器的滤波系数;其中,二维滤波器用于按照预设形状进行二次预测处理;
[0602]
步骤405h、基于滤波系数和第一预测值,确定每一个像素位置的像素的预测值;
[0603]
步骤405i、利用每一个像素位置的像素的预测值,确定第二预测值。
[0604]
在本技术的实施例中,编码器可以先确定二次预测参数,如果二次预测参数指示使用二次预测,那么编码器可以根据第二运动矢量偏差确定二维滤波器的滤波系数;其中,二维滤波器用于按照预设形状进行二次预测处理。
[0605]
需要说明的是,在本技术的实施例中,二维滤波器的滤波器系数是与目标像素位置所对应的第二运动矢量偏差相关的。也就是说,对于不同的目标像素位置,如果对应的第二运动矢量偏差不同,那么使用的二维滤波器的滤波系数也是不同的。
[0606]
可以理解的是,在本技术的实施例中,二维滤波器用于利用多个相邻的、构成预设形状的像素位置进行二次预测。其中,预设形状为矩形、菱形或任意一种对称形状。
[0607]
也就是说,在本技术的中,用于进行二次预测的二维滤波器是相邻的构成预设形状的点所构成的滤波器。相邻的构成预设形状的点可以包括多个点,例如由9个点构成。预设形状可以为对称形状,例如,预设形状可以包括矩形、菱形或其他任意一种对称形状。
[0608]
示例性的,在本技术中,二维滤波器是一个矩形的滤波器,具体地,二维滤波器是由9个相邻的构成矩形的像素位置组成的滤波器。在9个像素位置中,位于中心的像素位置是当前需要二次预测的像素的像素位置,即当前像素位置。
[0609]
进一步地,在本技术的实施例中,编码器在根据第二运动矢量偏差确定二维滤波器的滤波系数时,可以先确定比例参数,然后可以根据比例参数和第二运动矢量偏差,确定像素位置对应的滤波器系数。
[0610]
需要说明的是,在本技术的实施例中,比例参数可以包括至少一个比例值,第二运动矢量偏差包括水平偏差和垂直偏差;其中,至少一个比例值均为非零实数。
[0611]
具体地,在本技术中,当二维滤波器利用9个相邻的、构成矩形的像素位置进行二次预测时,位于矩形的中心的像素位置为待预测位置,即当前像素位置,其他8个目标像素位置依次位于当前像素位置的左上、上、右上、右、右下、下、左下、左这8个方向。
[0612]
相应地,在本技术中,编码器可以基于至少一个比例值和待预测位置的第二运动
矢量偏差,按照预设计算规则计算获得 9个相邻的像素位置对应的9个滤波器系数系数。
[0613]
需要说明的是,在本技术中,预设计算规则可以包括多种不同的计算方式,如加法运算、减法运算、乘法运动等。其中,对于不同的像素位置,可以使用不同的计算方式进行滤波器系数的计算。
[0614]
可以理解的是,在本技术中,编码器在按照预设计算规则中不同的计算方法计算获得多个像素位置对应的多个滤波器系数中,部分滤波器系数可以为第二运动矢量偏差的一次函数,即两者为线性关系,还可以为第二运动矢量偏差的二次函数或高次函数,即两者为非线性关系。
[0615]
也就是说,在本技术中,多个相邻的像素位置对应的多个滤波器系数中的任意一个滤波器系数,可以为第二运动矢量偏差的一次函数、二次函数或者高次函数。
[0616]
可以理解的是,在本技术中,编码器可以将预测模式参数、仿射模式参数、预测参考模式写入码流。还可以将prof 参数、二次预测参数写入码流。
[0617]
本实施例提供了一种帧间预测方法,可以在基于子块的预测之后,对运动矢量与子块的运动矢量之间的第一运动矢量偏差较大的像素位置,可以基于第一运动矢量偏差重新确定进行二次预测或prof处理所使用的中心位置和第二运动矢量偏差的确定,从而可以在基于子块的第一预测值的基础上,利用中心位置和第二运动矢量偏差进行基于点的二次预测,获得第二预测值。可见,本技术提出的帧间预测方法能够很好的适用于全部场景,可以减小预测的误差,大大提升编码性能,从而提高了编编码效率。
[0618]
基于上述实施例,在本技术的再一实施例中,图20为解码器的组成结构示意图一,如图20所示,本技术实施例提出的解码器300可以包括解析单元301和第一确定单元302;
[0619]
所述解析单元301,用于解析码流,获取当前块的预测模式参数;
[0620]
所述第一确定单元302,用于当所述预测模式参数指示使用帧间预测模式确定所述当前块的帧间预测值时,确定所述当前块的子块的第一运动矢量;其中,所述当前块包括多个子块;基于所述第一运动矢量确定所述子块的第一预测值,和所述子块中的每一个像素位置与所述子块之间的第一运动矢量偏差;根据所述第一运动矢量偏差确定所述每一个像素位置对应的中心位置和第二运动矢量偏差;基于所述第一预测值,按照所述中心位置和所述第二运动矢量偏差进行二次预测或prof 处理,确定所述子块的第二预测值,将所述第二预测值确定为所述子块的帧间预测值。
[0621]
图21为解码器的组成结构示意图二,如图21所示,本技术实施例提出的解码器300还可以包括第一处理器303、存储有第一处理器303可执行指令的第一存储器304、第一通信接口305,和用于连接第一处理器303、第一存储器304以及第一通信接口305的第一总线306。
[0622]
进一步地,在本技术的实施例中,上述第一处理器303,用于解析码流,获取当前块的预测模式参数;当所述预测模式参数指示使用帧间预测模式确定所述当前块的帧间预测值时,确定所述当前块的子块的第一运动矢量;其中,所述当前块包括多个子块;基于所述第一运动矢量确定所述子块的第一预测值,和所述子块中的每一个像素位置与所述子块之间的第一运动矢量偏差;根据所述第一运动矢量偏差确定所述每一个像素位置对应的中心位置和第二运动矢量偏差;基于所述第一预测值,按照所述中心位置和所述第二运动矢量偏差进行二次预测或prof处理,确定所述子块的第二预测值,将所述第二预测值确定为所
述子块的帧间预测值。
[0623]
图22为编码器的组成结构示意图一,如图22所示,本技术实施例提出的编码器400可以包括第二确定单元401;
[0624]
所述第二确定单元401,用于确确定当前块的预测模式参数;当所述预测模式参数指示使用帧间预测模式确定所述当前块的帧间预测值时,确定所述当前块的子块的第一运动矢量;其中,所述当前块包括多个子块;基于所述第一运动矢量确定所述子块的第一预测值,和所述子块中的每一个像素位置与所述子块之间的第一运动矢量偏差;根据所述第一运动矢量偏差确定所述每一个像素位置对应的中心位置和第二运动矢量偏差;基于所述第一预测值,按照所述中心位置和所述第二运动矢量偏差进行二次预测或prof处理,确定所述子块的第二预测值,将所述第二预测值确定为所述子块的帧间预测值。
[0625]
图23为编码器的组成结构示意图二,如图23所示,本技术实施例提出的编码器400还可以包括第二处理器402、存储有第二处理器402可执行指令的第二存储器403、第二通信接口404,和用于连接第二处理器402、第二存储器403以及第二通信接口404的第二总线405。
[0626]
进一步地,在本技术的实施例中,上述第二处理器402,用于确定当前块的预测模式参数;当所述预测模式参数指示使用帧间预测模式确定所述当前块的帧间预测值时,确定所述当前块的子块的第一运动矢量;其中,所述当前块包括多个子块;基于所述第一运动矢量确定所述子块的第一预测值,和所述子块中的每一个像素位置与所述子块之间的第一运动矢量偏差;根据所述第一运动矢量偏差确定所述每一个像素位置对应的中心位置和第二运动矢量偏差;基于所述第一预测值,按照所述中心位置和所述第二运动矢量偏差进行二次预测或prof处理,确定所述子块的第二预测值,将所述第二预测值确定为所述子块的帧间预测值。
[0627]
本技术实施例提供了一种解码器和编码器,可以在基于子块的预测之后,对运动矢量与子块的运动矢量之间的第一运动矢量偏差较大的像素位置,可以基于第一运动矢量偏差重新确定进行二次预测或prof处理所使用的中心位置和第二运动矢量偏差的确定,从而可以在基于子块的第一预测值的基础上,利用中心位置和第二运动矢量偏差进行基于点的二次预测,获得第二预测值。可见,本技术提出的帧间预测方法能够很好的适用于全部场景,可以减小预测的误差,大大提升编码性能,从而提高了编编码效率。
[0628]
本技术实施例提供计算机可读存储介质和计算机可读存储介质,其上存储有程序,该程序被处理器执行时实现如上述实施例所述的方法。
[0629]
具体来讲,本实施例中的一种帧间预测方法对应的程序指令可以被存储在光盘,硬盘,u盘等存储介质上,当存储介质中的与一种帧间预测方法对应的程序指令被一电子设备读取或被执行时,包括如下步骤:
[0630]
解析码流,获取当前块的预测模式参数;
[0631]
当所述预测模式参数指示使用帧间预测模式确定所述当前块的帧间预测值时,确定所述当前块的子块的第一运动矢量;其中,所述当前块包括多个子块;
[0632]
基于所述第一运动矢量确定所述子块的第一预测值,和所述子块中的每一个像素位置与所述子块之间的第一运动矢量偏差;
[0633]
根据所述第一运动矢量偏差确定所述每一个像素位置对应的中心位置和第二运
动矢量偏差;
[0634]
基于所述第一预测值,按照所述中心位置和所述第二运动矢量偏差进行二次预测或prof处理,确定所述子块的第二预测值,将所述第二预测值确定为所述子块的帧间预测值。
[0635]
具体来讲,本实施例中的一种帧间预测方法对应的程序指令可以被存储在光盘,硬盘,u盘等存储介质上,当存储介质中的与一种帧间预测方法对应的程序指令被一电子设备读取或被执行时,包括如下步骤:
[0636]
确定当前块的预测模式参数;
[0637]
当所述预测模式参数指示使用帧间预测模式确定所述当前块的帧间预测值时,确定所述当前块的子块的第一运动矢量;其中,所述当前块包括多个子块;
[0638]
基于所述第一运动矢量确定所述子块的第一预测值,和所述子块中的每一个像素位置与所述子块之间的第一运动矢量偏差;
[0639]
根据所述第一运动矢量偏差确定所述每一个像素位置对应的中心位置和第二运动矢量偏差;
[0640]
基于所述第一预测值,按照所述中心位置和所述第二运动矢量偏差进行二次预测或prof处理,确定所述子块的第二预测值,将所述第二预测值确定为所述子块的帧间预测值。
[0641]
本领域内的技术人员应明白,本技术的实施例可提供为方法、系统、或计算机程序产品。因此,本技术可采用硬件实施例、软件实施例、或结合软件和硬件方面的实施例的形式。而且,本技术可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器和光学存储器等)上实施的计算机程序产品的形式。
[0642]
本技术是参照根据本技术实施例的方法、设备(系统)、和计算机程序产品的实现流程示意图和/或方框图来描述的。应理解可由计算机程序指令实现流程示意图和/或方框图中的每一流程和/或方框、以及实现流程示意图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在实现流程示意图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
[0643]
这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在实现流程示意图一个流程或多个流程和 /或方框图一个方框或多个方框中指定的功能。
[0644]
这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在实现流程示意图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
[0645]
本技术所提供的几个方法实施例中所揭露的方法,在不冲突的情况下可以任意组合,得到新的方法实施例。
[0646]
本技术所提供的几个产品实施例中所揭露的特征,在不冲突的情况下可以任意组
合,得到新的产品实施例。
[0647]
本技术所提供的几个方法或设备实施例中所揭露的特征,在不冲突的情况下可以任意组合,得到新的方法实施例或设备实施例。
[0648]
以上所述,仅为本技术的具体实施方式,但本技术的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本技术揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本技术的保护范围之内。因此,本技术的保护范围应以所述权利要求的保护范围为准。
再多了解一些

本文用于企业家、创业者技术爱好者查询,结果仅供参考。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献