1.本技术涉及视频编解码技术,尤其涉及一种编解码方法、装置及设备。
背景技术:2.目前,联合视频专家组(joint video experts team,简称jvet)会议提出了一种预测补偿调整方法,该预测补偿调整方法基于当前图像块的各子块的原始运动信息获得各子块的原始预测值,并基于各子块的原始预测值获得各子块的补偿值,进而,基于各子块的补偿值与原始预测值,获得当前图像块的最终预测值。
3.然而实践发现,目前的预测补偿调整方法仅适用于采用双向预测模式,且各子块的运动矢量与相应子块中各像素点的运动矢量均相同的图像块,对于子块的运动矢量与该子块中像素点的运动矢量存在差异的图像块,无法实现预测补偿调整。
技术实现要素:4.有鉴于此,本技术提供一种编解码方法、装置及设备。
5.具体地,本技术是通过如下技术方案实现的:
6.根据本技术实施例的第一方面,提供一种编解码方法,包括:
7.确定当前图像块各像素点的预测值;
8.基于所述当前图像块各像素点的预测值,确定所述当前图像块各像素点的梯度值;
9.确定所述当前图像块各像素点的偏移矢量;
10.基于所述当前图像块各像素点的梯度值以及偏移矢量,确定所述当前图像块各像素点的预测补偿值;
11.基于所述当前图像块各像素点的预测值以及预测补偿值,确定所述当前图像块各像素点的最终预测值。
12.根据本技术实施例的第二方面,提供一种编解码装置,包括:
13.第一确定单元,用于确定当前图像块各像素点的预测值;
14.第二确定单元,用于基于所述当前图像块各像素点的预测值,确定所述当前图像块各像素点的梯度值;
15.第三确定单元,用于确定所述当前图像块各像素点的偏移矢量;
16.第四确定单元,用于基于所述当前图像块各像素点的梯度值以及偏移矢量,确定所述当前图像块各像素点的预测补偿值;
17.第五确定单元,用于基于所述当前图像块各像素点的预测值以及预测补偿值,确定所述当前图像块各像素点的最终预测值。
18.根据本技术实施例的第三方面,提供一种编码端设备,包括处理器和机器可读存储介质,所述机器可读存储介质存储有能够被所述处理器执行的机器可执行指令,所述处理器用于执行机器可执行指令,以实现如下步骤:
19.确定当前图像块各像素点的预测值;
20.基于所述当前图像块各像素点的预测值,确定所述当前图像块各像素点的梯度值;
21.确定所述当前图像块各像素点的偏移矢量;
22.基于所述当前图像块各像素点的梯度值以及偏移矢量,确定所述当前图像块各像素点的预测补偿值;
23.基于所述当前图像块各像素点的预测值以及预测补偿值,确定所述当前图像块各像素点的最终预测值。
24.根据本技术实施例的第四方面,提供一种解码端设备,包括处理器和机器可读存储介质,所述机器可读存储介质存储有能够被所述处理器执行的机器可执行指令,所述处理器用于执行机器可执行指令,以实现如下步骤:
25.确定当前图像块各像素点的预测值;
26.基于所述当前图像块各像素点的预测值,确定所述当前图像块各像素点的梯度值;
27.确定所述当前图像块各像素点的偏移矢量;
28.基于所述当前图像块各像素点的梯度值以及偏移矢量,确定所述当前图像块各像素点的预测补偿值;
29.基于所述当前图像块各像素点的预测值以及预测补偿值,确定所述当前图像块各像素点的最终预测值。
30.本技术实施例的编解码方法,在确定当前图像块各像素点的预测值之后,基于当前图像块各像素点的梯度值以及偏移矢量,确定当前图像块各像素点的预测补偿值,进而,基于当前图像块各像素点的预测值以及预测补偿值,确定当前图像块各像素点的最终预测值,预测补偿调整不需要再限于采用双向预测模式的图像块,且不限于各子块的运动矢量与相应子块中各像素点的运动矢量均相同的图像块,扩展了预测补偿调整的适用范围。
附图说明
31.图1a~1b是本技术示例性实施例示出的块划分的示意图;
32.图2是本技术一示例性实施例示出的一种8插头的插值示意图;
33.图3是本技术一示例性实施例示出的一种编解码方法的流程示意图;
34.图4是本技术一示例性实施例示出的一种仿射运动模式的控制点的运动矢量的示意图;
35.图5a是本技术一示例性实施例示出的一种整像素块的示意图;
36.图5b是本技术一示例性实施例示出的一种填充1行/列整像素点的示意图;
37.图5c是本技术一示例性实施例示出的一种填充2行/列整像素点的示意图;
38.图5d是本技术又一示例性实施例示出的一种填充2行/列整像素点的示意图;
39.图6是本技术一示例性实施例示出的一种解码方法的流程示意图;
40.图7a~7e是本技术示例性实施例示出的填充1行/列整像素点的示意图;
41.图8是本技术一示例性实施例示出的一种候选运动矢量选择方法的流程示意图;
42.图9是本技术一示例性实施例示出的一种候选运动矢量选择方法的流程示意图;
43.图10是本技术一示例性实施例示出的一种预测模式选择方法的流程示意图;
44.图11是本技术一示例性实施例示出的一种预测模式选择方法的流程示意图;
45.图12是本技术一示例性实施例示出的一种编解码装置的结构示意图;
46.图13是本技术一示例性实施例示出的一种编码端设备的硬件结构示意图;
47.图14是本技术一示例性实施例示出的一种解码端设备的硬件结构示意图。
具体实施方式
48.这里将详细地对示例性实施例进行说明,其示例表示在附图中。下面的描述涉及附图时,除非另有表示,不同附图中的相同数字表示相同或相似的要素。以下示例性实施例中所描述的实施方式并不代表与本技术相一致的所有实施方式。相反,它们仅是与如所附权利要求书中所详述的、本技术的一些方面相一致的装置和方法的例子。
49.在本技术使用的术语是仅仅出于描述特定实施例的目的,而非旨在限制本技术。在本技术和所附权利要求书中所使用的单数形式的“一种”、“所述”和“该”也旨在包括多数形式,除非上下文清楚地表示其他含义。
50.为了使本领域技术人员更好地理解本技术实施例提供的技术方案,下面先对现有视频编码标准中块划分技术、现有帧内子块划分方案以及本技术实施例涉及的部分技术术语进行简单说明。
51.一、现有视频编码标准中块划分技术
52.在hevc中,一个编码树单元(coding tree unit,简称ctu)使用四叉树递归划分成cu。在叶子节点cu级确定是否使用帧内编码或者帧间编码。cu 可以进一步划分成两个或者四个预测单元(prediction unit,简称pu),同一个 pu内使用相同的预测信息。在预测完成后得到残差信息后,一个cu可进一步四叉划分成多个变换单元(transform units,简称tu)。例如,本技术中的当前图像块即为一个pu。
53.但是在最新提出的通用视频编码(versatile video coding,简称vvc)中的块划分技术有了较大变化。一种混合了二叉树/三叉树/四叉树的划分结构取代了原先的划分模式,取消了原先cu,pu,tu的概念的区分,支持了cu的更灵活的划分方式。其中,cu可以是正方形也可以是矩形划分。ctu首先进行四叉树的划分,然后四叉树划分的叶子节点可以进一步进行二叉树和三叉树的划分。图1a所示,cu共有五种划分类型,分别为四叉树划分,水平二叉树划分,垂直二叉树划分,水平三叉树划分和垂直三叉树划分,如图1b所示,一种ctu 内的cu划分可以是上述五种划分类型的任意组合由上可知不同的划分方式,使得各个pu的形状有所不同,如不同尺寸的矩形,正方形。
54.二、技术术语
55.1、预测像素(prediction signal):指从已经编解码的像素中导出的像素值,通过原始像素与预测像素之差获得残差,进而进行残差变换量化以及系数编码。
56.示例性的,帧间的预测像素指的是当前图像块从参考帧(重建像素帧)导出的像素值,由于像素位置离散,需要通过插值运算来获取最终的预测像素。预测像素与原始像素越接近,两者相减得到的残差能量越小,编码压缩性能越高。
57.2、运动矢量(motion vector,简称mv):在帧间编码中,用mv表示当前编码块与其参考图像中的最佳匹配块之间的相对位移。每个划分的块(可以称为子块)都有相应的运动
矢量需要传送到解码端。若对每个子块的mv进行独立编码和传输,特别是划分成小尺寸的子块,需要消耗相当多的比特。为了降低用于编码mv的比特数,视频编码中会利用相邻图像块之间的空间相关性,根据相邻已编码块的mv对当前待编码块的mv进行预测,然后对预测差进行编码。这样可以有效地降低表示mv的比特数。基于此,在对当前图像块的mv 编码过程中,一般首先使用相邻已编码块的mv预测当前图像块的mv,然后对mv的预测值(motion vector prediction,简称mvp)与运动矢量的真正估值之间的差值,即运动矢量残差(motionvector difference简称mvd)进行编码,从而有效降低mv的编码比特数。
58.3、运动信息(motion information):由于mv表示当前图像块与某个参考图像中的最佳匹配块之间的相对位移,为了准确获取指向图像块的信息,除了 mv信息,还需要通过参考图像的索引信息来表示使用了哪个参考图像。视频编码技术中,对于当前图像,通常会基于一定的原则,建立一个参考图像列表,参考图像索引信息则表示当前图像块采用了参考图像列表中的第几个参考图像。此外,很多编码技术还支持多个参考图像列表,因此还需要一个索引值表示使用了哪一个参考图像列表,该索引值可以称为参考方向。视频编码中,mv、参考帧索引、参考方向等与运动相关的编码信息统称为运动信息。
59.4、插值(interpolation):若当前mv为非整像素,则无法直接从对应参考帧中拷贝已有像素值,所需像素值只能通过插值获得。
60.如图2所示,若需获得偏移为1/2像素的像素值y
1/2
,则需通过周围已有像素值x插值获得。若采用抽头数为n的插值滤波器,则需要通过周围n个整像素插值获得。若抽头数为8,则a
k
为滤波器系数,即加权系数。
61.5、运动补偿(motion compensation):指通过插值(或拷贝)获得当前图像块所有预测像素值的过程。
62.6、tmvp模式(temporal motion vector prediction,时域运动矢量预测模式):指复用时域参考帧中的运动矢量的模式。
63.7、bdof模式(bi
‑
directional optical flow,双向光流模式):也可以称为 bio模式,指基于两个参考帧的运动补偿值,基于光流方法进行运动补偿值调整的模式。
64.8、dmvr模式(decoder
‑
side motion vector refinement,解码端运动矢量调整模式):指基于两个参考帧的运动补偿值,进行搜索获得运动矢量差值的模式。
65.9、smvd模式(symmetric motion vector difference,对称运动矢量差模式):指双向预测模式的某一个方向的运动矢量差值直接通过另一个方向的运动矢量差值推导获得,而不需要编码。
66.示例性的,可以直接通过某一个方向的运动矢量差进行缩放获得,缩放因子与两个参考帧到当前图像块所属帧的距离有关。
67.为了使本技术实施例的上述目的、特征和优点能够更加明显易懂,下面结合附图对本技术实施例中技术方案作进一步详细的说明。
68.需要说明的是,本文中所描述的预测补偿调整方法可以应用于编码端设备,也可以应用于解码端设备;其中,当应用于编码端设备时,本文中所描述的图像块指代编码块;当应用于解码端设备时,本文中所描述的图像块指代解码块,本文后续不再复述。
69.请参见图3,为本技术实施例提供的一种预测补偿调整方法的流程示意图,如图3
所示,该预测补偿调整方法可以包括以下步骤:
70.步骤s300、确定当前图像块各像素点的预测值。
71.本技术实施例中,可以基于当前图像块的运动信息确定当前图像块各像素点的预测值。
72.示例性的,可以将当前图像块划分为多个子块,并基于子块,确定各子块中各像素点的预测值。
73.示例性的,子块可以为4*4子块,或8*8子块。
74.例如,对于8*8的图像块,可以划分为4个4*4的子块,并分别确定各4*4 子块中各像素点的预测值。
75.又例如,对于16*16的图像块,可以划分为4个8*8的子块,并分别确定各8*8子块中各像素点的预测值。
76.步骤s310、基于当前图像块各像素点的预测值,确定当前图像块各像素点的梯度值。
77.步骤s320、确定当前图像块各像素点的偏移矢量。
78.本技术实施例中,为了实现预测补偿,一方面,可以基于当前图像块的各像素点的预测值,确定当前图像块各像素点的梯度值。
79.另一方面,可以确定当前图像块各像素点的偏移矢量。
80.需要说明的是,在本技术实施例中,确定当前图像块各像素点的梯度值,与确定当前图像块各像素点的偏移矢量这两个操作之间并不存在必然的时序关系,即可以按照图3所示的先确定当前图像块各像素点的梯度值,后确定当前图像块各像素点的偏移矢量;也可以先确定当前图像块各像素点的偏移矢量,后确定当前图像块各像素点的梯度值;还可以并行确定当前图像块各像素点的梯度值和偏移矢量,其具体实现在此不做赘述。
81.步骤s330、基于当前图像块各像素点的梯度值以及偏移矢量,确定当前图像块各像素点的预测补偿值。
82.本技术实施例中,当确定了当前图像块各像素点的梯度值以及偏移矢量时,可以基于当前图像块各像素点的梯度值以及偏移矢量,确定当前图像块各像素点的预测补偿值。
83.步骤s340、基于当前图像块各像素点的预测值以及预测补偿值,确定当前图像块各像素点的最终预测值。
84.本技术实施例中,当确定了当前图像块各像素点的预测补偿值时,可以基于当前图像块各像素点的预测值以及预测补偿值,确定当前图像块各像素点的最终预测值。
85.在图3所示方法流程中,在确定当前图像块各像素点的预测值之后,基于当前图像块各像素点的梯度值以及偏移矢量,确定当前图像块各像素点的预测补偿值,进而,基于当前图像块各像素点的预测值以及预测补偿值,确定当前图像块各像素点的最终预测值,预测补偿调整不需要再限于采用双向预测模式的图像块,且不限于各子块的运动矢量与相应子块中各像素点的运动矢量均相同的图像块,扩展了预测补偿调整的适用范围。
86.本技术实施例中,预测补偿调整不再限于采用双向预测模式的图像块,即对于采用单向预测模式的图像块或采用双向预测模式的图像块均可适用。
87.作为一种可能的实施方式,若当前图像块采用单向预测模式,则上述步骤 s300
中,确定当前图像块各像素点的预测值,可以包括:
88.确定当前图像块各像素点单向的预测值。
89.上述步骤s310中,基于当前图像块各像素点的预测值,确定当前图像块各像素点的梯度值,可以包括:
90.基于当前图像块各像素点单向的预测值,确定当前图像块各像素点该方向的梯度值。
91.上述步骤s320中,确定当前图像块各像素点的偏移矢量,可以包括:
92.确定当前图像块各像素点该方向的偏移矢量;
93.上述步骤s330中,基于当前图像块各像素点的梯度值以及偏移矢量,确定当前图像块各像素点的预测补偿值,可以包括:
94.基于当前图像块各像素点该方向的梯度值以及偏移矢量,确定当前图像块各像素点该方向的预测补偿值;
95.上述步骤s340中,基于当前图像块各像素点的预测值以及预测补偿值,确定当前图像块各像素点的最终预测值,可以包括:
96.基于当前图像块各像素点该方向的预测值以及预测补偿值,确定当前图像块各像素点该方向的最终预测值。
97.示例性的,对于当前图像块采用单向预测模式的情况,在确定当前图像块各像素点的预测值时,可以确定当前图像块各像素点单向的预测值。
98.例如,若当前图像块采用前向预测模式,则可以确定当前图像块各像素点前向的预测值;若当前图像块采用后向预测模式,则可以确定当前图像块各像素点的后向预测值。
99.为便于描述和理解,下文以当前图像块采用的单向预测模式为前向预测模式为例。
100.当确定了当前图像块各像素点前向的预测值时,一方面,可以基于当前图像块各像素点前向的预测值,确定当前图像块各像素点前向的梯度值;另一方面,可以确定当前图像块各像素点前向的偏移矢量。
101.进而,可以基于当前图像块各像素点前向的梯度值以及偏移矢量,确定当前图像块各像素点前向的预测补偿值,并基于当前图像块各像素点前向的预测值以及预测补偿值,确定当前图像块各像素点前向的最终预测值。
102.作为另一种可能的实施方式,若当前图像块采用双向预测模式,则上述步骤s300中,确定当前图像块各像素点的预测值,可以包括:
103.分别确定当前图像块各像素点前向和后向的预测值。
104.上述步骤s310中,基于当前图像块各像素点的预测值,确定当前图像块各像素点的梯度值,可以包括:
105.分别基于当前图像块各像素点前向和双向的预测值,确定当前图像块各像素点前向和后向的梯度值。
106.上述步骤s320中,确定当前图像块各像素点的偏移矢量,可以包括:
107.分别确定当前图像块各像素点前向和后向的偏移矢量;
108.上述步骤s330中,基于当前图像块各像素点的梯度值以及偏移矢量,确定当前图像块各像素点的预测补偿值,可以包括:
109.分别基于当前图像块各像素点前向和后向的梯度值以及偏移矢量,确定当前图像块各像素点前向和后向的预测补偿值;
110.上述步骤s340中,基于当前图像块各像素点的预测值以及预测补偿值,确定当前图像块各像素点的最终预测值,可以包括:
111.分别基于当前图像块各像素点前向和后向的预测值以及预测补偿值,确定当前图像块各像素点前向和后向的最终预测值;
112.基于当前图像块各像素点前向和后向的最终预测值,确定当前图像块各像素点的最终预测值。
113.示例性的,对于当前图像块采用双向预测模式的情况,需要分别确定当前图像块各像素点前向和后向的预测值以及预测补偿值,以确定当前图像块各像素点前向和后向的最终预测值,进而,确定当前图像块各像素点的最终预测值。
114.示例性的,对于当前图像块采用双向预测模式的情况,当前图像块各像素点前向的最终预测值或后向的最终预测值的确定方式可以参见当前图像块采用单向预测模式的实现。
115.当确定了当前图像块各像素点前向的最终预测值以及后向的最终预测值时,可以基于当前图像块各像素点前向和后向的最终预测值,确定当前图像块各像素点的最终预测值。
116.例如,对当前图像块各像素点前向和后向的最终预测值进行加权,以得到当前图像块各像素点的最终预测值。
117.作为一种可能的实施方式,上述步骤s320中,确定当前图像块各像素点的偏移矢量,可以包括:
118.对于当前图像块的任一子块,确定该子块中指定像素点的偏移矢量;
119.基于该子块中指定像素点的偏移矢量,确定该子块中其余像素点的偏移矢量。
120.示例性的,对于当前图像块的任一子块,为了确定该子块中各像素点的偏移矢量,可以先确定该子块中任一像素点(本文中称为指定像素点)的偏移矢量,进而,基于该子块中指定像素点的偏移矢量,确定该子块中其余像素点的偏移矢量。
121.作为一个实施例,以当前图像块采用仿射运动模式(affine模式)为例,上述确定该子块子指定像素点的偏移矢量,可以包括:
122.基于该子块中指定像素点与该子块的中心位置的偏移,以及仿射参数,确定该子块中指定像素点的偏移矢量。
123.示例性的,在当前图像块采用仿射运动模式的情况下,可以基于子块中指定像素点与该子块的中心位置的偏移,以及仿射参数,确定该子块中指定像素点的偏移矢量。
124.在一个示例中,上述基于该子块中指定像素点与该子块的中心位置的偏移,以及仿射参数,确定该子块中所述指定像素点的偏移矢量,可以包括:
125.基于该子块中指定像素点与该子块的中心位置的水平方向的偏移、该子块中指定像素点与该子块的中心位置的垂直方向的偏移,以及第一仿射参数和第二仿射参数,确定该子块中指定像素点的偏移矢量的水平分量;
126.基于该子块中指定像素点与该子块的中心位置的水平方向的偏移、该子块中指定像素点与该子块的中心位置的垂直方向的偏移,以及第三仿射参数和第四仿射参数,确定
该子块中所述指定像素点的偏移矢量的垂直分量。
127.示例性的,对于4参数仿射模型,第一仿射参数与第四仿射参数相同,均为第一数值与该子块的宽的比值,第二仿射参数与所述第三仿射参数相反,且第三仿射参数为第二数值与该子块的宽的比值。
128.对于6参数仿射模型,第一仿射参数为第一数值与该子块的宽的比值,第二仿射参数为第三数值与该子块的高的比值,第三仿射参数为第二数值与该子块的宽的比值,第四仿射参数为第四数值与该子块的高的比值。
129.第一数值为该子块右上控制点的运动矢量的水平分量与左上控制点的运动矢量的水平分量的差值,第二数值为该子块右上控制点的运动矢量的垂直分量与左上控制点的运动矢量的垂直分量的差值,第三数值为该子块左下控制点的运动矢量的水平分量与左上控制点的运动矢量的水平分量的差值,第四数值为该子块左下控制点的运动矢量的垂直分量与左上控制点的运动矢量的垂直分量的差值。
130.举例来说,如图4所示,假设左上控制点、右上控制点以及左下控制点的运动矢量分别为(v
0x
,v
0y
)、(v
1x
,v
1y
)以及(v
2x
,v
2y
),则第一数值为v
1x
‑
v
0x
,第二数值为v
1y
‑
v
0y
、第三数值为v
2x
‑
v
0x
、第四数值为v
2y
‑
v
0y
,4参数模型仿射模型和6参数仿射模型下的第一仿射参数~第四仿射参数(假设分别为c~f)分别可以如公式1和2所示:
[0131][0132][0133]
在一个示例中,基于该子块中指定像素点与该子块的中心位置的偏移,以及仿射参数,确定该子块中所述指定像素点的偏移矢量,可以通过以下公式实现:
[0134][0135]
示例性的,δv
x
(x,y)为该子块中指定像素的偏移矢量的水平分量,δv
y
(x,y) 为该子块中指定像素的偏移矢量的垂直分量,(
△
x,
△
y)为指定像素点与该子块的中心位置的偏移。
[0136]
在一个示例中,上述基于该子块中指定像素点的偏移矢量,确定该子块中其余像素点的偏移矢量,可以包括:
[0137]
基于该子块中指定像素点的偏移矢量的水平分量以及第一仿射参数,确定该子块中与指定像素点同一行的其余像素点的偏移矢量的水平分量;
[0138]
基于该子块中指定像素点的偏移矢量的垂直分量以及第三仿射参数,确定该子块中与指定像素点同一行的其余像素点的偏移矢量的垂直分量;
[0139]
对于该子块中指定像素点所在行的任一像素点,基于该像素点的偏移矢量的水平分量以及第二仿射参数,确定该子块中与该像素点同一列的其余像素点的偏移矢量的水平分量;以及,基于该像素点的偏移矢量的垂直分量以及第四仿射参数,确定该子块中与该像素点同一列的其余像素点的偏移矢量的垂直分量。
[0140]
示例性的,在当前图像块采用仿射运动模式时,当确定了子块中指定像素点的偏移矢量之后,可以基于该子块的偏移矢量、第一仿射参数以及第三仿射参数,分别确定该子块中与该指定像素点同一行的其余像素点的偏移矢量。
[0141]
当确定了该子块中指定像素点所在行的各像素点的偏移矢量时,对于该子块中指定像素点所在行的任一像素点,可以基于该像素点的偏移矢量、第二仿射参数以及第四仿射参数,确定该子块中与该像素点同一列的其余像素点的偏移矢量。
[0142]
举例来说,对于子块中的任一像素点,该像素点的偏移矢量的水平分量可以为该像素点左侧的相邻像素点(若存在)的偏移矢量的水平分量与第一仿射参数之和,或该像素点右侧的相邻像素点(若存在)的偏移矢量的水平分量与第一仿射参数之差;该像素点的偏移矢量的垂直分量可以为该像素点左侧的相邻像素点(若存在)的偏移矢量的垂直分量与第三仿射参数之和,或该像素点右侧的相邻像素点(若存在)的偏移矢量的垂直分量与第三仿射参数之差。
[0143]
此外,对于子块中的任一像素点,该像素点的偏移矢量的水平分量可以为该像素点上方的相邻像素点(若存在)的偏移矢量的水平分量与第二仿射参数之和,或该像素点下方的相邻像素点(若存在)的偏移矢量的水平分量与第二仿射参数之差;该像素点的偏移矢量的垂直分量可以为该像素点上方的相邻像素点(若存在)的偏移矢量的垂直分量与第四仿射参数之和,或该像素点下方的相邻像素点(若存在)的偏移矢量的垂直分量与第四仿射参数之差。
[0144]
作为一种可能的实施方式,上述步骤s310中,基于当前图像块各像素点的预测值,确定当前图像块各像素点的梯度值,可以包括:
[0145]
对于当前图像块的任一子块,对该子块的上下左右边缘分别填充n行/列整像素点;
[0146]
基于该子块各像素点的预测值,以及所填充的整像素点的像素值,确定该子块中各像素点的梯度值。
[0147]
示例性的,考虑到确定像素点的梯度值的水平分量时,需要使用该像素点左侧像素点的像素值以及该像素点右侧像素点的像素值,确定像素点的梯度值的垂直分量时,需要使用该像素点上方像素点的像素值以及该像素点下方像素点的像素值,而子块边缘的像素点会缺少至少一侧的像素点。
[0148]
例如,对于子块上边缘的像素点,在该子块内不存在上方的像素点;对于子块左边缘的像素点,在该子块内不存在左侧的像素点。
[0149]
因此,为了确定子块内各像素点的梯度值,需要对该子块的上下左右边缘分别填充n(n为正整数)行/列整像素点(像素为整数),并基于该子块各像素点的预测值,以及所填充的整像素点的像素值,确定该子块中各像素点的梯度值。
[0150]
示例性的,为了减少带宽增加,填充的行/列的整像素点的像素值可以直接从参考像素的近邻整像素点拷贝获得。
[0151]
作为一个实施例,上述对该子块的上下左右边缘分别填充n行/列整像素点,可以包括:
[0152]
确定参考帧中与该子块最近的等尺寸整像素块;
[0153]
将该整像素块周围最近邻的n行/列整像素点的像素值分别作为该子块的上下左右边缘的填充值。
[0154]
示例性的,为了实现对该子块的上下左右边缘的n行/列整像素点的填充,可以先确定参考帧中与该子块最近的等尺寸整像素块(整像素点构成的块)。
[0155]
例如,假设子块为4*4子块,则可以确定参考帧中与该子块最接近的4*4 子块整像素块,其示意图可以如图5a所示。
[0156]
确定了参考帧中与该子块最近的等尺寸整像素块时,可以将该整像素块周围相邻的n行/列整像素点的像素值分别作为该子块的上下左右边缘的填充值。
[0157]
例如,n=1和n=2的填充点的示意图可以分别如图5b和5c所示。
[0158]
在一个示例中,上述对该子块的上下左右边缘分别填充n行/列整像素点,可以包括:
[0159]
分别对整像素块正上方、正下方、正左侧以及正右侧的n行/列的整像素点进行填充。
[0160]
示例性的,考虑到对子块的上下左右边缘填充n行/列整像素点后,会得到一个宽和高均比原来增大2n的块,基于该块中各像素点的像素值,计算原子块中各像素点的梯度值时,该块外侧的n层像素点中各层像素点的角点并不会被使用。
[0161]
因而,为了减少填充工作量,提高填充效率,在对子块的上下左右边缘分别填充n行/列整像素点时,可以分别对参考帧中与该子块最近的等尺寸的整像素块正上方、正下方、正左侧以及正右侧的n行/列的整像素点进行填充。
[0162]
例如,以n=2为例,最终确定的填充点可以如图5d所示。
[0163]
作为一个实施例,当n=1时,上述对该子块的上下左右边缘分别填充n行 /列整像素点,可以包括:
[0164]
若该子块中像素点的预测值的分像素垂直分量大于半像素,则对该子块的上边缘填充上方的最近邻整像素点,并对该子块的下边缘填充下方的次近邻整像素点;
[0165]
若该子块中像素点的预测值的分像素垂直分量小于半像素,则对该子块的上边缘填充上方的次近邻整像素点,并对该子块的下边缘填充下方的最近邻整像素点;
[0166]
若该子块中像素点的预测值的分像素水平分量大于半像素,则对该子块的左边缘填充左侧的最近邻整像素点,并对该子块的右边缘填充右侧的次近邻整像素点;
[0167]
若该子块中像素点的预测值的分像素水平分量小于半像素,则对该子块的左边缘填充左侧的次近邻整像素点,并对该子块的右边缘填充右侧的最近邻整像素点。
[0168]
示例性的,以确定像素点的梯度值的水平分量为例,考虑到在确定像素点的梯度值的水平分量时,需要使用该像素点左侧与该像素点的相对位移为一个像素的像素点的像素值,以及右侧与该像素点的相对位移为一个像素的像素点的像素值。此外,对子块进行像素点填充时,填充的行/列均为整像素点,因此,当子块中像素点的预测值为非整像素时,所
填充的整像素点与该子块边缘的像素点的相对位移不会是一个像素(非整像素点与整像素点之间的相对位移为非整像素)。
[0169]
为了减少所确定的像素点的梯度值的误差,提高所确定的像素点的梯度值的精度,在对子块的上下左右边缘进行1行/列整像素点的填充时,可以基于子块中像素点的预测值的分像素(即除整像素之外的部分,如像素值为5.4,则分像素为0.4)的垂直分量和水平分量是否大于半像素(即0.5像素),来选择填充的整像素点的位置。
[0170]
以上边缘和下边缘的整像素点填充为例。
[0171]
可以获取子块中像素点的预测值的分像素的垂直分量,并比较该分像素垂直分量与半像素。
[0172]
示例性的,子块中像素点的预测值的分像素是指子块中像素点的预测值在参考帧中对应的位置的分像素。
[0173]
当该分像素垂直分量大于半像素时,对于该子块上边缘任一像素点,相对于该像素点上方的其余整像素点,该像素点上方的最近邻整像素点与该像素点的相对位移最接近一个像素,因此,对该像素点填充上方的最近邻整像素点。
[0174]
而对于该子块下边缘任一像素点,相对于该像素点下发的其余整像素点,该像素点下方的次近邻整像素点与该像素点的相对位移最接近一个像素。
[0175]
举例来说,假设该子块下边缘某像素点的分像素垂直分量为0.8,则该像素点下方的最近邻整像素点与该像素点的相对位移为0.2,该像素点下方的次近邻整像素点与该像素点的相对位移为1.2,该像素点下方的其余整像素点与该像素点的相对位移均大于1.2,显然,该像素点下方的次近邻整像素点与该像素点的相对位移最接近一个像素。
[0176]
因此,对该像素点填充下方的次近邻整像素点。
[0177]
同理,若该子块中像素点的预测值的分像素垂直分量小于半像素,则对该子块的上边缘填充上方的次近邻整像素点,并对该子块的下边缘填充下方的最近邻整像素点;
[0178]
若该子块中像素点的预测值的分像素水平分量大于半像素,则对该子块的左边缘填充左侧的最近邻整像素点,并对该子块的右边缘填充右侧的次近邻整像素点;
[0179]
若该子块中像素点的预测值的分像素水平分量小于半像素,则对该子块的左边缘填充左侧的次近邻整像素点,并对该子块的右边缘填充右侧的最近邻整像素点。
[0180]
需要说明的是,对于像素点的预测值的分像素水平分量等于半像素的情况,可以按照像素点的预测值的分像素水平分量大于半像素的情况进行处理,或,按照像素点的预测值的分像素水平分量小于半像素的情况进行处理。
[0181]
同理,对于像素点的预测值的分像素水平分量等于半像素的情况,可以按照像素点的预测值的分像素水平分量大于半像素的情况进行处理,或,按照像素点的预测值的分像素水平分量小于半像素的情况进行处理。
[0182]
在一个示例中,上述对该子块的上下左右边缘分别填充1行/列整像素点,包括:
[0183]
对该子块的上下左右边缘填充的行/列构成的填充区域中除4个角点之外的整像素点进行填充。
[0184]
示例性的,考虑到对子块的上下左右边缘填充1行/列整像素点后,会得到一个宽和高均比原来增大2的块,基于该块中各像素点的像素值,计算原子块中各像素点的梯度值时,该块的4个角点并不会被使用。
[0185]
举例来说,假设原子块为4*4子块,则对该子块的上下左右边缘分别填充1 行/列整像素点可以得到一个6*6的块,在计算原4*4块中各像素点的梯度值时,该6*6块的4个角点并不会被使用。
[0186]
因而,为了减少填充工作量,提高填充效率,在对子块的上下左右边缘分别填充1行/列整像素点时,可以对该子块的上下左右边缘填充的行/列构成的填充区域中除4个角点之外的整像素点进行填充。
[0187]
在一个示例中,上述基于该子块各像素点的预测值,以及所填充的整像素点的像素值,确定该子块中各像素点的梯度值,可以包括:
[0188]
对于该子块中任一像素点,基于该像素点左侧的n个相邻像素点的像素值和右侧的n个相邻像素点的像素值,确定该像素点的梯度值的水平分量,并根据该像素点上方的n个相邻像素点的像素值和下方的n个相邻像素点的像素值,确定该像素点的梯度值的垂直分量。
[0189]
示例性的,对于子块中任一像素点,可以分别基于该像素点左侧像素点的像素值和右侧像素点的像素值确定该像素点的梯度值的水平分量,并基于该像素点上方像素点的像素值和下方像素点的像素值。
[0190]
对于该子块边缘的像素点,在确定该像素点的梯度值的水平分量或/和垂直分量时,需要使用该像素点相邻的填充整像素点的像素值。
[0191]
例如,对于该子块上边缘的像素点,在确定该像素点的梯度值的垂直分量时,需要使用该像素点上方的相邻的填充整像素点(最近邻整像素点或次近邻整像素点)的像素值;对于该子块左边缘的像素点,在确定该像素点的梯度值的水平分量时,需要使用该像素点左侧的相邻的填充整像素点。
[0192]
举例来说,以n=1为例,对于子块中任一像素点,可以通过以下公式确定该像素点的梯度值:
[0193]
g
x
(i,j)=i(i+1,j)
‑
i(i
‑
1,j)
ꢀꢀꢀꢀꢀꢀ
(4)
[0194]
g
y
(i,j)=i(i,j+1)
‑
i(i,j
‑
1)
ꢀꢀꢀꢀꢀꢀ
(5)
[0195]
示例性的,g
x
(i,j)为子块中第i列,第j行的像素点的梯度值的水平分量, g
y
(i,j)为子块中第i列,第j行的像素点的梯度值的水平分量,i(i,j)为子块中第 i列,第j行的像素点的像素值。
[0196]
需要说明的是,对于编码端,子块内的像素点,其像素值为预测值;填充的整像素点,其像素值为原始值;对于解码端,子块内的像素点,其像素值为预测值;填充的整像素点,其像素值为重建值。
[0197]
为了保证本技术实施例提供的预测补偿调整方案的效果,避免在不适用本技术实施例提供的预测补偿调整方案的场景使用该方案,可以预先设定允许启用本技术实施例提供的预测补偿调整方案的条件(本文中称为预测补偿调整启用条件)。
[0198]
作为一种可能的实施方式,上述基于当前图像块各像素点的预测值,确定当前图像块各像素点的梯度值之前,还可以包括:
[0199]
确定当前图像块是否满足预测补偿调整启用条件;
[0200]
若是,则确定执行上述基于当前图像块各像素点的预测值,确定当前图像块各像素点的梯度值。
[0201]
在一个示例中,预测补偿调整启用条件可以包括当前图像块采用指定预测模式,该指定预测模式下子块的运动矢量与子块中各像素点的运动矢量不完全相同。
[0202]
示例性的,考虑到对于子块的运动矢量与子块中各像素点的运动矢量不完全相同的预测模式(本文中称为指定预测模式)下,无法基于现有的预测补偿调整方案进行预测补偿调整,因此,可以将预测补偿调整启用条件设置为当前图像块采用指定预测模式。
[0203]
当确定了当前图像块各像素点的预测值时,可以基于当前图像块的预测模式确定是否启用本技术实施例提供的预测补偿调整方案。
[0204]
若启用,即当前图像块采用指定预测模式时,按照上述实施例中描述的方式对当前图像块进行预测补偿调整。
[0205]
示例性的,指定预测模块包括仿射运动模式。
[0206]
在另一个示例中,上述预测补偿调整启用条件还可以包括:当前预测的分量为亮度分量,即对采用指定预测模式的图像块亮度分量按照本技术实施例提供的预测补偿调整方案进行预测补偿调整。
[0207]
在又一个示例中,上述预测补偿调整启用条件还可以包括:当前预测的分量为色度分量,即对采用指定预测模式的图像块色度分量按照本技术实施例提供的预测补偿调整方案进行预测补偿调整。
[0208]
为了使本领域技术人员更好地理解本技术实施例提供的技术方案,下面结合具体实例对本技术实施例提供的技术方案进行说明。
[0209]
实施例一
[0210]
请参见图6,为本技术实施例提供的一种解码方法的流程示意图,其中,以采用affine模式为例,如图6所示,该解码方法可以包括:
[0211]
步骤s600、确定解码块各像素点的预测值。
[0212]
示例性的,以将解码块划分为4*4子块,并分别对各子块进行解码为例。
[0213]
对于任一4*4子块,可以基于affine模式确定该子块中各像素点的预测值。
[0214]
示例性的,对于子块内坐标为(i,j)的像素点,其像素值记为i(i,j)。
[0215]
步骤s610、确定该解码块是否满足预测补偿调整启用条件,若是,则转至步骤s620;否则,结束当前流程。
[0216]
示例性的,确定了解码块各像素点的预测值之后,可以确定该解码块是否满足预测补偿调整启用条件。
[0217]
若确定该解码块不满足预测补偿调整启用条件,则可以不再按照本技术实施例提供的预测补偿调整方案进行预测补偿调整,此时,可以将步骤s600确定的解码块各像素点的预测值确定为各像素点的最终预测值;或者,可以按照其他策略进行预测补偿调整方案,其具体实现不做限定。
[0218]
步骤s620、对于任一子块,基于子块各像素点的预测值,确定该子块各像素点的梯度值。
[0219]
步骤s630、确定该子块各像素点的偏移矢量。
[0220]
示例性的,当确定该解码块满足预测补偿调整启用条件时,对于任一4*4 子块,一方面,可以基于4*4子块各像素点的预测值,确定该4*4子块各像素点的梯度值。
[0221]
另一方面,可以确定该4*4子块各像素点的偏移矢量。
[0222]
步骤s640、基于该子块各像素点的梯度值以及偏移矢量,确定该子块各像素点的预测补偿值。
[0223]
示例性的,对于4*4子块,当确定了该4*4子块各像素的梯度值以及偏移矢量时,可以基于该4*4子块各像素点的梯度值以及偏移矢量,确定该4*4子块各像素点的预测补偿值。
[0224]
步骤s650、基于解码块各像素点的预测值以及预测补偿值,确定解码块各像素点的最终预测值。
[0225]
示例性的,若解码块采用单向预测模式,则可以按照上述步骤s500~s530 描述的方式确定解码块各像素点该方向的预测值和预测补偿值,进而,得到解码块各像素点的最终预测值。
[0226]
若解码块是采用双向预测模式,则可以先分别按照上述步骤s500~s530描述的方式确定解码块各像素点前向和后向的预测值和预测补偿值,进而,得到解码块各像素点最终预测值。
[0227]
实施例二
[0228]
在一个示例中,上述步骤s600至步骤s650包括的预测补偿调整方法流程的启用条件可以包括:
[0229]
当前图像块采用仿射运动模式。
[0230]
实施例三
[0231]
在一个示例中,上述步骤s600至步骤s650包括的预测补偿调整方法流程的启用条件可以包括:
[0232]
当前图像块采用仿射运动模式;
[0233]
当前预测的分量为亮度分量。
[0234]
实施例四
[0235]
在一个示例中,上述步骤s600至步骤s650包括的预测补偿调整方法流程的启用条件可以包括:
[0236]
当前图像块采用仿射运动模式;
[0237]
当前预测的分量为色度分量。
[0238]
实施例五、
[0239]
在一个示例中,在前述任一实施例的基础上,步骤s620中,确定子块各像素点的梯度值,可以包括:
[0240]
1、对4*4块进行上下左右边缘分别填充1行/列整像素点,得的对应的6*6 块。
[0241]
示例性的,对4*4块上下左右边缘填充的整像素点的像素值可以来自参考帧中的相邻整像素点的重建值。
[0242]
2、基于6*6块中各像素点的像素值,计算4*4子块中各像素点的梯度值。
[0243]
示例性的,对于4*4子块中任一像素点,可以基于公式4和5确定该像素点的梯度值(像素点的梯度值的水平分量可以描述为:mm_gradx,像素点的梯度值的垂直分量可以描述为:mm_grady)。
[0244]
实施例六、
[0245]
示例性的,在实施例五的基础上,对4*4子块进行上下左右边缘分别填充1 行/列
整像素点,可以包括以下实施方式:
[0246]
作为一种示例,可以基于4*4子块中像素点的预测值的分像素水平分量和垂直分量是否大于半像素,选择4*4子块上下左右边缘填充的整像素点。
[0247]
请参见图7a,对于像素点的预测值的分像素的水平分量和垂直分量均大于半像素的情况,对该4*4子块的上边缘填充上方的最近邻整像素点,对4*4子块的下边缘填充下方的次近邻整像素点,对4*4子块的左边缘填充左侧最近邻整像素点,以及对4*4子块的右边缘填充右侧的次近邻整像素点。
[0248]
请参见7b,对于像素点的预测值的分像素的水平分量和垂直分量均小于半像素的情况,对该4*4子块的上边缘填充上方的次近邻整像素点,对4*4子块的下边缘填充下方的最近邻整像素点,对4*4子块的左边缘填充左侧次近邻整像素点,以及对4*4子块的右边缘填充右侧的最近邻整像素点。
[0249]
请参见7c,对于像素点的预测值的分像素的水平分量大于半像素,垂直分量小于半像素的情况,对该4*4子块的上边缘填充上方的次近邻整像素点,对 4*4子块的下边缘填充下方的最近邻整像素点,对4*4子块的左边缘填充左侧最近邻整像素点,以及对4*4子块的右边缘填充右侧的次近邻整像素点。
[0250]
请参见图7d,对于像素点的预测值的分像素的水平分量小于半像素,垂直分量大于半像素的情况,对该4*4子块的上边缘填充上方的最近邻整像素点,对4*4子块的下边缘填充下方的次近邻整像素点,对4*4子块的左边缘填充左侧次近邻整像素点,以及对4*4子块的右边缘填充右侧的最近邻整像素点。
[0251]
示例性的,在图7a~7d中,三角形为4*4子块各像素点的预测值,圆形为参考帧中整像素点的重建值,带阴影的圆形为所选择用于填充的参考帧中的整像素点的重建值。
[0252]
需要说明的是,对于像素点的预测值的分像素的水平分量等于半像素的情况,可以按照像素点的预测值的分像素水平分量大于半像素的情况进行处理,或,按照像素点的预测值的分像素水平分量小于半像素的情况进行处理。
[0253]
同理,对于像素点的预测值的分像素水平分量等于半像素的情况,可以按照像素点的预测值的分像素水平分量大于半像素的情况进行处理,或,按照像素点的预测值的分像素水平分量小于半像素的情况进行处理。
[0254]
实施例七、
[0255]
作为一种示例,在实施例六的基础上,由于填充区域的四个角点的像素值并不会被使用,因此在对4*4子块的上下左右边缘填充1行/列整像素点时,可以不对该4个角点进行填充,分别进行上下左右各4个点(共16个点)的填充。
[0256]
以像素点的预测值的分像素的水平分量和垂直分量均大于半像素的情况为例,对4*4子块的上下左右边缘填充1行/列后的示意图可以如图7e所示。
[0257]
其他情况同理可得。
[0258]
实施例八、
[0259]
在一个示例中,在前述任一实施例的基础上,上述步骤s630中,确定该子块各像素点的偏移矢量可以包括:
[0260]
1、计算仿射参数c(即上述第一仿射参数)、d(即上述第二仿射参数)、 e(即上述第三仿射参数)以及f(即上述第四仿射参数)。
[0261]
示例性的,仿射参数c、d、e和f,可以通过公式1和2确定。
[0262]
2、基于仿射参数c、d、e和f,以及4*4子块中第一个像素点与4*4子块的中心位置的偏移,确定4*4子块中第一个像素点的偏移矢量。
[0263]
示例性的,以上述指定像素点为第一个像素点为例。
[0264]
可以基于4*4子块中第一个像素点的坐标以及4*4子块的中心位置的坐标,确定4*4子块中第一像素点与4*4子块的中心位置的偏移(假设为(
△
x,
△
y))。
[0265]
则4*4子块第一个像素点的偏移矢量可以通过以下公式确定:
[0266][0267]
3、基于4*4子块中第一个像素点的偏移矢量,确定该4*4子块中其余像素点的偏移矢量。
[0268]
示例性的,基于公式6确定了4*4子块中第一个像素点的偏移矢量之后,可以通过以下公式确定4*4子块中第一行的其余像素点的偏移矢量:
[0269][0270]
示例性的,δv
x
(w,0)为4*4子块中第w+1列第1行的像素点的偏移矢量的水平分量,δv
y
(w,0)为4*4子块中第w+1列第1行的像素点的偏移矢量的垂直分量,1≤w≤3。基于公式7确定4*4子块第一行的像素点的偏移矢量之后,可以通过以下公式确定4*4子块中其余像素点的偏移矢量:
[0271][0272]
示例性的,δv
x
(w,h)为4*4子块中第w+1列第h+1行的像素点的偏移矢量的水平分量,δv
y
(w,h)4*4子块中第w+1列第h+1行的像素点的偏移矢量的垂直分量,1≤h≤3。
[0273]
需要说明的是,由于affine模式参数,以及各子块中相同位置的像素点与子块的中心位置的偏移均相同,因此,在计算了一个子块各像素点的偏移矢量之后,解码块中的其余子块可以复用该子块各像素点的偏移矢量。
[0274]
实施例九
[0275]
在一个示例中,在实施例八的基础上,为了保证精度,并提高硬件友好性,在计算仿射参数c、d、e和f时,可以采用“先左移位再右移位”代替除法。
[0276]
对于c和e,可以先左移(max_cu_depth
‑
log2[width])位,后右移 max_cu_depth位;对于6参数模型中的d和f,可以先左移 (max_cu_depth
‑
log2[height])位,后右移max_cu_depth位。
[0277]
示例性的,width为当前图像块的宽,height为当前图像块的高, max_cu_depth为最大图像块的宽或高的深度,默认为7(即对应图像块的宽或高为128)。
[0278]
在一个示例中,以max_cu_depth=7为例,则c、d、e和f可以分别通过以下公式确定:
[0279]
c=(v
1x
‑
v
0x
)<<(7
‑
log2[width])
ꢀꢀꢀ
(9)
[0280]
e=(v
1y
‑
v
0y
)<<(7
‑
log2[width])
ꢀꢀꢀ
(10)
[0281]
对于6参数模型:
[0282]
d=(v
2x
‑
v
0x
)<<(7
‑
log2[height])
ꢀꢀꢀ
(11)
[0283]
f=(v
2y
‑
v
0y
)<<(7
‑
log2[height])
ꢀꢀꢀ
(12)
[0284]
示例性的,<<表示左移。
[0285]
对于4参数模型:
[0286]
d=
‑
e
[0287]
f=c。
[0288]
实施例十
[0289]
在一个示例中,为了提高偏移矢量的精度,在前述任一实施例的基础上,确定4*4子块各像素点的偏移矢量时,可以对各像素点的偏移矢量进行放大。
[0290]
举例来说,在偏移矢量的计算过程中,可以将4*4子块各像素点的偏移矢量放大n1(n1为正整数,如4或8等)倍,进而,4*4子块中第一个像素点的偏移矢量可以通过以下公式确定:
[0291][0292]
基于公式9确定了4*4子块中第一个像素点的偏移矢量之后,可以通过以下公式确定4*4子块中第一行的其余像素点的偏移矢量:
[0293][0294]
基于公式10确定4*4子块第一行的像素点的偏移矢量之后,可以通过以下公式确定4*4子块中其余像素点的偏移矢量:
[0295][0296]
基于公式13~15确定了4*4子块各像素点放大n1倍的偏移矢量之后,可以将各像素点放大n1倍的偏移矢量缩小n2倍。
[0297]
示例性的,n2可以与n1相同,也可以与n1不同。
[0298]
例如,假设n1为4,则n2可以为4,或者,n2可以为2(即最终确定的偏移矢量为放大2倍后的偏移矢量)。
[0299]
在一个示例中,可以通过以下公式对所确定的偏移矢量进行缩小:noffset=
[0300]
1<<(max_cu_depth
‑
1)
ꢀꢀꢀ
(16)
[0301]
mvx=(mvx+noffset
‑
(mvx>=0))>>max_cu_depth
ꢀꢀꢀ
(17)
[0302]
mvy=(mvy+noffset
‑
(mvy>=0))>>max_cu_depth
ꢀꢀꢀ
(18)
[0303]
示例性的,mvx为某像素点偏移矢量的水平分量,mvy为该像素点偏移矢量的垂直分量,>>表示右移,<<表示左移,mvx>=0表示若mvx大于等于0成立,则令mvx=1,否则,令mvx=0;mvy>=0表示若mvy大于等于0成立,则令mvy=1,否则,令mvy=0。
[0304]
示例性的,限制mvx和mvy在[
‑
(1<<bdlimit),(1<<bdlimit)
‑
1]范围内;bdlimit为经验值。
[0305]
在一个示例中,bdlimit=max(6,bitdepth
‑
6),bitdpth为比特深度,即亮度值所
需比特宽度,一般为10或8。
[0306]
在另一个示例中,bdlimit=max(5,bitdepth
‑
7)。
[0307]
实施例十一
[0308]
在一个示例中,在实施例八~实施例十任一实施例的基础上,假设4*4子块中第一个像素点与该4*4子块中心位置的偏移为(
‑
1.5,
‑
1.5),则δv
x
(0,0)=
‑
1.5c
‑
1.5d,δv
y
(0,0)=
‑
1.5e
‑
1.5f,放大4倍后的偏移矢量的水平分量和垂直分量为分别为:δv
x
(0,0)=
‑
6c
‑
6d,δv
y
(0,0)=
‑
6e
‑
6f。
[0309]
实施例十二
[0310]
在一个示例中,在实施例八~实施例十任一实施例的基础上,假设4*4子块中第一个像素点与该4*4子块中心位置的偏移为(
‑
2,
‑
2),则δv
x
(0,0)=
‑
2c
‑
2d,δv
y
(0,0)=
‑
2e
‑
2f,放大4倍后的偏移矢量的水平分量和垂直分量为分别为δv
x
(0,0)=
‑
8c
‑
8d,δv
y
(0,0)=
‑
8e
‑
8f。
[0311]
实施例十三
[0312]
在一个示例中,在实施例一~实施例七任一实施例的基础上,子块中各像素点的偏移矢量均可以通过以下公式确定:
[0313]
δv
x
(w,h)=w*n3c+w*n3d
‑
posoffsetx
ꢀꢀꢀꢀ
(19)
[0314]
δv
y
(w,h)=w*n3e+w*n3f
‑
posoffsety
ꢀꢀꢀ
(20)
[0315]
示例性的,n3为偏移矢量的放大倍数,如4;posoffsetx=n4*c+n4*d, posoffsety=n4*e+n4*f,n4为6或8。
[0316]
实施例十四
[0317]
在一个示例中,在前述任一实施例的基础上,基于该子块各像素点的梯度值以及偏移矢量,确定该子块各像素点的预测补偿值,可以通过以下公式实现:
[0318]
δi(i,j)=g
x
(i,j)*δv
x
(i,j)+g
y
(i,j)*δv
y
(i,j)
ꢀꢀꢀ
(21)
[0319]
示例性的,δi(i,j)为子块中第i列第j行的像素点的预测补偿值,g
x
(i,j)为该子块中第i列第j行的像素点的梯度值的水平分量,g
y
(i,j)为该子块中第i列第j行的像素点的梯度值的垂直分量,δv
x
(i,j)为该子块中第i列第j行的像素点的偏移矢量的水平分量,δv
y
(i,j)为该子块中第i列第j行的像素点的偏移矢量的垂直分量。
[0320]
实施例十五
[0321]
在一个示例中,在前述任一实施例的基础上,若解码块采用单向预测模式,单向(前向或后向)的预测补偿调整可以通过以下公式实现:
[0322]
mm_di1=mvx*mm_gradx+mvy*mm_grady
ꢀꢀꢀꢀ
(22)
[0323]
mm_di2=(mm_di1+1)>>1
ꢀꢀꢀꢀꢀ
(23)
[0324]
mm_di3=(mm_src+mm_di2)*mm_w
ꢀꢀꢀ
(24)
[0325]
示例性的,mm_di2为某像素点单向的预测补偿值,mm_di3为该像素点该方向的最终预测值,mvx为该像素点单向的偏移矢量的水平分量,mvy为该像素点该方向的偏移矢量的垂直分量,mm_gradx为该像素点该方向的梯度值的水平分量,mm_grady为该像素点该方向的梯度值的垂直分量,mm_src为该像素点该方向的预测值,mm_w为该像素点该方向的权重值,单向预测模式下的值为1。
[0326]
实施例十六
[0327]
在一个示例中,在前述任一实施例的基础上,若解码块采用双向预测模式,则分别完成前向和后向的预测补偿调整,然后实现解码块的预测补偿调整。
[0328]
示例性的,前向的预测补偿调整可以通过以下公式实现:
[0329]
mm_di01=mvx0*mm_gradx0+mvy0*mm_grady0
ꢀꢀꢀ
(25)
[0330]
mm_di02=(mm_di01+1)>>1
ꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀ
(26)
[0331]
mm_di03=(mm_src0+mm_di02)*mm_w0
ꢀꢀꢀꢀꢀꢀꢀꢀ
(27)
[0332]
示例性的,mm_di02为某像素点前向的预测补偿值,mm_di03为该像素点前向的最终预测值,mvx0为该像素点前向的偏移矢量的水平分量,mvy0为该像素点前向的偏移矢量的垂直分量,mm_gradx0为该像素点前向的梯度值的水平分量,mm_grady0为该像素点前向的梯度值的垂直分量,mm_src0为该像素点前向的预测值,mm_w0为该像素点前向的权重值。
[0333]
示例性的,后向的预测补偿调整可以通过以下公式实现:
[0334]
mm_di11=mvx1*mm_gradx1+mvy1*mm_grady1
ꢀꢀꢀ
(28)
[0335]
mm_di12=(mm_di11+1)>>1
ꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀ
(29)
[0336]
mm_di13=(mm_src1+mm_di12)*mm_w1
ꢀꢀꢀꢀꢀꢀꢀꢀ
(30)
[0337]
示例性的,mm_di12为某像素点后向的预测补偿值,mm_di13为该像素点后向的最终预测值,mvx1为该像素点后向的偏移矢量的水平分量,mvy1为该像素点后向的偏移矢量的垂直分量,mm_gradx1为该像素点后向的梯度值的水平分量,mm_grady1为该像素点后向的梯度值的垂直分量,mm_src1为该像素点后向的预测值,mm_w1为该像素点后向的权重值。
[0338]
基于解码块各像素点前向和后向的最终预测值,完成加权过程(将前向的最终预测值与后向的最终预测值二者之和除以前向的权重值与后向的权重值二者之和),得到解码块各像素点的最终预测值。
[0339]
实施例十七
[0340]
请参见图8,为本技术实施例提供的一种候选运动矢量选择方法的流程示意图,如图8所示,该候选运动矢量选择方法可以包括以下步骤:
[0341]
步骤s800、确定当前图像块是否满足时域参考帧使用条件。若是,则转至步骤s810;否则,转至步骤s820。
[0342]
步骤s810、允许使用时域参考帧的运动矢量,用于当前图像块的编码/解码。
[0343]
步骤s820、拒绝使用时域参考帧的运动矢量,用于当前图像块的编码/解码。
[0344]
本技术实施例中,考虑到在某些特定情况下,时域参考帧的运动矢量被最终选中的概率较低,为了提高编解码性能,避免在不适用时域参考帧的运动矢量的情况下,将时域参考帧的运动矢量作为候选运动矢量,可以预先设定是否允许使用时域参考帧的运动矢量的条件(本文中称为时域参考帧使用条件)。
[0345]
相应地,当对当前图像块进行编码/解码时,可以确定当前图像块是否满足时域参考帧使用条件,确定允许使用时域参考帧的运动矢量,用于当前图像块的编码/解码,或,拒绝使用时域参考帧的运动矢量,用于当前图像块的编码/解码。
[0346]
在一个示例中,上述时域参考帧使用条件,可以包括:
[0347]
参考帧的尺寸与当前图像块所属帧的尺寸相同。
[0348]
示例性的,考虑到当参考帧的尺寸与当前图像块所属帧的尺寸不同时,时域参考帧的运动矢量被最终选中的概率较低,因此,为了提高编解码性能,可以将参考帧尺寸与当
前图像块所属帧的尺寸相同,作为时域参考帧使用条件,即当参考帧的尺寸与当前图像块所属帧的尺寸相同时,允许使用时域参考帧的运动矢量,用于当前图像块的编码/解码;当参考帧的尺寸与当前图像块所属帧的尺寸不同时,拒绝使用时域参考帧的运动矢量,用于当前图像块的编码/解码。
[0349]
在另一示例中,上述时域参考帧使用条件,还可以包括:
[0350]
参考帧不是长期参考帧。
[0351]
示例性的,长期参考帧是相对与当前图像块所属帧相邻较近的参考帧而言的,一般而言,长期参考帧离当前图像块所属帧较远。
[0352]
示例性的,考虑到当参考帧的尺寸与当前图像块所属帧的尺寸相同,但参考帧为长期帧时,时域参考帧的运动矢量被最终选中的概率较低,因此,还可以将参考帧不是长期参考帧,作为时域参考帧使用条件,即当参考帧的尺寸与当前图像块所属帧的尺寸相同,且参考帧不是长期参考帧时,允许使用时域参考帧的运动矢量,用于当前图像块的编码/解码;当参考帧的尺寸与当前图像块所属帧的尺寸不同,或/和参考帧为长期参考帧时,拒绝使用时域参考帧的运动矢量,用于当前图像块的编码/解码。
[0353]
在一种可能的实施方式中,上述允许使用时域参考帧的运动矢量,用于当前图像块的编码/解码之后,还可以包括:
[0354]
确定当前图像块是否满足时域参考帧运动矢量缩放使用条件;
[0355]
若是,则允许缩放使用时域参考帧的运动矢量,用于当前图像块的编码/解码;
[0356]
否则,拒绝缩放使用时域参考帧的运动矢量,用于当前图像块的编码/解码。
[0357]
示例性的,考虑到在某些特定情况下,缩放后的时域参考帧的运动矢量被最终选中的概率较低,因此,为了提高编解码性能,避免在不适用缩放后的时域参考帧的运动矢量的情况下,将缩放后的时域参考帧的运动矢量作为候选运动矢量,可以预先设定是否允许使用缩放后的时域参考帧的运动矢量的条件(本文中时域参考帧运动矢量缩放使用条件)。
[0358]
在一个示例中,上述时域参考帧运动矢量缩放使用条件,可以包括:
[0359]
参考帧的尺寸与当前图像块所属帧的尺寸相同,以及参考帧不是长期参考帧。
[0360]
示例性的,考虑到当参考帧的尺寸与当前图像块所属帧的尺寸不同,或/和参考帧为长期帧时,缩放后的时域参考帧的运动矢量被最终选中的概率较低,因此,可以将参考帧尺寸与当前图像块所属帧的尺寸相同,以及参考帧不是长期参考帧,作为时域参考帧运动矢量缩放使用条件。
[0361]
当参考帧的尺寸与当前图像块所属帧的尺寸相同,且参考帧不是长期参考帧时,允许使用缩放后的时域参考帧的运动矢量,用于当前图像块的编码/解码;当参考帧的尺寸与当前图像块所属帧的尺寸不同,或/和参考帧为长期参考帧时,拒绝使用缩放后的时域参考帧的运动矢量,用于当前图像块的编码/解码。
[0362]
在一种可能的实施方式中,上述确定当前图像块是否满足时域参考帧使用条件之后,还包括:
[0363]
当满足时域参考帧使用条件时,确定允许使用第一类型预测模式;
[0364]
当不满足时域参考使用条件时,确定拒绝使用第一类型预测模式,以及第二类型预测模式。
[0365]
在一个示例中,第一类型预测模式包括涉及到时域运动矢量的模式,如 tmvp模
式,bdof模式,dmvr模式等;第二类型预测模式包括涉及到对时域运动矢量进行缩放的模式,如smvd模式。
[0366]
需要说明的是,在一个示例中,当满足时域参考帧使用条件时,还可以允许使用第二类型预测模式。
[0367]
在一种可能的实施方式中,上述确定是否满足时域参考帧运动矢量缩放使用条件之后,还可以包括:
[0368]
若满足时域参考帧运动矢量缩放使用条件,则允许使用第一类型预测模式以及第二类型预测模式;
[0369]
若不满足时域参考帧运动矢量缩放使用条件,则拒绝使用第二类型预测模式。
[0370]
在一个示例中,当不满足时域参考帧运动矢量缩放使用条件时,还可以拒绝使用第二类型预测模式。
[0371]
实施例十八
[0372]
请参见图9,为本技术实施例提供的一种候选运动矢量选择方法的流程示意图,如图9所示,该候选运动矢量选择方法可以包括以下步骤:
[0373]
步骤s900、确定当前图像块是否满足时域参考帧运动矢量缩放使用条件。若是,则转至步骤s910;否则,转至步骤s920。
[0374]
步骤s910、允许缩放使用时域参考帧的运动矢量,用于当前图像块的编码/ 解码。
[0375]
步骤s920、拒绝缩放使用时域参考帧的运动矢量,用于当前图像块的编码/ 解码。
[0376]
本技术实施例中,考虑到在某些特定情况下,缩放后的时域参考帧的运动矢量被最终选中的概率较低,因此,为了提高编解码性能,避免在不适用缩放后的时域参考帧的运动矢量的情况下,将缩放后的时域参考帧的运动矢量作为候选运动矢量,可以预先设定是否允许使用缩放后的时域参考帧的运动矢量的条件(本文中时域参考帧运动矢量缩放使用条件)。
[0377]
在一个示例中,上述时域参考帧运动矢量缩放使用条件,可以包括:
[0378]
参考帧的尺寸与当前图像块所属帧的尺寸相同,以及参考帧不是长期参考帧。
[0379]
示例性的,考虑到当参考帧的尺寸与当前图像块所属帧的尺寸不同,或/和参考帧为长期帧时,缩放后的时域参考帧的运动矢量被最终选中的概率较低,因此,可以将参考帧尺寸与当前图像块所属帧的尺寸相同,以及参考帧不是长期参考帧,作为时域参考帧运动矢量缩放使用条件。
[0380]
当参考帧的尺寸与当前图像块所属帧的尺寸相同,且参考帧不是长期参考帧时,允许使用缩放后的时域参考帧的运动矢量,用于当前图像块的编码/解码;当参考帧的尺寸与当前图像块所属帧的尺寸不同,或/和参考帧为长期参考帧时,拒绝使用缩放后的时域参考帧的运动矢量,用于当前图像块的编码/解码。
[0381]
在一种可能的实施方式中,上述确定是否满足时域参考帧运动矢量缩放使用条件之后,还可以包括:
[0382]
若满足时域参考帧运动矢量缩放使用条件,则允许使用第一类型预测模式以及第二类型预测模式;
[0383]
若不满足时域参考帧运动矢量缩放使用条件,则拒绝使用第二类型预测模式。
[0384]
在一个示例中,第一类型预测模式包括涉及到时域运动矢量的模式,如 tmvp模
式,bdof模式,dmvr模式等;第二类型预测模式包括涉及到对时域运动矢量进行缩放的模式,如smvd模式。
[0385]
在一个示例中,当不满足时域参考帧运动矢量缩放使用条件时,还可以拒绝使用第二类型预测模式。
[0386]
实施例十九
[0387]
请参见图10,为本技术实施例提供的一种预测模式选择方法的流程示意图,如图10所示,该预测模式选择方法可以包括以下步骤:
[0388]
步骤s1000、确定当前图像块是否满足指定预测模式启用条件。若是,则转至步骤s1010;否则,转至步骤s1020。
[0389]
步骤s1010、允许启用指定预测模式。
[0390]
步骤s1020、拒绝启用指定预存模式。
[0391]
本技术实施例中,考虑到某些特定情况下,使用指定预测模式会降低编解码性能,因此,为了提高编解码性能,避免在不适用指定预测模式的情况下,将指定预测模式作为候选的预测模式,可以预先设定是否允许启用指定预测模式的条件(本文中称为指定预测模式使用条件)。
[0392]
在一种可能的实施方式中,上述指定预测模式包括第一类型预测模式。
[0393]
示例性的,第一类型预测模式包括涉及到时域运动矢量的模式,如tmvp 模式,bdof模式,dmvr模式等。
[0394]
在一个示例中,上述指定预测模式使用条件,可以包括:
[0395]
参考帧的尺寸与当前图像块所属帧的尺寸相同。
[0396]
示例性的,考虑到对于参考帧的尺寸与当前图像块所属帧的尺寸不同的情况,使用第一类型预测模式的编解码性能较低,因此,为了提高编解码性能,可以将参考帧的尺寸与当前图像块所属帧的尺寸相同,作为指定预测模式使用条件,即当参考帧的尺寸与当前图像块所属帧的尺寸相同时,允许启用指定预测模式;当参考帧的尺寸与当前图像块所属帧的尺寸不同时,拒绝启用指定预测模式。
[0397]
在另一个示例中,上述指定预测模式使用条件,还可以包括:
[0398]
参考帧不是长期参考帧。
[0399]
示例性的,考虑到当参考帧的尺寸与当前图像块所属帧的尺寸相同,但参考帧为长期帧时,使用第一类型预测模式的编解码性能较低,因此,还可以将参考帧不是长期参考帧,作为指定预测模式使用条件,即当参考帧的尺寸与当前图像块所属帧的尺寸相同,且参考帧不是长期参考帧时,允许启用指定预测模式;当参考帧的尺寸与当前图像块所属帧的尺寸不同,或/和参考帧为长期参考帧时,拒绝启用指定预测模式。
[0400]
在另一种可能的实施方式中,上述指定预测模式包括第一类型预测模式,以及第二类型预测模式。
[0401]
示例性的,第二类型预测模式包括涉及到对时域运动矢量进行缩放的模式,如smvd模式。
[0402]
在一个示例中,上述指定预测模式使用条件,可以包括:
[0403]
参考帧的尺寸与当前图像块所属帧的尺寸相同,以及参考帧不是长期参考帧。
[0404]
示例性的,考虑到当参考帧的尺寸与当前图像块所属帧的尺寸不同,或/和参考帧
为长期帧时,使用第一类型预测模式和第二类型预测模式进行编解码的性能较低,因此,可以将参考帧尺寸与当前图像块所属帧的尺寸相同,以及参考帧不是长期参考帧,作为指定预测模式使用条件。
[0405]
当参考帧的尺寸与当前图像块所属帧的尺寸相同,且参考帧不是长期参考帧时,允许启用指定预测模式;当参考帧的尺寸与当前图像块所属帧的尺寸不同,或/和参考帧为长期参考帧时,拒绝启用指定预测模式。
[0406]
在另一种可能的实施方式中,上述指定预测模式包括第二类型预测模式。
[0407]
在一个示例中,上述指定预测模式使用条件,可以包括:
[0408]
参考帧的尺寸与当前图像块所属帧的尺寸相同,以及参考帧不是长期参考帧。
[0409]
示例性的,考虑到当参考帧的尺寸与当前图像块所属帧的尺寸不同,或/和参考帧为长期帧时,使用第二类型预测模式进行编解码的性能较低,因此,可以将参考帧尺寸与当前图像块所属帧的尺寸相同,以及参考帧不是长期参考帧,作为指定预测模式使用条件。
[0410]
当参考帧的尺寸与当前图像块所属帧的尺寸相同,且参考帧不是长期参考帧时,允许启用指定预测模式;当参考帧的尺寸与当前图像块所属帧的尺寸不同,或/和参考帧为长期参考帧时,拒绝启用指定预测模式。
[0411]
实施例二十
[0412]
请参见图11,为本技术实施例提供的一种预测模式选择方法的流程示意图,如图11所示,该预测模式选择方法可以包括以下步骤:
[0413]
步骤s1100、确定当前图像块是否满足dmvr模式启用条件。若是,则转至步骤s1110;否则,转至步骤s1120。
[0414]
步骤s1110、允许启用dmvr模式。
[0415]
步骤s1120、拒绝启用dmvr模式。
[0416]
本技术实施例中,考虑到在某些特定情况下,使用dmvr模式进行解码的效率较低,因此,为了提高编解码性能,避免在不适用dmvr模式情况下,启用dmvr模式,可以预先设定是否允许启用dmvr模式的条件(本文中称为 dmvr模式启用条件)。
[0417]
相应地,当对当前图像块进行解码时,可以确定当前图像块是否满足dmvr 模式启用条件;若是,则允许启用dmvr模式;否则,拒绝启用dmvr模式。
[0418]
在一个示例中,上述dmvr模式启用条件,可以包括:
[0419]
当前模式为regular merge/skip模式。
[0420]
示例性的,regular merge/skip模式,即传统merge模式和传统skip模式。在传统merge模式或传统skip模式下,从候选运动信息列表中选择一个运动信息,基于该运动信息生成当前图像块块的预测值。
[0421]
该候选运动信息列表包括:空域相邻块候选运动信息,时域相邻块候选运动信息,空域非相邻块候选运动信息,基于已有运动信息进行组合获取的运动信息,或/和,默认运动信息等等。
[0422]
示例性的,当确定当前图像块为regular merge/skip模式时,允许启用dmvr 模式;否则,决绝启用dmvr模式。
[0423]
在另一个示例中,上述dmvr模式启用条件,可以包括:
[0424]
序列级控制dmvr模式的开关为第一取值,帧级控制dmvr模式的开关为第一取值;
[0425]
当前模式为regular merge/skip模式;
[0426]
当前图像块采用双向预测模式,两个参考帧一个显示顺序位于当前图像块所属帧之前,另一个显示顺序位于当前图像块所属帧之后,且两个参考帧的与当前图像块所属帧的距离相等;
[0427]
两个参考帧的加权权重相同;
[0428]
当前图像块尺寸满足限定条件;
[0429]
两个参考帧的长宽分别与当前图像块所属帧的长宽相同。
[0430]
在一个示例中,上述第一取值为1。
[0431]
在一个示例中,上述当前图像块尺寸满足限定条件,包括:当前图像块的宽大于等于8,当前图像块的高大于等于8,且当前图像块的面积大于等于128。
[0432]
本技术实施例中,在确定当前图像块各像素点的预测值之后,基于当前图像块各像素点的梯度值以及偏移矢量,确定当前图像块各像素点的预测补偿值,进而,基于当前图像块各像素点的预测值以及预测补偿值,确定当前图像块各像素点的最终预测值,预测补偿调整不需要再限于采用双向预测模式的图像块,且不限于各子块的运动矢量与相应子块中各像素点的运动矢量均相同的图像块,扩展了预测补偿调整的适用范围。
[0433]
以上对本技术提供的方法进行了描述。下面对本技术提供的装置进行描述:
[0434]
请参见图图12,为本技术实施例提供的一种编解码装置的结构示意图,如图12所示,该编解码装置可以包括:
[0435]
第一确定单元1210,用于确定当前图像块各像素点的预测值;
[0436]
第二确定单元1220,用于基于所述当前图像块各像素点的预测值,确定所述当前图像块各像素点的梯度值;
[0437]
第三确定单元1230,用于确定所述当前图像块各像素点的偏移矢量;
[0438]
第四确定单元1240,用于基于所述当前图像块各像素点的梯度值以及偏移矢量,确定所述当前图像块各像素点的预测补偿值;
[0439]
第五确定单元1250,用于基于所述当前图像块各像素点的预测值以及预测补偿值,确定所述当前图像块各像素点的最终预测值。
[0440]
在一种可能的实施方式中,若所述当前图像块采用单向预测模式;
[0441]
所述第一确定单元1210,具体用于确定所述当前图像块各像素点单向的预测值;
[0442]
所述第二确定单元1220,具体用于基于所述当前图像块各像素点单向的预测值,确定所述当前图像块各像素点该方向的梯度值;
[0443]
所述第三确定单元1230,具体用于确定所述当前图像块各像素点该方向的偏移矢量;
[0444]
所述第四确定单元1240,具体用于基于所述当前图像块各像素点该方向的梯度值以及偏移矢量,确定所述当前图像块各像素点该方向的预测补偿值;
[0445]
所述第五确定单元1250,具体用于基于所述当前图像块各像素点该方向的预测值以及预测补偿值,确定所述当前图像块各像素点该方向的最终预测值。
[0446]
在一种可能的实施方式中,若所述当前图像块采用双向预测模式;
[0447]
所述第一确定单元1210,具体用于分别确定所述当前图像块各像素点前向和后向的预测值;
[0448]
所述第二确定单元1220,具体用于分别基于所述当前图像块各像素点前向和后向的预测值,确定所述当前图像块各像素点前向和后向的梯度值;
[0449]
所述第三确定单元,1230具体用于分别确定所述当前图像块各像素点前向和后向的偏移矢量;
[0450]
所述第四确定单元1240,具体用于分别基于所述当前图像块各像素点前向和后向的梯度值以及偏移矢量,确定所述当前图像块各像素点前向和后向的预测补偿值;
[0451]
所述第五确定单元1250,具体用于分别基于所述当前图像块各像素点前向和后向的预测值以及预测补偿值,确定所述当前图像块各像素点前向和后向的最终预测值;基于所述当前图像块各像素点前向和后向的最终预测值,确定所述当前图像块各像素点的最终预测值。
[0452]
在一种可能的实施方式中,所述第三确定单元1230,具体用于:
[0453]
对于所述当前图像块的任一子块,确定该子块中指定像素点的偏移矢量;
[0454]
基于该子块中所述指定像素点的偏移矢量,确定该子块中其余像素点的偏移矢量。
[0455]
在一种可能的实施方式中,所述第三确定单元1230,具体用于基于该子块中所述指定像素点与该子块的中心位置的偏移,以及仿射参数,确定该子块中所述指定像素点的偏移矢量。
[0456]
在一种可能的实施方式中,所述第三确定单元1230具体用于:
[0457]
基于该子块中所述指定像素点与该子块的中心位置的水平方向的偏移、该子块中所述指定像素点与该子块的中心位置的垂直方向的偏移,以及第一仿射参数和第二仿射参数,确定该子块中所述指定像素点的偏移矢量的水平分量;
[0458]
基于该子块中所述指定像素点与该子块的中心位置的水平方向的偏移、该子块中所述指定像素点与该子块的中心位置的垂直方向的偏移,以及第三仿射参数和第四仿射参数,确定该子块中所述指定像素点的偏移矢量的垂直分量。
[0459]
在一种可能的实施方式中,对于4参数仿射模型,所述第一仿射参数与所述第四仿射参数相同,均为第一数值与该子块的宽的比值,所述第二仿射参数与所述第三仿射参数相反,且所述第三仿射参数为第二数值与该子块的宽的比值;
[0460]
其中,所述第一数值为该子块右上控制点的运动矢量的水平分量与左上控制点的运动矢量的水平分量的差值,所述第二数值为该子块右上控制点的运动矢量的垂直分量与左上控制点的运动矢量的垂直分量的差值。
[0461]
在一种可能的实施方式中,对于6参数仿射模型,所述第一仿射参数为所述第一数值与该子块的宽的比值,所述第二仿射参数为第三数值与该子块的高的比值,所述第三仿射参数为所述第二数值与该子块的宽的比值,所述第四仿射参数为第四数值与该子块的高的比值;
[0462]
其中,所述第一数值为该子块右上控制点的运动矢量的水平分量与左上控制点的运动矢量的水平分量的差值,所述第二数值为该子块右上控制点的运动矢量的垂直分量与左上控制点的运动矢量的垂直分量的差值,所述第三数值为该子块左下控制点的运动矢量的水平分量与左上控制点的运动矢量的水平分量的差值,所述第四数值为该子块左下控制点的运动矢量的垂直分量与左上控制点的运动矢量的垂直分量的差值。
[0463]
在一种可能的实施方式中,所述第三确定单元1230,具体用于:
[0464]
基于该子块中所述指定像素点的偏移矢量的水平分量以及所述第一仿射参数,确定该子块中与所述指定像素点同一行的其余像素点的偏移矢量的水平分量;
[0465]
基于该子块中所述指定像素点的偏移矢量的垂直分量以及所述第三仿射参数,确定该子块中与所述指定像素点同一行的其余像素点的偏移矢量的垂直分量;
[0466]
对于该子块中所述指定像素点所在行的任一像素点,基于该像素点的偏移矢量的水平分量以及所述第二仿射参数,确定该子块中与该像素点同一列的其余像素点的偏移矢量的水平分量;以及,基于该像素点的偏移矢量的垂直分量以及所述第四仿射参数,确定该子块中与该像素点同一列的其余像素点的偏移矢量的垂直分量。
[0467]
在一种可能的实施方式中,所述第二确定单元1220,具体用于对于所述当前图像块的任一子块,对该子块的上下左右边缘分别填充n行/列整像素点;n 为正整数;
[0468]
基于该子块各像素点的预测值,以及所填充的整像素点的像素值,确定该子块中各像素点的梯度值。
[0469]
在一种可能的实施方式中,所述第二确定单元1220,具体用于:
[0470]
确定参考帧中与该子块最近的等尺寸整像素块;
[0471]
将该整像素块周围相邻的n行/列整像素点的像素值分别作为该子块的上下左右边缘的填充值。
[0472]
在一种可能的实施方式中,所述第二确定单元1220,具体用于:
[0473]
分别对所述整像素块正上方、正下方、正左侧以及正右侧的n行/列的整像素点进行填充。
[0474]
在一种可能的实施方式中,当n=1时,所述第二确定单元1220,具体用于:
[0475]
若该子块中像素点的预测值的分像素垂直分量大于半像素,则对该子块的上边缘填充上方的最近邻整像素点,并对该子块的下边缘填充下方的次近邻整像素点;
[0476]
若该子块中像素点的预测值的分像素垂直分量小于半像素,则对该子块的上边缘填充上方的次近邻整像素点,并对该子块的下边缘填充下方的最近邻整像素点;
[0477]
若该子块中像素点的预测值的分像素水平分量大于半像素,则对该子块的左边缘填充左侧的最近邻整像素点,并对该子块的右边缘填充右侧的次近邻整像素点;
[0478]
若该子块中像素点的预测值的分像素水平分量小于半像素,则对该子块的左边缘填充左侧的次近邻整像素点,并对该子块的右边缘填充右侧的最近邻整像素点。
[0479]
在一种可能的实施方式中,所述第二确定单元1220,具体用于:
[0480]
对于该子块中任一像素点,基于该像素点左侧的n个相邻像素点的像素值和右侧的n个相邻像素点的像素值,确定该像素点的梯度值的水平分量,并根据该像素点上方的n个相邻像素点的像素值和下方的n个相邻像素点的像素值,确定该像素点的梯度值的垂直分量。
[0481]
在一种可能的实施方式中,所述第二确定单元1220,还用于:
[0482]
确定所述当前图像块是否满足预测补偿调整启用条件;
[0483]
若是,则确定执行所述基于所述当前图像块各像素点的预测值,确定所述当前图像块各像素点的梯度值的步骤。
[0484]
在一种可能的实施方式中,所述预测补偿调整启用条件包括所述当前图像块采用
指定预测模式,所述指定预测模式下子块的运动矢量与子块中各像素点的运动矢量不完全相同。
[0485]
在一种可能的实施方式中,所述预测补偿调整启用条件还包括:当前预测的分量为亮度分量。
[0486]
在一种可能的实施方式中,所述预测补偿调整启用条件还包括:当前预测的分量为色度分量。
[0487]
在一种可能的实施方式中,所述指定预测模式包括仿射运动模式。
[0488]
请参见图13,为本技术实施例提供的一种编码端设备的硬件结构示意图。该编码端设备可包括处理器1301、存储有机器可执行指令的机器可读存储介质 1302。处理器1301与机器可读存储介质1302可经由系统总线1303通信。并且,通过读取并执行机器可读存储介质1302中与编解码控制逻辑对应的机器可执行指令,处理器1301可执行上文描述的编解码方法。
[0489]
本文中提到的机器可读存储介质1302可以是任何电子、磁性、光学或其它物理存储装置,可以包含或存储信息,如可执行指令、数据,等等。例如,机器可读存储介质可以是:ram(radom access memory,随机存取存储器)、易失存储器、非易失性存储器、闪存、存储驱动器(如硬盘驱动器)、固态硬盘、任何类型的存储盘(如光盘、dvd等),或者类似的存储介质,或者它们的组合。
[0490]
请参见图14,为本技术实施例提供的一种解码端设备的硬件结构示意图。该解码端设备可包括处理器1401、存储有机器可执行指令的机器可读存储介质 1402。处理器1401与机器可读存储介质1402可经由系统总线1403通信。并且,通过读取并执行机器可读存储介质1402中与编解码控制逻辑对应的机器可执行指令,处理器1401可执行上文描述的编解码方法。
[0491]
本文中提到的机器可读存储介质1402可以是任何电子、磁性、光学或其它物理存储装置,可以包含或存储信息,如可执行指令、数据,等等。例如,机器可读存储介质可以是:ram、易失存储器、非易失性存储器、闪存、存储驱动器(如硬盘驱动器)、固态硬盘、任何类型的存储盘(如光盘、dvd等),或者类似的存储介质,或者它们的组合。
[0492]
需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个
……”
限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。
[0493]
以上所述仅为本技术的较佳实施例而已,并不用以限制本技术,凡在本技术的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本技术保护的范围之内。