一种编解码方法、装置及其设备与流程

文档序号:24426863发布日期:2021-03-26 23:11阅读:73来源:国知局
一种编解码方法、装置及其设备与流程

1.本申请涉及编解码技术领域,尤其涉及一种编解码方法、装置及其设备。


背景技术:

2.为了达到节约空间的目的,视频图像都是经过编码后才传输的,完整的视频编码方法可以包括预测、变换、量化、熵编码、滤波等过程。其中,预测编码包括帧内编码和帧间编码,帧间编码是利用视频时间域的相关性,使用邻近已编码图像的像素预测当前图像的像素,以达到有效去除视频时域冗余的目的。
3.在帧间编码中,可以使用运动矢量(motion vector,mv)表示当前帧视频图像的当前图像块与参考帧视频图像的参考图像块之间的相对位移。例如,当前帧的视频图像a与参考帧的视频图像b存在很强的时域相关性,在需要传输视频图像a的图像块a1(当前图像块)时,则可以在视频图像b中进行运动搜索,找到与图像块a1最匹配的图像块b1(即参考图像块),并确定图像块a1与图像块b1之间的相对位移,该相对位移也就是图像块a1的运动矢量。
4.编码端可以将运动矢量发送给解码端,不是将图像块a1发送给解码端,解码端可以根据运动矢量和图像块b1得到图像块a1。显然,由于运动矢量占用的比特数小于图像块a1占用的比特数,因此,上述方式可以节约大量比特。
5.在传统方式中,在当前块是单向块时,获得当前块的运动矢量(后续称为原始运动矢量)后,可以对原始运动矢量进行调整,并基于调整后的运动矢量进行编码/解码,从而提高编码性能。但是,在当前块是双向块时,获得当前块的第一原始运动矢量和第二原始运动矢量后,如何对第一原始运动矢量和第二原始运动矢量进行调整,目前并没有合理的解决方案,也就是说,针对双向块的场景,存在预测质量不高,预测错误等问题,从而导致编码性能较差。


技术实现要素:

6.本申请提供了一种编解码方法、装置及其设备,可以提高编码性能。
7.本申请提供一种编解码方法,所述方法包括:若当前块的特征信息满足特定条件,则根据所述当前块的第一原始运动矢量确定所述当前块对应的第一参考块,根据所述当前块的第二原始运动矢量确定所述当前块对应的第二参考块;根据所述第一参考块的第一像素值和所述第二参考块的第二像素值,对第一原始运动矢量和第二原始运动矢量进行调整,得到所述第一原始运动矢量对应的第一目标运动矢量和所述第二原始运动矢量对应的第二目标运动矢量;根据所述第一目标运动矢量和所述第二目标运动矢量对所述当前块进行编码或者解码。
8.本申请提供一种编解码装置,所述装置包括:确定模块,用于若当前块的特征信息满足特定条件,则根据所述当前块的第一原始运动矢量确定所述当前块对应的第一参考块,根据所述当前块的第二原始运动矢量确定所述当前块对应的第二参考块;处理模块,用
于根据所述第一参考块的第一像素值和所述第二参考块的第二像素值,对第一原始运动矢量和第二原始运动矢量进行调整,得到所述第一原始运动矢量对应的第一目标运动矢量和所述第二原始运动矢量对应的第二目标运动矢量;编解码模块,用于根据所述第一目标运动矢量和所述第二目标运动矢量对所述当前块进行编码或者解码。
9.本申请提供一种编码端设备,包括:处理器和机器可读存储介质,所述机器可读存储介质存储有能够被所述处理器执行的机器可执行指令;所述处理器用于执行机器可执行指令,以实现如下步骤:若当前块的特征信息满足特定条件,则根据所述当前块的第一原始运动矢量确定所述当前块对应的第一参考块,根据所述当前块的第二原始运动矢量确定所述当前块对应的第二参考块;根据所述第一参考块的第一像素值和所述第二参考块的第二像素值,对第一原始运动矢量和第二原始运动矢量进行调整,得到所述第一原始运动矢量对应的第一目标运动矢量和所述第二原始运动矢量对应的第二目标运动矢量;根据所述第一目标运动矢量和所述第二目标运动矢量对所述当前块进行编码。
10.本申请提供一种解码端设备,包括:处理器和机器可读存储介质,所述机器可读存储介质存储有能够被所述处理器执行的机器可执行指令;所述处理器用于执行机器可执行指令,以实现如下步骤:若当前块的特征信息满足特定条件,则根据所述当前块的第一原始运动矢量确定所述当前块对应的第一参考块,根据所述当前块的第二原始运动矢量确定所述当前块对应的第二参考块;根据所述第一参考块的第一像素值和所述第二参考块的第二像素值,对第一原始运动矢量和第二原始运动矢量进行调整,得到所述第一原始运动矢量对应的第一目标运动矢量和所述第二原始运动矢量对应的第二目标运动矢量;根据所述第一目标运动矢量和所述第二目标运动矢量对所述当前块进行解码。
11.由以上技术方案可见,本申请实施例中,可以根据第一原始运动矢量和第二原始运动矢量确定当前块的第一目标运动矢量和第二目标运动矢量,并根据第一目标运动矢量和第二目标运动矢量对当前块进行编码或者解码,而不是直接根据第一原始运动矢量和第二原始运动矢量对当前块进行编码或者解码,从而解决预测质量不高,预测错误等问题,并提高编码性能和编码效率。
附图说明
12.为了更加清楚地说明本申请实施例或者现有技术中的技术方案,下面将对本申请实施例或者现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请中记载的一些实施例,对于本领域普通技术人员来讲,还可以根据本申请实施例的这些附图获得其他的附图。
13.图1a是本申请一种实施方式中的插值的示意图;
14.图1b是本申请一种实施方式中的视频编码框架的示意图;
15.图2是本申请一种实施方式中的编解码方法的流程图;
16.图3是本申请一种实施方式中的编解码方法的流程图;
17.图4是本申请一种实施方式中的编解码方法的流程图;
18.图5是本申请一种实施方式中的参考像素的示意图;
19.图6是本申请一种实施方式中的运动矢量迭代的示意图;
20.图7a

图7e是本申请一种实施方式中的候选点的顺序示意图;
21.图8是本申请一种实施方式中的当前块的空域参考的示意图;
22.图9是本申请一种实施方式中的编解码装置的结构图;
23.图10是本申请一种实施方式中的解码端设备的硬件结构图;
24.图11是本申请一种实施方式中的编码端设备的硬件结构图。
具体实施方式
25.在本申请实施例使用的术语仅仅是出于描述特定实施例的目的,而非限制本申请。本申请和权利要求书中所使用的单数形式的“一种”、“所述”和“该”也旨在包括多数形式,除非上下文清楚地表示其它含义。还应当理解,本文中使用的术语“和/或”是指包含一个或多个相关联的列出项目的任何或所有可能组合。
26.应当理解,尽管在本申请实施例可能采用术语第一、第二、第三等来描述各种信息,但这些信息不应限于这些术语。这些术语仅用来将同一类型的信息彼此区分开。例如,在不脱离本申请范围的情况下,第一信息也可以被称为第二信息,类似地,第二信息也可以被称为第一信息。取决于语境,此外,所使用的词语“如果”可以被解释成为“在
……
时”或“当
……
时”或“响应于确定”。
27.本申请实施例中提出一种编解码方法,可以涉及如下概念:
28.帧内预测与帧间预测(intra prediction and inter prediction)技术:帧内预测是指,利用视频空间域的相关性,使用当前图像已经编码块的像素预测当前像素,以达到去除视频空域冗余的目的。帧内预测中规定了多种预测模式,每一种预测模式都对应一种纹理方向(dc模式除外),当前块预测像素由其预测方向上相邻块的边界重构像素值生成。举例说明,如果图像的纹理是呈现水平状排布的,那么选择水平预测模式可以更好的预测图像信息。帧间预测是指,利用视频时域的相关性,由于视频序列通常包含有较强的时域相关性,使用邻近已编码图像像素预测当前图像的像素,可以达到有效去除视频时域冗余的目的。主要的视频编码标准帧间预测部分都采用了基于块的运动补偿技术,主要原理是为当前图像的每一个像素块在之前的已编码图像中寻找一个最佳匹配块,该过程称为运动估计(motion estimation,me)。
29.运动矢量(motion vector,mv):在帧间编码中,使用运动矢量表示当前编码块与其参考图像中的最佳匹配块之间的相对位移。每个划分的块都有相应的运动矢量传输到解码端,如果对每个块的运动矢量进行独立编码和传输,特别是划分成小尺寸的块时,需要消耗相当多的比特。为了降低用于编码运动矢量的比特数,则利用相邻图像块之间的空间相关性,根据相邻已编码块的运动矢量对当前待编码块的运动矢量进行预测,然后对预测差进行编码。这样,可以有效地降低表示运动矢量的比特数。在对当前块的运动矢量编码过程中,首先使用相邻已编码块的运动矢量预测当前块的运动矢量,然后对运动矢量的预测值(mvp,motion vector prediction)与运动矢量的真正估值之间的差值(mvd,motionvector difference)进行编码,从而有效降低mv的编码比特数。
30.运动信息(motion information):由于运动矢量表示当前图像块与某个参考图像块的位置偏移,为了准确获取指向图像块的信息,除了运动矢量,还需要参考帧图像的索引信息来表示使用哪个参考帧图像。在视频编码技术中,对于当前帧图像,通常可以建立一个参考帧图像列表,参考帧图像索引信息则表示当前图像块采用了参考帧图像列表中的第几
个参考帧图像。此外,很多编码技术还支持多个参考图像列表,因此,还可以使用一个索引值来表示使用了哪一个参考图像列表,这个索引值可以称为参考方向。在视频编码技术中,可以将运动矢量、参考帧索引、参考方向等与运动相关的信息统称为运动信息。
31.预测像素(prediction signal):预测像素是指从已经编解码的像素中导出的像素值,通过原始像素与预测像素之差获得残差,进而进行残差变换量化和系数编码。特别的,帧间的预测像素指的是当前块从参考帧(重建像素帧)导出的像素值,由于像素位置离散,需要通过插值运算来获取最终的预测像素。预测像素与原始像素越接近,两者相减得到的残差能量越小,编码压缩性能越高。
32.插值(interpolation):若当前mv为非整像素精度,则无法直接从对应参考帧中拷贝已有像素值,所需像素值只能通过插值获得。如图1a所示,若想获得偏移为1/2像素的像素值y
1/2
,则需要通过周围已有像素值x插值获得。若采用抽头数为n的插值滤波器,则需要通过周围n个整像素插值获得。
33.运动补偿:运动补偿就是通过插值或拷贝获得当前块所有像素值的过程。
34.视频编码框架:参见图1b所示,可以使用视频编码框架实现本申请实施例的编码端处理流程,此外,视频解码框架的示意图与图1b类似,在此不再赘述,而且,可以使用视频解码框架实现本申请实施例的解码端处理流程。具体的,在视频编码框架和视频解码框架中,包括帧内预测、运动估计/运动补偿、参考图像缓冲器、环内滤波、重建、变换、量化、反变换、反量化、熵编码器等模块。在编码端,通过这些模块之间的配合,可以实现编码端处理流程,在解码端,通过这些模块之间的配合,可以实现解码端处理流程。
35.在传统方式中,在当前块是双向块时,获得当前块的第一原始运动矢量和第二原始运动矢量后,如何对第一原始运动矢量和第二原始运动矢量进行调整,并没有合理的解决方案。本申请实施例中,在当前块是双向块时,先判断当前块的特征信息是否满足特定条件,如果是,则根据第一原始运动矢量确定当前块对应的第一参考块,根据当前块的第二原始运动矢量确定第二参考块,并根据第一参考块的第一像素值和第二参考块的第二像素值,对第一原始运动矢量和第二原始运动矢量进行调整,得到第一目标运动矢量和第二目标运动矢量。
36.这样,通过对第一原始运动矢量和第二原始运动矢量进行调整,得到第一目标运动矢量和第二目标运动矢量,从而可以根据第一目标运动矢量和第二目标运动矢量对当前块进行编码或者解码,可以提高编码性能和编码效率。
37.以下结合几个具体实施例,对本申请的编解码方法进行详细说明。
38.实施例1:参见图2所示,为本申请实施例中提出的编解码方法的流程示意图,该方法可以应用于解码端或者编码端,该方法可以包括以下步骤:
39.步骤201,若当前块的特征信息满足特定条件,则根据当前块的第一原始运动矢量确定当前块对应的第一参考块,根据当前块的第二原始运动矢量确定当前块对应的第二参考块。该特征信息包括但不限于以下一种或者多种:当前块对应的运动信息预测模式;当前块对应的运动信息属性;当前块的尺寸信息。
40.在一个例子中,若该特征信息为当前块对应的运动信息预测模式,则当前块的特征信息满足特定条件,可以包括但不限于:若当前块对应的运动信息预测模式为普通融合模式,则可以确定当前块对应的运动信息预测模式满足特定条件;或者,若当前块对应的运
动信息预测模式为用于帧间预测值与帧内预测值联合生成新预测值的融合模式,则可以确定当前块对应的运动信息预测模式满足特定条件。
41.在一个例子中,若特征信息为当前块对应的运动信息属性,当前块的特征信息满足特定条件,包括但不限于:若当前块对应的运动信息属性为当前块的运动信息包括两个不同方向的运动信息,则确定当前块对应的运动信息属性满足特定条件;或者,若当前块对应的运动信息属性为当前块的运动信息包括两个不同方向的运动信息,两个不同方向的运动信息对应的两个参考帧与当前帧的距离相同,则确定当前块对应的运动信息属性满足特定条件;或者,若当前块对应的运动信息属性为当前块复用周围块的运动信息,则确定当前块对应的运动信息属性满足特定条件;或者,若当前块对应的运动信息属性为当前块的每个子块的运动信息相同,则确定当前块对应的运动信息属性满足特定条件。
42.示例性的,当前块的运动信息包括两个不同方向的运动信息是指:当前块的两个不同方向的运动信息分别对应第一参考帧和第二参考帧,第一参考帧位于当前块所处当前帧的前面,第二参考帧位于当前块所处当前帧的后面。
43.在一个例子中,若该特征信息为当前块的尺寸信息,当前块的尺寸信息可以包括当前块的宽度值和当前块的高度值,则当前块的特征信息满足特定条件,可以包括但不限于:若当前块的宽度值位于第一区间[第一阈值,第二阈值]的范围内,则可以确定当前块的尺寸信息满足特定条件;或者,若当前块的高度值位于第二区间[第三阈值,第四阈值]的范围内,则可以确定当前块的尺寸信息满足特定条件;或者,若当前块的宽度值与当前块的高度值的面积位于第三区间[第五阈值,第六阈值]的范围内,则可以确定当前块的尺寸信息满足特定条件;或者,若所述宽度值位于第一区间[第一阈值,第二阈值]的范围内、所述高度值位于第二区间[第三阈值,第四阈值]的范围内、且所述面积位于第三区间[第五阈值,第六阈值]的范围内,则可以确定当前块的尺寸信息满足特定条件。
[0044]
示例性的,第一阈值可以小于第二阈值,对此第一阈值和第二阈值均不做限制,例如,第一阈值可以为4,第二阈值可以为128。第三阈值可以小于第四阈值,对此第四阈值和第四阈值均不做限制,例如,第三阈值可以为8,第四阈值可以为128。第五阈值可以小于第六阈值,对此第五阈值和第六阈值均不做限制,例如,第五阈值可以为64,第六阈值可以为128*128
[0045]
在一个例子中,根据当前块的第一原始运动矢量确定当前块对应的第一参考块,根据当前块的第二原始运动矢量确定当前块对应的第二参考块,可以包括但不限于:基于当前块的第一原始运动矢量,从第一参考帧中确定当前块对应的第一参考块;基于当前块的第二原始运动矢量,从第二参考帧中确定当前块对应的第二参考块。第一参考块中每个像素点的第一像素值,是通过对第一参考块中的相邻像素点的像素值进行插值得到,或者,通过对第一参考块中的相邻像素点的像素值进行拷贝得到;第二参考块中每个像素点的第二像素值,是通过对第二参考块中的相邻像素点的像素值进行插值得到,或者,通过对第二参考块中的相邻像素点的像素值进行拷贝得到。第一参考块的尺寸与第二参考块的尺寸相同,第一参考块的宽度值基于当前块的宽度值与搜索范围确定,第一参考块的高度值基于当前块的高度值与搜索范围确定。
[0046]
步骤202,根据第一参考块的第一像素值和第二参考块的第二像素值,对第一原始运动矢量和第二原始运动矢量进行调整,得到第一原始运动矢量对应的第一目标运动矢量
和第二原始运动矢量对应的第二目标运动矢量。
[0047]
在一个例子中,若当前块包括至少一个子块,针对当前块的每个子块,则可以根据第一像素值和第二像素值,对第一原始运动矢量和第二原始运动矢量进行调整,得到子块的第一目标运动矢量和第二目标运动矢量。
[0048]
在一个例子中,根据第一像素值和第二像素值,对第一原始运动矢量和第二原始运动矢量进行调整,得到子块的第一目标运动矢量和第二目标运动矢量,可以包括:根据第一像素值和第二像素值,确定子块的第一整像素运动矢量调整值和第二整像素运动矢量调整值、和/或,子块的第一分像素运动矢量调整值和第二分像素运动矢量调整值。然后,可以根据第一整像素运动矢量调整值和/或第一分像素运动矢量调整值,对第一原始运动矢量进行调整,得到子块的第一目标运动矢量。根据第二整像素运动矢量调整值和/或第二分像素运动矢量调整值,对第二原始运动矢量进行调整,得到子块的第二目标运动矢量。
[0049]
在一个例子中,根据第一像素值和第二像素值,确定子块的第一整像素运动矢量调整值和第二整像素运动矢量调整值、子块的第一分像素运动矢量调整值和第二分像素运动矢量调整值,可以包括:将第一原始运动矢量或者第二原始运动矢量确定为中心运动矢量;确定与中心运动矢量对应的边缘运动矢量;根据第一像素值和第二像素值,获取中心运动矢量对应的第一代价值、边缘运动矢量对应的第二代价值;然后,根据第一代价值和第二代价值,从中心运动矢量和边缘运动矢量中选择一个运动矢量作为最优运动矢量,并判断是否满足结束条件;如果否,则将最优运动矢量确定为中心运动矢量,返回执行确定与中心运动矢量对应的边缘运动矢量;如果是,则根据最优运动矢量确定子块的第一整像素运动矢量调整值和第二整像素运动矢量调整值;根据最优运动矢量确定子块的第一分像素运动矢量调整值和第二分像素运动矢量调整值。
[0050]
在一个例子中,确定与中心运动矢量对应的边缘运动矢量,包括:将中心运动矢量(x,y)向不同方向偏移s,顺序得到不同方向的边缘运动矢量(x,y+s)、边缘运动矢量(x,y

s)、边缘运动矢量(x+s,y)、边缘运动矢量(x

s,y)、边缘运动矢量(x+right,y+down);或者,将中心运动矢量(x,y)向不同方向偏移s,顺序得到不同方向的边缘运动矢量(x,y

s)、边缘运动矢量(x,y+s)、边缘运动矢量(x

s,y)、边缘运动矢量(x+s,y)、边缘运动矢量(x+right,y+down)。边缘运动矢量(x+right,y+down)的默认值为(x

s,y

s);若边缘运动矢量(x+s,y)的代价值小于边缘运动矢量(x

s,y)的代价值,则right为s;若边缘运动矢量(x,y+s)的代价值小于边缘运动矢量(x,y

s)的代价值,则down为s;或者,若边缘运动矢量(x+s,y)的代价值小于或等于边缘运动矢量(x

s,y)的代价值,则right为s;若边缘运动矢量(x,y+s)的代价值小于或等于边缘运动矢量(x,y

s)的代价值,则down为s。
[0051]
在一个例子中,根据第一像素值和第二像素值,获取中心运动矢量对应的第一代价值、边缘运动矢量对应的第二代价值,可以包括但不限于:根据未下采样的第一像素值和未下采样的第二像素值,获取中心运动矢量对应的第一代价值、边缘运动矢量对应的第二代价值。或者,对第一像素值进行下采样操作,对第二像素值进行下采样操作;然后,根据下采样后的第一像素值和下采样后的第二像素值,获取中心运动矢量对应的第一代价值、边缘运动矢量对应的第二代价值。或者,对第一像素值进行移位和下采样操作,对第二像素值进行移位和下采样操作;然后,根据操作后的第一像素值和操作后的第二像素值,获取中心运动矢量对应的第一代价值、边缘运动矢量对应的第二代价值。
[0052]
在一个例子中,根据第一像素值和第二像素值,确定子块的第一整像素运动矢量调整值和第二整像素运动矢量调整值、子块的第一分像素运动矢量调整值和第二分像素运动矢量调整值,可以包括:以第一原始运动矢量或者第二原始运动矢量为中心,从周围的运动矢量中选择部分或全部运动矢量,将选择的运动矢量作为候选运动矢量;根据第一像素值和第二像素值,获取第一原始运动矢量或第二原始运动矢量对应的第三代价值、候选运动矢量对应的第四代价值;根据第三代价值和第四代价值,从第一原始运动矢量或第二原始运动矢量、候选运动矢量中选择一个运动矢量作为最优运动矢量;根据最优运动矢量确定子块的第一整像素运动矢量调整值和第二整像素运动矢量调整值;根据最优运动矢量确定子块的第一分像素运动矢量调整值和第二分像素运动矢量调整值。
[0053]
根据最优运动矢量确定子块的第一整像素运动矢量调整值和第二整像素运动矢量调整值,可以包括但不限于:根据该最优运动矢量和第一原始运动矢量确定子块的第一整像素运动矢量调整值,根据第一整像素运动矢量调整值确定子块的第二整像素运动矢量调整值。
[0054]
根据最优运动矢量确定子块的第一分像素运动矢量调整值和第二分像素运动矢量调整值,包括:根据最优运动矢量对应的代价值、与最优运动矢量对应的边缘运动矢量对应的代价值,确定子块的第一分像素运动矢量调整值,并根据第一分像素运动矢量调整值确定子块的第二分像素运动矢量调整值。
[0055]
步骤203,根据第一目标运动矢量和第二目标运动矢量对当前块进行编码或者解码。例如,对于编码端来说,编码端可以根据第一目标运动矢量和第二目标运动矢量对当前块进行编码处理;对于解码端来说,解码端可以根据第一目标运动矢量和第二目标运动矢量对当前块进行解码处理。
[0056]
在一个例子中,针对当前块的每个子块,根据子块的第一目标运动矢量确定子块对应的第三参考块,并根据子块的第二目标运动矢量确定子块对应的第四参考块;根据第三参考块的第三像素值和第四参考块的第四像素值进行加权,得到子块的预测值;根据每个子块的预测值确定当前块的预测值。
[0057]
在一个例子中,根据子块的第一目标运动矢量确定子块对应的第三参考块,并根据子块的第二目标运动矢量确定子块对应的第四参考块,可以包括:
[0058]
方式一、基于子块的第一目标运动矢量,从第一参考帧中确定子块对应的第五参考块,并对第五参考块中的像素值进行插值,得到第三参考块。以及,基于子块的第二目标运动矢量,从第二参考帧中确定子块对应的第六参考块,并对第六参考块中的像素值进行插值,得到第四参考块。
[0059]
方式二、基于子块的第一目标运动矢量,从第一参考帧中确定子块对应的第七参考块,利用第七参考块中的像素值构造第八参考块,并对第八参考块中的像素值进行插值,得到第三参考块;基于子块的第二目标运动矢量,从第二参考帧中确定子块对应的第九参考块,利用第九参考块中的像素值构造第十参考块,并对第十参考块中的像素值进行插值,得到第四参考块。
[0060]
在一个例子中,根据第一目标运动矢量和第二目标运动矢量对当前块进行编码或者解码之后,还可以为当前块存储第一目标运动矢量和第二目标运动矢量。这样,该第一目标运动矢量和该第二目标运动矢量用于当前帧的环路滤波、该第一目标运动矢量和该第二
目标运动矢量用于后续帧的时域参考、和/或,该第一目标运动矢量和该第二目标运动矢量用于当前帧的空域参考。
[0061]
由以上技术方案可见,本申请实施例中,可以根据第一原始运动矢量和第二原始运动矢量确定当前块的第一目标运动矢量和第二目标运动矢量,并根据第一目标运动矢量和第二目标运动矢量对当前块进行编码或者解码,而不是直接根据第一原始运动矢量和第二原始运动矢量对当前块进行编码或者解码,从而解决预测质量不高,预测错误等问题,并提高编码性能和编码效率。
[0062]
实施例2:参见图3所示,为本申请实施例中提出的编解码方法的流程示意图,该编解码方法可以应用于编码端,该编解码方法可以包括以下步骤:
[0063]
步骤301,编码端判断当前块的特征信息是否满足特定条件。如果是,则执行步骤302,如果否,则不需要采用本申请提出的运动矢量调整方式,对此处理方式不做限制。
[0064]
在一个例子中,编码端可以基于已编码信息判断当前块的特征信息是否满足特定条件。如果当前块的特征信息满足特定条件,则说明当前块的运动信息不够准确,因此,启用运动矢量调整模式(即本申请技术方案),执行步骤302。
[0065]
如果当前块的特征信息不满足特定条件,则说明当前块的运动信息已经足够准确,因此,可以不启用运动矢量调整模式,不需要采用本申请提出的运动矢量调整方式。
[0066]
在一个例子中,当前块的特征信息包括但不限于以下一种或者多种:当前块对应的运动信息预测模式;当前块对应的运动信息属性;当前块的尺寸信息。
[0067]
针对判断当前块的特征信息是否满足特定条件的方式,参见后续实施例。
[0068]
步骤302,编码端基于当前块的第一原始运动矢量,从第一参考帧中确定当前块对应的第一参考块;基于当前块的第二原始运动矢量,从第二参考帧中确定当前块对应的第二参考块。为了区分方便,将第一参考块中每个像素点的像素值称为第一像素值,将第二参考块中每个像素点的像素值称为第二像素值。
[0069]
在一个例子中,若当前块是采用双向预测的块,则当前块存在双向运动信息,这个双向运动信息包括两个参考帧和两个原始运动矢量。例如,编码端可以采用传统方式获取双向运动信息,对此获取方式不做限制。该双向运动信息包括第一参考帧和第一原始运动矢量、第二参考帧和第二原始运动矢量。
[0070]
基于第一原始运动矢量,编码端可以从第一参考帧中确定当前块对应的第一参考块,可以将第一参考块中每个像素点的像素值称为第一像素值。
[0071]
基于第二原始运动矢量,编码端可以从第二参考帧中确定当前块对应的第二参考块,可以将第二参考块中每个像素点的像素值称为第二像素值。
[0072]
在一个例子中,当前块所在当前帧与第一参考帧的距离和第二参考帧与当前块所在当前帧的距离可以相同。例如,第一参考帧为第1帧,当前帧为第5帧,第二参考帧为第9帧。当然,上述只是一个示例,二者的距离也可以不同。
[0073]
第一原始运动矢量和第二原始运动矢量可以存在镜像对称关系,例如,第一原始运动矢量为(4,4),第二原始运动矢量为(

4,

4);第一原始运动矢量为(2.5,3.5),第二原始运动矢量为(

2.5,

3.5)。当然,上述只是一个示例,第一原始运动矢量和第二原始运动矢量也可以不存在镜像对称关系。
[0074]
针对确定第一参考块和第二参考块的方式,可以参见后续实施例。
[0075]
步骤303,针对当前块的每个子块,编码端根据第一参考块的第一像素值和第二参考块的第二像素值,对第一原始运动矢量进行调整,得到该子块的第一目标运动矢量;编码端根据第一参考块的第一像素值和第二参考块的第二像素值,对第二原始运动矢量进行调整,得到该子块的第二目标运动矢量。
[0076]
在一个例子中,若针对当前块启用运动矢量调整模式,则编码端可以基于第一像素值和第二像素值,通过局部搜索的方法,对第一原始运动矢量和第二原始运动矢量进行微调,以获得更好的第一目标运动矢量和第二目标运动矢量,继而利用第一目标运动矢量和第二目标运动矢量来生成失真更小的预测值。
[0077]
在一个例子中,当前块可以包括至少一个子块,若只包括一个子块,则该子块就是当前块本身。针对该子块,该子块对应第一原始运动矢量和第二原始运动矢量,在进行调整后,该子块对应第一目标运动矢量和第二目标运动矢量。
[0078]
若当前块包括子块a和子块b,针对子块a,子块a对应第一原始运动矢量a1和第二原始运动矢量a2,进行调整后,子块a对应第一目标运动矢量a3和第二目标运动矢量a4。针对子块b,子块b对应第一原始运动矢量b1和第二原始运动矢量b2,进行调整后,子块b对应第一目标运动矢量b3和第二目标运动矢量b4。
[0079]
子块a对应的第一原始运动矢量a1与子块b对应的第一原始运动矢量b1可以相同,均是当前块的第一原始运动矢量;子块a对应的第二原始运动矢量a2与子块b对应的第二原始运动矢量b2可以相同,均是当前块的第二原始运动矢量。
[0080]
由于针对每个子块的第一原始运动矢量分别进行调整,因此,子块a对应的第一目标运动矢量a3与子块b对应的第一目标运动矢量b3可以相同或者不同。由于针对每个子块的第二原始运动矢量分别进行调整,因此,子块a对应的第二目标运动矢量a4与子块b对应的第二目标运动矢量b4可以相同或者不同。
[0081]
针对原始运动矢量的调整方式,可以参见后续实施例,在此不再赘述。
[0082]
步骤304,编码端根据第一目标运动矢量和第二目标运动矢量对当前块的每个子块进行运动补偿。例如,若当前块包括子块a和子块b,则可以利用子块a的第一目标运动矢量和第二目标运动矢量对子块a进行运动补偿,并利用子块b的第一目标运动矢量和第二目标运动矢量对子块b进行运动补偿。
[0083]
针对运动补偿的方式,可以参见后续实施例,在此不再赘述。
[0084]
步骤305,编码端保存当前块的每个子块的第一目标运动矢量和第二目标运动矢量,第一目标运动矢量和第二目标运动矢量用于后续块的编码参考。
[0085]
针对编码参考的实现方式,可以参见后续实施例,在此不再赘述。
[0086]
实施例3:参见图4所示,为本申请实施例中提出的编解码方法的流程示意图,该编解码方法可以应用于解码端,该编解码方法可以包括以下步骤:
[0087]
步骤401,解码端判断当前块的特征信息是否满足特定条件。如果是,则执行步骤402,如果否,则不需要采用本申请提出的运动矢量调整方式,对此处理方式不做限制。
[0088]
在一个例子中,解码端可以接收编码端发送的编码比特流,并基于已解码信息判断当前块的特征信息是否满足特定条件。如果当前块的特征信息满足特定条件,说明当前块的运动信息不够准确,因此,启用运动矢量调整模式,执行步骤402。如果当前块的特征信息不满足特定条件,则说明当前块的运动信息已经足够准确,因此,不启用运动矢量调整模
式,不需要采用本申请提出的运动矢量调整方式。
[0089]
步骤402,解码端基于当前块的第一原始运动矢量,从第一参考帧中确定当前块对应的第一参考块;基于当前块的第二原始运动矢量,从第二参考帧中确定当前块对应的第二参考块。为了区分方便,将第一参考块中每个像素点的像素值称为第一像素值,将第二参考块中每个像素点的像素值称为第二像素值。
[0090]
步骤403,针对当前块的每个子块,解码端根据第一参考块的第一像素值和第二参考块的第二像素值,对第一原始运动矢量进行调整,得到该子块的第一目标运动矢量;解码端根据第一参考块的第一像素值和第二参考块的第二像素值,对第二原始运动矢量进行调整,得到该子块的第二目标运动矢量。
[0091]
步骤404,针对当前块的每个子块,解码端根据该子块的第一目标运动矢量以及该子块的第二目标运动矢量,对该子块的进行运动补偿。
[0092]
步骤405,解码端保存当前块的每个子块的第一目标运动矢量和第二目标运动矢量,第一目标运动矢量和第二目标运动矢量用于后续块的解码参考。
[0093]
实施例4:在步骤301和步骤401中,涉及判断当前块的特征信息是否满足特定条件。本实施例中,当特征信息满足如下所有条件时,确定当前块的特征信息满足特定条件,启用运动矢量调整模式。否则,不启用运动矢量调整模式。
[0094]
当前块对应的运动信息属性包括:当前块直接复用周围块的运动信息,而不编码运动信息差。当前块对应的运动信息属性包括:当前块的每个子块的运动信息相同,即不采用子块运动信息预测模式。当前块对应的运动信息属性包括:当前块的运动信息包括两个不同方向的运动信息。当前块的尺寸信息包括:当前块的尺寸在限定范围内,对此尺寸在限定范围内,在后续实施例介绍。
[0095]
实施例5:在步骤301和步骤401中,涉及判断当前块的特征信息是否满足特定条件。本实施例中,当特征信息满足如下所有条件时,确定当前块的特征信息满足特定条件,启用运动矢量调整模式。否则,不启用运动矢量调整模式。
[0096]
当前块对应的运动信息预测模式采用normal merge模式(即普通融合模式)或ciip模式(即用于帧间预测值与帧内预测值联合生成新预测值的融合模式);或者,当前块对应的运动信息预测模式不采用mmvd模式(即用于编码运动信息差值的融合模式)、sb merge模式(即采用子块运动信息的融合模式)、或tpm模式(即用于三角预测的融合模式)。
[0097]
当前块对应的运动信息属性包括:当前块的运动信息包括两个不同方向的运动信息,两个不同方向的运动信息对应的两个参考帧与当前帧的距离相同。当前块的尺寸信息包括:当前块的尺寸在限定范围内。
[0098]
需要说明的是,融合模式(即merge模式)包括但不限于如下类型的融合模式:普通融合模式(称为normal merge模式);用于三角预测的融合模式(称为tpm模式);用于编码运动信息差的融合模式(称为mmvd模式);采用子块运动信息的融合模式(称为sb merge模式);用于帧间预测值与帧内预测值联合生成新预测值的融合模式(称为ciip模式)。
[0099]
在一个例子中,normal merge模式包括不编码残差的普通融合模式(即skip模式)和编码残差的普通融合模式。mmvd模式包括不编码残差的mmvd模式。
[0100]
实施例6:在步骤301和步骤401中,涉及判断当前块的特征信息是否满足特定条件。本实施例中,当特征信息满足如下所有条件时,确定当前块的特征信息满足特定条件,
启用运动矢量调整模式。否则,不启用运动矢量调整模式。
[0101]
当前块对应的运动信息预测模式采用normal merge模式(即普通融合模式)、ciip模式(即用于帧间预测值与帧内预测值联合生成新预测值的融合模式)、或tpm模式(即用于三角预测的融合模式);或者,当前块对应的运动信息预测模式不采用mmvd模式(即用于编码运动信息差值的融合模式)、或sb merge模式(即采用子块运动信息的融合模式)。
[0102]
当前块对应的运动信息属性包括:当前块的运动信息包括两个不同方向的运动信息,两个不同方向的运动信息对应的两个参考帧与当前帧的距离相同。当前块的尺寸信息包括:当前块的尺寸在限定范围内。
[0103]
实施例7:在步骤301和步骤401中,涉及判断当前块的特征信息是否满足特定条件。本实施例中,当特征信息满足如下所有条件时,确定当前块的特征信息满足特定条件,启用运动矢量调整模式。否则,不启用运动矢量调整模式。
[0104]
当前块对应的运动信息预测模式采用normal merge模式(即普通融合模式)、ciip模式(即用于帧间预测值与帧内预测值联合生成新预测值的融合模式)、tpm模式(即用于三角预测的融合模式)、或mmvd模式(即用于编码运动信息差值的融合模式);或者,当前块对应的运动信息预测模式不采用sb merge模式(即采用子块运动信息的融合模式)。
[0105]
当前块对应的运动信息属性包括:当前块的运动信息包括两个不同方向的运动信息,两个不同方向的运动信息对应的两个参考帧与当前帧的距离相同。当前块的尺寸信息包括:当前块的尺寸在限定范围内。
[0106]
实施例8:在步骤301和步骤401中,涉及判断当前块的特征信息是否满足特定条件。本实施例中,当特征信息满足如下所有条件时,确定当前块的特征信息满足特定条件,启用运动矢量调整模式。否则,不启用运动矢量调整模式。
[0107]
当前块对应的运动信息预测模式采用normal merge模式或ciip模式;当前块对应的运动信息预测模式不采用mmvd模式、sb merge模式、或tpm模式;或者,当前块对应的运动信息预测模式采用normal merge模式、ciip模式、或tpm模式;当前块对应的运动信息预测模式不采用mmvd模式、或sb merge模式;或者,当前块对应的运动信息预测模式采用normal merge模式、ciip模式、tpm模式、或mmvd模式;当前块对应的运动信息预测模式不采用sb merge模式。
[0108]
当前块对应的运动信息属性包括:当前块的运动信息包括两个不同方向的运动信息,而不需要限制两个不同方向的运动信息对应的两个参考帧与当前帧的距离相同,即将这个限制条件移除。当前块的尺寸信息包括:当前块的尺寸在限定范围内。
[0109]
实施例9:针对上述实施例4

实施例8中的“当前块的尺寸在限定范围内”,若当前块的尺寸满足如下条件,则确定当前块的尺寸在限定范围内。
[0110]
当前块的宽在[第一阈值,第二阈值]范围内,第一阈值可以为4,第二阈值可以为128。当前块的高在[第三阈值,第四阈值]范围内,第三阈值可以为8,第四阈值可以为128。示例性的,第一阈值、第二阈值、第三阈值、第四阈值,均可以为2的n次方,n为大于等于1的整数。当前块的面积在[第五阈值,第六阈值]范围内,第五阈值可以为64,第六阈值可以为128*128=16384。示例性的,第五阈值、第六阈值,均可以为4的m次方,m为大于等于1的整数。在上述例子中,表达式[a,b]可以表示大于等于a,且小于等于b。
[0111]
实施例10:步骤302和步骤402中,基于第一原始运动矢量,从第一参考帧中确定当
前块对应的第一参考块,第一参考块中每个像素点的像素值称为第一像素值;基于第二原始运动矢量,从第二参考帧中确定当前块对应的第二参考块,第二参考块中每个像素点的像素值称为第二像素值,以下对此进行说明。
[0112]
第一参考块中每个像素点的第一像素值,是通过对第一参考块中的相邻像素点的像素值进行插值得到,或者,通过对第一参考块中的相邻像素点的像素值进行拷贝得到;第二参考块中每个像素点的第二像素值,是通过对第二参考块中的相邻像素点的像素值进行插值得到,或者,通过对第二参考块中的相邻像素点的像素值进行拷贝得到。第一参考块的尺寸与第二参考块的尺寸相同,第一参考块/第二参考块的宽度值基于当前块的宽度值与搜索范围确定,第一参考块/第二参考块的高度值基于当前块的高度值与搜索范围确定。
[0113]
参见图5所示,假设当前块的宽为w,高为h,第一原始运动矢量记为mv0,第二原始运动矢量记为mv1。从第一原始运动矢量mv0在第一参考帧的对应位置,得到面积为(w+fs

1)*(h+fs

1)的整像素块,将这个整像素块记为整像素块a。从第二原始运动矢量mv1在第二参考帧的对应位置,得到面积为(w+fs

1)*(h+fs

1)的整像素块,将这个整像素块记为整像素块b。
[0114]
在一个例子中,基于面积为(w+fs

1)*(h+fs

1)的整像素块a,可以通过双线性插值的方式,获得尺寸为(w+2*sr)*(h+2*sr)的初始参考像素块,可以将这个初始参考像素块记为第一参考块。基于面积为(w+fs

1)*(h+fs

1)的整像素块b,可以通过双线性插值的方式,获得尺寸为(w+2*sr)*(h+2*sr)的初始参考像素块,可以将这个初始参考像素块记为第二参考块。
[0115]
在另一例子中,基于面积为(w+fs

1)*(h+fs

1)的整像素块a,通过直接拷贝(无需插值)的方式,获得尺寸为(w+2*sr)*(h+2*sr)的初始参考像素块,将这个初始参考像素块记为第一参考块。基于面积为(w+fs

1)*(h+fs

1)的整像素块b,可以通过直接拷贝的方式,获得尺寸为(w+2*sr)*(h+2*sr)的初始参考像素块,将这个初始参考像素块记为第二参考块。
[0116]
示例性的,可以仅针对亮度分量(因为后续的搜索过程仅用亮度分量计算代价值,以降低复杂度),基于面积为(w+fs

1)*(h+fs

1)的整像素块(如整像素块a和整像素块b),获得尺寸为(w+2*sr)*(h+2*sr)的初始参考像素块,即第一参考块(如pred_inter0)和第二参考块(如pred_inter1)。
[0117]
在一个例子中,fs可以为插值滤波器的抽头数,如可以为8等。
[0118]
通过双线性插值获得第一参考块/第二参考块是指:第一参考块/第二参考块中每个像素点的像素值,通过对第一参考块/第二参考块中的相邻像素点的像素值进行插值得到,对此不做限制。通过拷贝获得第一参考块/第二参考块是指:第一参考块/第二参考块中每个像素点的像素值,通过对第一参考块/第二参考块中的相邻像素点的像素值进行拷贝得到,对此不做限制。
[0119]
参见上述实施例,第一参考块的面积为(w+2*sr)*(h+2*sr),第二参考块的面积为(w+2*sr)*(h+2*sr),也就是说,第一参考块/第二参考块的宽度值为w+2*sr,第一参考块/第二参考块的高度值为h+2*sr。w为当前块的宽,h为当前块的高,sr为搜索范围,即后续实施例的迭代次数,sr即目标运动矢量与原始运动矢量最大水平/竖直分量插值,如sr可以为2等。
[0120]
针对第一参考块和第二参考块,用于后续过程中的运动矢量调整。
[0121]
实施例11:步骤303和步骤403中,针对当前块的每个子块,根据第一参考块的第一像素值和第二参考块的第二像素值,对第一原始运动矢量进行调整,得到子块的第一目标运动矢量;根据第一参考块的第一像素值和第二参考块的第二像素值,对第二原始运动矢量进行调整,得到子块的第二目标运动矢量。
[0122]
以一个子块(如当前块的每个dx*dy大小的子块,如16*16大小的子块,或更小的一个整块)的处理过程为例,介绍原始运动矢量的调整过程。
[0123]
步骤a1、将第一原始运动矢量或者第二原始运动矢量确定为中心运动矢量。
[0124]
例如,假设第一原始运动矢量为(4,4),第二原始运动矢量为(

4,

4),可以将第一原始运动矢量(4,4)或第二原始运动矢量(

4,

4)确定为中心运动矢量。为了方便描述,以将第一原始运动矢量(4,4)确定为中心运动矢量为例,将第二原始运动矢量(

4,

4)确定为中心运动矢量的流程类似。
[0125]
步骤a2、确定与中心运动矢量对应的边缘运动矢量。
[0126]
例如,可以将中心运动矢量(x,y)向不同方向偏移s,得到不同方向的边缘运动矢量(x,y+s)、边缘运动矢量(x,y

s)、边缘运动矢量(x+s,y)、边缘运动矢量(x

s,y)、边缘运动矢量(x+right,y+down)。right可以为s或者

s,down可以为s或者

s,right和down的确定方式,参见后续实施例。
[0127]
参见图6所示,将中心运动矢量(x,y)作为中心,即中心运动矢量为(0,0),以s为1,right和down均为1为例,则中心运动矢量(0,0)对应的边缘运动矢量包括:边缘运动矢量(0,1),边缘运动矢量(0,

1),边缘运动矢量(1,0),边缘运动矢量(

1,0),边缘运动矢量(1,1)。
[0128]
步骤a3、根据第一参考块的第一像素值和第二参考块的第二像素值,获取中心运动矢量对应的第一代价值、每个边缘运动矢量对应的第二代价值。
[0129]
例如,从第一参考块中复制获取中心运动矢量(0,0)对应的子参考块a1,子参考块a1是中心运动矢量(0,0)在第一参考块中的子参考块。子参考块a1的大小为当前块的大小,且子参考块a1是第一参考块中最中心的w*h的块。
[0130]
从第二参考块中复制获取中心运动矢量(0,0)对应的子参考块b1,子参考块b1是中心运动矢量(0,0)在第二参考块中的子参考块。子参考块b1的大小为当前块的大小,且子参考块b1是第二参考块中最中心的w*h的块。
[0131]
然后,利用子参考块a1的第一像素值和子参考块b1的第二像素值,获取中心运动矢量(0,0)对应的代价值1,代价值的确定方式参见后续实施例。
[0132]
从第一参考块中复制获取边缘运动矢量(0,1)对应的子参考块a2,子参考块a2是边缘运动矢量(0,1)在第一参考块中的子参考块。子参考块a2的大小为当前块的大小,且子参考块a2是第一参考块中的w*h的块。
[0133]
从第二参考块中复制获取边缘运动矢量(0,1)的对称运动矢量(0,

1)对应的子参考块b2,子参考块b2是对称运动矢量(0,

1)在第二参考块中的子参考块。子参考块b2的大小为当前块的大小,是第二参考块中的w*h的块。
[0134]
然后,利用子参考块a2的第一像素值和子参考块b2的第二像素值,获取边缘运动矢量(0,1)对应的代价值2,代价值的确定方式参见后续实施例。
[0135]
基于边缘运动矢量(0,1)对应的代价值2的确定方式,可以确定边缘运动矢量(0,

1)对应的代价值3、边缘运动矢量(1,0)对应的代价值4、边缘运动矢量(

1,0)对应的代价值5、边缘运动矢量(1,1)对应的代价值6。
[0136]
步骤a4、根据第一代价值和第二代价值,从中心运动矢量和边缘运动矢量中选择一个运动矢量,作为最优运动矢量。例如,可以将代价值最小的运动矢量作为最优运动矢量。例如,假设边缘运动矢量(0,1)对应的代价值2最小,则可以将代价值2对应的边缘运动矢量(0,1)作为最优运动矢量。
[0137]
步骤a5、判断是否满足结束条件。如果否,则可以将该最优运动矢量确定为中心运动矢量,并返回步骤a2。如果是,则可以执行步骤a6。
[0138]
在一个例子中,若迭代次数/搜索范围达到阈值,则满足结束条件;若迭代次数/搜索范围未达到阈值,则不满足结束条件。例如,假设sr为2,即阈值为2,即允许进行两次迭代过程。若迭代次数/搜索范围已经达到2次,即步骤a2

步骤a4已经执行两次,则满足结束条件;否则,不满足结束条件。
[0139]
在另一例子中,从中心运动矢量和边缘运动矢量中选择一个运动矢量作为最优运动矢量后,若选择中心运动矢量作为最优运动矢量,则满足结束条件。
[0140]
步骤a6、根据最优运动矢量确定第一整像素运动矢量调整值(用于调整第一原始运动矢量)和第二整像素运动矢量调整值(用于调整第二原始运动矢量)。
[0141]
在一个例子中,可以根据最优运动矢量和第一原始运动矢量确定第一整像素运动矢量调整值,根据第一整像素运动矢量调整值确定第二整像素运动矢量调整值,第二整像素运动矢量调整值与第一整像素运动矢量调整值对称。
[0142]
例如,第一次迭代过程,最优运动矢量为边缘运动矢量(0,1),以边缘运动矢量(0,1)为中心进行第二次迭代,第二次迭代过程,最优运动矢量为边缘运动矢量(0,1),假设至此完成迭代过程,则第一整像素运动矢量调整值为(0,2),即边缘运动矢量(0,1)与边缘运动矢量(0,1)的和。
[0143]
基于此,假设第一原始运动矢量为(4,4),第一次迭代过程,最优运动矢量为边缘运动矢量(0,1),即最优运动矢量可以对应最优运动矢量(4,5)。以边缘运动矢量(0,1)为中心进行第二次迭代,第二次迭代过程,最优运动矢量为边缘运动矢量(0,1),即最优运动矢量可以对应最优运动矢量(4,6)。
[0144]
综上所述,根据最优运动矢量(4,6)和第一原始运动矢量(4,4)确定第一整像素运动矢量调整值,第一整像素运动矢量调整值为最优运动矢量(4,6)与第一原始运动矢量(4,4)的差,即第一整像素运动矢量调整值为(0,2)。
[0145]
然后,根据第一整像素运动矢量调整值(0,2)确定第二整像素运动矢量调整值,第二整像素运动矢量调整值可以为(0,

2),即(0,2)的对称值。
[0146]
步骤a7、根据最优运动矢量确定第一分像素运动矢量调整值(用于调整第一原始运动矢量)和第二分像素运动矢量调整值(用于调整第二原始运动矢量)。
[0147]
在一个例子中,可以根据最优运动矢量对应的代价值、与最优运动矢量对应的边缘运动矢量对应的代价值,确定第一分像素运动矢量调整值,然后,根据所述第一分像素运动矢量调整值确定第二分像素运动矢量调整值。
[0148]
例如,x0=n*(e(

1,0)

e(1,0))/(e(

1,0)+e(1,0)

2*e(0,0)),y0=n*(e(0,

1)

e
(0,1))/(e(0,

1)+e(0,1)

2*e(0,0)),对于1/2、1/4、1/8和1/16的运动矢量像素精度,则n=1、2、4和8。然后,将(x0,y0)赋值给deltamv,spmv=deltamv/2n,若当前为1/16的运动矢量像素精度,则spmv为(x0/16,y0/16)。
[0149]
在上述公式中,spmv是第一分像素运动矢量调整值,n与运动矢量像素精度有关,如运动矢量像素精度为1/2,n为1,运动矢量像素精度为1/4,n为2,运动矢量像素精度为1/8,n为4,运动矢量像素精度为1/16,n为8。
[0150]
在上述公式中,e(0,0)表示最优运动矢量的代价值;e(

1,0)是以最优运动矢量为中心,最优运动矢量(0,0)的边缘运动矢量(

1,0)的代价值;e(1,0)是以最优运动矢量为中心,最优运动矢量(0,0)的边缘运动矢量(1,0)的代价值;e(0,

1)是以最优运动矢量为中心,最优运动矢量(0,0)的边缘运动矢量(0,

1)的代价值;e(0,1)是以最优运动矢量为中心,最优运动矢量(0,0)的边缘运动矢量(0,1)的代价值。针对各运动矢量的代价值,其确定方式可以参见上述实施例,在此不再赘述。
[0151]
在采用上述方式确定第一分像素运动矢量调整值后,可以根据第一分像素运动矢量调整值确定第二分像素运动矢量调整值,第二分像素运动矢量调整值是第一分像素运动矢量调整值的对称值。例如,若第一分像素运动矢量调整值为(1,0),则第二分像素运动矢量调整值为(

1,0),即(1,0)的对称值。
[0152]
步骤a8、根据第一整像素运动矢量调整值和/或第一分像素运动矢量调整值,对第一原始运动矢量进行调整,得到第一目标运动矢量。
[0153]
例如,第一目标运动矢量=第一原始运动矢量+第一整像素运动矢量调整值+第一分像素运动矢量调整值。当然,上述只是示例,对此不做限制。
[0154]
步骤a9、根据第二整像素运动矢量调整值和/或第二分像素运动矢量调整值,对第二原始运动矢量进行调整,得到第二目标运动矢量。
[0155]
例如,第二目标运动矢量=第二原始运动矢量+第二整像素运动矢量调整值+第二分像素运动矢量调整值。当然,上述只是示例,对此不做限制。
[0156]
实施例12:步骤303和步骤403中,针对当前块的每个子块,根据第一参考块的第一像素值和第二参考块的第二像素值,对第一原始运动矢量进行调整,得到子块的第一目标运动矢量;根据第一参考块的第一像素值和第二参考块的第二像素值,对第二原始运动矢量进行调整,得到子块的第二目标运动矢量。
[0157]
以一个子块(如当前块的每个dx*dy大小的子块,如16*16大小的子块或更小的整块)的处理过程为例,介绍原始运动矢量的调整过程。将第一原始运动矢量记为org_mv0,将第二原始运动矢量记为org_mv1,对第一原始运动矢量org_mv0进行调整后,得到的第一目标运动矢量记为refined_mv0,对第二原始运动矢量org_mv1进行调整后,得到的第二目标运动矢量记为refined_mv1。
[0158]
步骤b1、进行sr次迭代,获得最优的整像素mv点的整像素偏移,将其记为integerdeltamv,integerdeltamv就是上述实施例中的第一整像素运动矢量调整值。例如,先将integerdeltamv初始化为(0,0),每次迭代执行如下过程:
[0159]
步骤b11、将deltamv设为(0,0)。若为首次迭代,基于第一原始运动矢量在第一参考块中的参考像素,复制获得预测值块a1(即第一参考块最中心的w*h的块);基于第二原始运动矢量在第二参考块中的参考像素,复制获得预测值块b1(即第二参考块最中心的w*h的
块)。基于预测值块a1和预测值块b1获得初始代价值cost(初始代价值为基于预测值块a1和预测值块b1的sad(绝对值差和,sum of abstract distortion),确定方式参见后续实施例)。若该初始代价值cost小于4*dx*dy/2,dx和dy是当前子块的宽度和高度,则直接跳过后续搜索过程,执行步骤b2,并将notzerocost设为false。
[0160]
步骤b12、如图6所示,以上述初始点为中心,按照{mv(0,1),mv(0,

1),mv(1,0),mv(

1,0),mv(right,down)}的顺序得到五个偏移mv(这五个偏移mv均称为mvoffset),并进行这五个偏移mv的代价值的计算与比较过程。
[0161]
例如,基于某个mvoffset(如mv(0,1)等),在第一参考块和第二参考块中,通过这个mvoffset获得两块预测值块(如第一参考块中进行中心位置偏移mvoffset的w*h块、第二参考块中进行中心位置偏移

mvoffset(与mvoffset相反)的w*h块),计算两个预测值块的下采样sad作为mvoffset的代价值。
[0162]
然后,保留代价值最小的mvoffset,将代价值最小的mvoffset更新为deltamv的值,且代价值最小的mvoffset作为下一次迭代的新中心偏移点。
[0163]
基于deltamv更新integerdeltamv的值,更新后的integerdeltamv=更新前的integerdeltamv+deltamv,即在当前integerdeltamv的基础上加上deltamv。
[0164]
步骤b13、经过迭代后,若最优mv仍为初始mv(即不是mvoffset)或者最小代价值为0,则不进行下一次迭代搜索过程,执行步骤b2,并将notzerocost设为false。否则,若迭代次数达到sr,则执行步骤b2,若迭代次数未达到sr,则将最优mv作为中心,进行下一次迭代搜索过程,即返回步骤b11。
[0165]
在迭代搜索过程结束后,得到integerdeltamv的取值,即integerdeltamv的最终取值,就是第一整像素运动矢量调整值,后续记为integerdeltamv。
[0166]
步骤b2、可以以步骤b1的最优整像素mv点为中心,获得最优的分像素偏移mv,记为spmv,而spmv就是上述实施例中的第一分像素运动矢量调整值。例如,可以先将spmv初始化为(0,0),然后执行如下过程:
[0167]
步骤b21、只有notzerocost不为false,且deltamv为(0,0)时,才进行后续处理(即需要获取spmv),否则,直接利用integerdeltamv对原始运动矢量进行调整,而不是利用integerdeltamv和spmv对原始运动矢量进行调整。
[0168]
步骤b22、将e(x,y)表示为步骤b1所得最优mv点偏移(x,y)的mv对应代价值(步骤b1计算的代价值)。基于中心及上下左右五个点的e(x,y),可得e(x,y)最小的点的偏移(x0,y0)为:x0=n*(e(

1,0)

e(1,0))/(e(

1,0)+e(1,0)

2*e(0,0)),y0=n*(e(0,

1)

e(0,1))/(e(0,

1)+e(0,1)

2*e(0,0))。
[0169]
在一个例子中,对于1/2、1/4、1/8和1/16的运动矢量像素精度,则n=1、2、4和8。然后,可以将(x0,y0)赋值给deltamv,spmv=deltamv/2n,若当前为1/16的运动矢量像素精度,则spmv可以为(x0/16,y0/16)。
[0170]
若e(

1,0)=e(0,0),则水平向左偏移半个像素(deltamv[0]=

n)。
[0171]
若e(1,0)=e(0,0),则水平向右偏移半个像素(deltamv[0]=n)。
[0172]
若e(0,

1)=e(0,0),则垂直向上偏移半个像素(deltamv[1]=

n)。
[0173]
若e(0,1)=e(0,0),则垂直向下偏移半个像素(deltamv[1]=n)。
[0174]
基于上述处理,可以得到spmv的取值,即第一分像素运动矢量调整值。
[0175]
步骤b3、基于步骤b1的整像素偏移integerdeltamv和步骤b2的分像素偏移spmv,获得最优偏移mv,可以将这个最优偏移mv记为bestmvoffset。而且,bestmvoffset=integerdeltamv+spmv。
[0176]
基于bestmvoffset可以获得两个方向的目标运动矢量:refined_mv0=org_mv0+bestmvoffset;refined_mv1=org_mv1

bestmvoffset。
[0177]
显然,bestmvoffset=integerdeltamv+spmv,即第一整像素运动矢量调整值与第一分像素运动矢量调整值的和。而且,

integerdeltamv是integerdeltamv的对称值,即第二整像素运动矢量调整值,

spmv是spmv的对称值,即第二分像素运动矢量调整值,因此,

bestmvoffset=(

integerdeltamv)+(

spmv)时,即第二整像素运动矢量调整值与第二分像素运动矢量调整值的和。
[0178]
实施例13:针对步骤303和步骤403,为了将第一原始运动矢量org_mv0和第二原始运动矢量org_mv1调整为第一目标运动矢量refined_mv0和第二目标运动矢量refined_mv1,实现方式与实施例12类似,不同之处在于:
[0179]
将步骤b11中的“若该初始代价值cost小于4*dx*dy/2,则直接跳过后续搜索过程”移除,也就是说,即使初始代价值cost小于4*dx*dy/2,也不会“直接跳过后续搜索过程”,而是继续后续搜索过程,即需要执行步骤b12。
[0180]
实施例14:针对步骤303和步骤403,为了将第一原始运动矢量org_mv0和第二原始运动矢量org_mv1调整为第一目标运动矢量refined_mv0和第二目标运动矢量refined_mv1,实现方式与实施例12类似,不同之处在于:
[0181]
将步骤b11中的“若该初始代价值cost小于4*dx*dy/2,则直接跳过后续搜索过程”移除,也就是说,即使初始代价值cost小于4*dx*dy/2,也不会“直接跳过后续搜索过程”,而是继续后续搜索过程,即需要执行步骤b12。
[0182]
将步骤b13中的“若最优mv仍为初始mv(即不是mvoffset)或者最小代价值为0,则不进行下一次迭代搜索过程”移除,也就是说,即使最优mv仍为初始mv或者最小代价值为0,也可以进行下一次迭代搜索过程。
[0183]
实施例15:针对步骤303和步骤403,为了将第一原始运动矢量org_mv0和第二原始运动矢量org_mv1调整为第一目标运动矢量refined_mv0和第二目标运动矢量refined_mv1,实现方式与实施例12类似,不同之处在于:
[0184]
将“notzerocost”的相关过程移除,也就是说,在步骤b11和步骤b13中,不设置和保存notzerocost的值。在步骤b21中,只要deltamv为(0,0),就可以进行分像素偏移计算过程(即步骤b22),而不是只有当notzerocost不为false、且deltamv为(0,0)时,才可以进行分像素偏移计算过程。
[0185]
实施例16:针对步骤303和步骤403,为了将第一原始运动矢量org_mv0和第二原始运动矢量org_mv1调整为第一目标运动矢量refined_mv0和第二目标运动矢量refined_mv1,实现方式与实施例12类似,不同之处在于:
[0186]
将步骤b21中的“只有notzerocost不为false,且deltamv为(0,0)时,才进行后续处理,否则,直接利用integerdeltamv对原始运动矢量进行调整”,修改为“只有notzerocost不为false,且当前最优整像素的上下左右相隔1个整像素的四个点的代价值已在步骤b1计算获得时,才进行后续处理,否则,直接利用integerdeltamv对原始运动矢量
进行调整”。
[0187]
在一个例子中,“后续处理”是指步骤b22的分像素偏移计算过程。
[0188]
在一个例子中,步骤b22的分像素偏移计算过程,需要使用最优整像素的上下左右相隔1个整像素的四个点的代价值,因此,步骤b1中已经计算获得“最优整像素的上下左右相隔1个整像素的四个点的代价值”,是必要条件。
[0189]
实施例17:针对步骤303和步骤403,为了将第一原始运动矢量org_mv0和第二原始运动矢量org_mv1调整为第一目标运动矢量refined_mv0和第二目标运动矢量refined_mv1,实现方式与实施例12类似,不同之处在于:
[0190]
将步骤b21中的“只有notzerocost不为false,且deltamv为(0,0)时,才进行后续处理,否则,直接利用integerdeltamv对原始运动矢量进行调整”,修改为“只要当前最优整像素的上下左右相隔1个整像素的四个点的代价值已在步骤b1计算获得时,才进行后续处理(即分像素偏移计算过程),否则,直接利用integerdeltamv对原始运动矢量进行调整”。
[0191]
实施例18:针对步骤303和步骤403,为了将第一原始运动矢量org_mv0和第二原始运动矢量org_mv1调整为第一目标运动矢量refined_mv0和第二目标运动矢量refined_mv1,实现方式与实施例12类似,不同之处在于:
[0192]
将步骤b21中的“只有notzerocost不为false,且deltamv为(0,0)时,才进行后续处理,否则,直接利用integerdeltamv对原始运动矢量进行调整”,修改为“若当前最优整像素的上下左右相隔1个整像素的四个点的代价值已在步骤b1计算获得时,才进行后续处理(步骤b22的分像素偏移计算过程),否则采用步骤b23进行处理”。
[0193]
步骤b23、将当前最优整像素点mv_inter_org设为距离其最近的,且周围的上下左右相隔1个整像素的四个点的代价值已在步骤b1计算获得的整像素点mv_inter_nearest。然后,以mv_inter_nearest为中心,进行步骤b22的分像素偏移计算过程,也就是说,以mv_inter_nearest为中心获取spmv。
[0194]
例如,若当前最优整像素点mv_inter_org的上下左右相隔1个整像素的四个点的代价值,没有全部在步骤b1计算获得,则从最优整像素点mv_inter_org的周围选择一个整像素点mv_inter_nearest,且整像素点mv_inter_nearest的上下左右相隔1个整像素的四个点的代价值,均已经在步骤b1计算获得。
[0195]
然后,将整像素点mv_inter_nearest作为当前的最优整像素点,并以整像素点mv_inter_nearest为中心获取spmv,具体获取方式参见步骤b22。
[0196]
在以整像素点mv_inter_nearest为中心获取spmv时,参见步骤b22,在计算x0和y0时,x0和y0可以限制在[

2n,2n]的范围内。若x0/y0大于2n,则可以将x0/y0赋值为2n;若x0/y0小于

2n,则可以将x0/y0赋值为

2n。对于1/2、1/4、1/8和1/16的运动矢量像素精度,则n=1、2、4和8。
[0197]
实施例19:在上述实施例中,需要确定与中心运动矢量对应的边缘运动矢量,如5个边缘运动矢量。例如,可以将中心运动矢量(x,y)向不同方向偏移s,顺序得到不同方向的边缘运动矢量(x,y+s)、边缘运动矢量(x,y

s)、边缘运动矢量(x+s,y)、边缘运动矢量(x

s,y)、边缘运动矢量(x+right,y+down)。或者,可以将中心运动矢量(x,y)向不同方向偏移s,顺序得到不同方向的边缘运动矢量(x,y

s)、边缘运动矢量(x,y+s)、边缘运动矢量(x

s,y)、边缘运动矢量(x+s,y)、边缘运动矢量(x+right,y+down)。
[0198]
例如,假设(x,y)为(0,0),s为1,则可以按照(0,1)、(0,

1)、(1,0)、(

1,0)、(right,down)的顺序,得到5个边缘运动矢量。或者,可以按照(0,

1)、(0,1)、(

1,0)、(1,0)、(right,down)的顺序,得到5个边缘运动矢量。
[0199]
实施例20:在上述实施例中,边缘运动矢量(x+right,y+down)的默认值为(x

s,y

s)。若边缘运动矢量(x+s,y)的代价值小于边缘运动矢量(x

s,y)的代价值,则right为s(从

s修改为s);若边缘运动矢量(x,y+s)的代价值小于边缘运动矢量(x,y

s)的代价值,则down为s(从

s修改为s)。或者,若边缘运动矢量(x+s,y)的代价值小于或等于边缘运动矢量(x

s,y)的代价值,则right为s(从

s修改为s);若边缘运动矢量(x,y+s)的代价值小于或等于边缘运动矢量(x,y

s)的代价值,则down为s(从

s修改为s)。
[0200]
例如,按照(0,1)、(0,

1)、(1,0)、(

1,0)、(right,down)的顺序,得到5个边缘运动矢量,(right,down)的默认值为(

1,

1)。若边缘运动矢量(1,0)的代价值小于边缘运动矢量(

1,0)的代价值,则right为1;若边缘运动矢量(0,1)的代价值小于边缘运动矢量(0,

1)的代价值,则down为1。或者,若边缘运动矢量(1,0)的代价值小于或等于边缘运动矢量(

1,0)的代价值,则right为1;若边缘运动矢量(0,1)的代价值小于或等于边缘运动矢量(0,

1)的代价值,则down为1。
[0201]
例如,按照(0,

1)、(0,1)、(

1,0)、(1,0)、(right,down)的顺序,得到5个边缘运动矢量,(right,down)的默认值为(

1,

1)。若边缘运动矢量(1,0)的代价值小于边缘运动矢量(

1,0)的代价值,则right为1;若边缘运动矢量(0,1)的代价值小于边缘运动矢量(0,

1)的代价值,则down为1。或者,若边缘运动矢量(1,0)的代价值小于或等于边缘运动矢量(

1,0)的代价值,则right为1;若边缘运动矢量(0,1)的代价值小于或等于边缘运动矢量(0,

1)的代价值,则down为1。
[0202]
实施例21:步骤303和步骤403中,针对当前块的每个子块,根据第一参考块的第一像素值和第二参考块的第二像素值对第一原始运动矢量进行调整,得到子块的第一目标运动矢量;根据第一参考块的第一像素值和第二参考块的第二像素值对第二原始运动矢量进行调整,得到子块的第二目标运动矢量。
[0203]
以一个子块(如当前块的每个dx*dy大小的子块,如16*16大小的子块,或更小的一个整块)的处理过程为例,介绍原始运动矢量的调整过程。
[0204]
步骤c1、以第一原始运动矢量或者第二原始运动矢量为中心,从周围的运动矢量中选择部分或全部运动矢量,将选择的运动矢量作为候选运动矢量。
[0205]
例如,可以以第一原始运动矢量为中心,从周围的运动矢量中选择部分或全部运动矢量,作为候选运动矢量,对此选择方式参见后续实施例。
[0206]
为了方便描述,后续实施例中,以第一原始运动矢量为中心为例。
[0207]
步骤c2、第一参考块的第一像素值和第二参考块的第二像素值,获取第一原始运动矢量对应的第三代价值、每个候选运动矢量对应的第四代价值。
[0208]
例如,从第一参考块中复制获取第一原始运动矢量对应的子参考块a1,子参考块a1是第一原始运动矢量在第一参考块中的子参考块,子参考块a1的大小为当前块的大小。从第二参考块中复制获取第二原始运动矢量对应的子参考块b1,子参考块b1是第二原始运动矢量在第二参考块中的子参考块,子参考块b1的大小为当前块的大小。然后,利用子参考块a1的第一像素值和子参考块b1的第二像素值,获取第一原始运动矢量对应的第三代价
值。
[0209]
针对每个候选运动矢量,从第一参考块中复制获取候选运动矢量对应的子参考块a2,子参考块a2是候选运动矢量在第一参考块中的子参考块,子参考块a2的大小为当前块的大小。从第二参考块中复制获取候选运动矢量的对称运动矢量对应的子参考块b2,子参考块b2是对称运动矢量在第二参考块中的子参考块,子参考块b2的大小为当前块的大小。利用子参考块a2的第一像素值和子参考块b2的第二像素值,获取候选运动矢量对应的第四代价值。
[0210]
步骤c3、根据第三代价值和第四代价值,从第一原始运动矢量和候选运动矢量中选择一个运动矢量,作为最优运动矢量。例如,将代价值最小的运动矢量(如第一原始运动矢量、或任意一个候选运动矢量)作为最优运动矢量。
[0211]
步骤c4、根据最优运动矢量确定第一整像素运动矢量调整值(用于调整第一原始运动矢量)和第二整像素运动矢量调整值(用于调整第二原始运动矢量)。在一个例子中,可以根据最优运动矢量和第一原始运动矢量确定第一整像素运动矢量调整值,并根据第一整像素运动矢量调整值确定第二整像素运动矢量调整值,第二整像素运动矢量调整值与第一整像素运动矢量调整值对称。
[0212]
例如,假设最优运动矢量为(4,6),第一原始运动矢量为(4,4),则根据最优运动矢量(4,6)和第一原始运动矢量(4,4)确定第一整像素运动矢量调整值,第一整像素运动矢量调整值为最优运动矢量(4,6)与第一原始运动矢量(4,4)的差,即第一整像素运动矢量调整值为(0,2)。
[0213]
然后,根据第一整像素运动矢量调整值(0,2)确定第二整像素运动矢量调整值,第二整像素运动矢量调整值可以为(0,

2),即(0,2)的对称值。
[0214]
步骤c5、根据最优运动矢量确定第一分像素运动矢量调整值(用于调整第一原始运动矢量)和第二分像素运动矢量调整值(用于调整第二原始运动矢量)。
[0215]
在一个例子中,可以根据最优运动矢量对应的代价值、与最优运动矢量对应的边缘运动矢量对应的代价值,确定第一分像素运动矢量调整值,然后,根据所述第一分像素运动矢量调整值确定第二分像素运动矢量调整值。
[0216]
例如,x0=n*(e(

1,0)

e(1,0))/(e(

1,0)+e(1,0)

2*e(0,0)),y0=n*(e(0,

1)

e(0,1))/(e(0,

1)+e(0,1)

2*e(0,0)),对于1/2、1/4、1/8和1/16的运动矢量像素精度,则n=1、2、4和8。然后,将(x0,y0)赋值给deltamv,spmv=deltamv/2n,若当前为1/16的运动矢量像素精度,则spmv为(x0/16,y0/16)。
[0217]
spmv是第一分像素运动矢量调整值。e(0,0)表示最优运动矢量的代价值;e(

1,0)是以最优运动矢量为中心,最优运动矢量(0,0)的边缘运动矢量(

1,0)的代价值;e(1,0)是以最优运动矢量为中心,最优运动矢量(0,0)的边缘运动矢量(1,0)的代价值;e(0,

1)是以最优运动矢量为中心,最优运动矢量(0,0)的边缘运动矢量(0,

1)的代价值;e(0,1)是以最优运动矢量为中心,最优运动矢量(0,0)的边缘运动矢量(0,1)的代价值。针对各运动矢量的代价值,确定方式参见上述实施例。
[0218]
在采用上述方式确定第一分像素运动矢量调整值后,可以根据第一分像素运动矢量调整值确定第二分像素运动矢量调整值,第二分像素运动矢量调整值是第一分像素运动矢量调整值的对称值。例如,若第一分像素运动矢量调整值为(1,0),则第二分像素运动矢
量调整值为(

1,0),即(1,0)的对称值。
[0219]
步骤c6、根据第一整像素运动矢量调整值和/或第一分像素运动矢量调整值,对第一原始运动矢量进行调整,得到第一目标运动矢量。
[0220]
例如,第一目标运动矢量=第一原始运动矢量+第一整像素运动矢量调整值+第一分像素运动矢量调整值。当然,上述只是示例,对此不做限制。
[0221]
步骤c7、根据第二整像素运动矢量调整值和/或第二分像素运动矢量调整值,对第二原始运动矢量进行调整,得到第二目标运动矢量。
[0222]
例如,第二目标运动矢量=第二原始运动矢量+第二整像素运动矢量调整值+第二分像素运动矢量调整值。当然,上述只是示例,对此不做限制。
[0223]
实施例22:步骤303和步骤403中,针对当前块的每个子块,根据第一参考块的第一像素值和第二参考块的第二像素值对第一原始运动矢量进行调整,得到子块的第一目标运动矢量;根据第一参考块的第一像素值和第二参考块的第二像素值对第二原始运动矢量进行调整,得到子块的第二目标运动矢量。
[0224]
以一个子块(如当前块的每个dx*dy大小的子块,如16*16大小的子块或更小的整块)的处理过程为例,介绍原始运动矢量的调整过程。可以将第一原始运动矢量记为org_mv0,将第二原始运动矢量记为org_mv1,将第一目标运动矢量记为refined_mv0,将第二目标运动矢量记为refined_mv1。
[0225]
步骤d1、以第一原始运动矢量为中心,从所述第一原始运动矢量周围的(2*sr+1)*(2*sr+1)个点中,选择部分或者全部运动矢量。例如,若sr=2,则从第一原始运动矢量周围的25个点中选择部分或者全部运动矢量,将其作为候选运动矢量。然后,确定第一原始运动矢量的代价值,并确定每个候选运动矢量的代价值。然后,将代价值最小的运动矢量作为最优运动矢量。
[0226]
与上述实施例的步骤b1相比,步骤d1中,不需要进行迭代过程,即一次就可以选取所有待处理的候选运动矢量,而不是通过迭代过程,第一次迭代选取部分运动矢量,第二次迭代再选取部分运动矢量。基于此,由于一次性的选取所有待处理的候选运动矢量,因此,可以对这些候选运动矢量进行并行处理,得到每个候选运动矢量的代价值,从而减少计算复杂度,提高编码性能。
[0227]
步骤d2、根据最优运动矢量确定integerdeltamv的取值,integerdeltamv的最终取值就是第一整像素运动矢量调整值,对此确定方式不再赘述。
[0228]
步骤d3、以最优运动矢量为中心,获得最优的分像素偏移mv,将其记为spmv,而spmv的取值就是第一分像素运动矢量调整值。
[0229]
步骤d3的实现过程可以参见上述步骤b2,在此不再重复赘述。
[0230]
步骤d4、基于integerdeltamv和spmv,获得bestmvoffset。例如,bestmvoffset=integerdeltamv+spmv。
[0231]
基于bestmvoffset获得目标运动矢量:refined_mv0=org_mv0+bestmvoffset;refined_mv1=org_mv1

bestmvoffset。
[0232]
实施例23:针对步骤303和步骤403,为了将第一原始运动矢量org_mv0和第二原始运动矢量org_mv1调整为第一目标运动矢量refined_mv0和第二目标运动矢量refined_mv1,实现方式与实施例21、实施例22类似。
[0233]
本实施例中,以原始运动矢量为中心,从原始运动矢量周围的共(2*sr+1)*(2*sr+1)个点中,选择全部运动矢量。例如,若sr=2,则从原始运动矢量周围的25个点中选择全部运动矢量,确定这些运动矢量的代价值,并确定每个运动矢量的代价值。然后,将代价值最小的运动矢量作为最优运动矢量。
[0234]
实施例24:针对步骤303和步骤403,为了将第一原始运动矢量org_mv0和第二原始运动矢量org_mv1调整为第一目标运动矢量refined_mv0和第二目标运动矢量refined_mv1,实现方式与实施例21、实施例22类似。本实施例中,由于一次性的选取所有待处理的候选运动矢量,因此,可以对这些候选运动矢量进行并行处理,得到每个候选运动矢量的代价值,从而减少计算复杂度,提高编码性能。
[0235]
本实施例中,以原始运动矢量为中心,从原始运动矢量周围的共(2*sr+1)*(2*sr+1)个点中,选择偏移不超过sr范围内的部分运动矢量。例如,从包括原始运动矢量在内的(2*sr+1)*(2*sr+1)个点中,选择n个(n大于等于1,小于等于(2*sr+1)*(2*sr+1))候选点。确定这n个点对应的运动矢量的代价值。按一定顺序扫描这n个点的代价值,选择最小代价值的运动矢量作为最优运动矢量。若代价值相等则优先选取顺序靠前的候选点。
[0236]
在一个例子中,假设sr=2,则候选点可以为25个,针对这些候选点的顺序,可以采用从左到右,从上到下的顺序。参见图7a所示,这些候选点的顺序可以为:{mv(

2,

2),mv(

1,

2),mv(0,

2),mv(1,

2),mv(2,

2),mv(

2,

1),mv(

1,

1),mv(0,

1),mv(1,

1),mv(2,

1),mv(

2,0),mv(

1,0),mv(0,0),mv(1,0),mv(2,0),mv(

2,1),mv(

1,1),mv(0,1),mv(1,1),mv(2,1),mv(

2,2),mv(

1,2),mv(0,2),mv(1,2),mv(2,2)}。
[0237]
确定这25个点的运动矢量对应的代价值,并按照上述顺序进行扫描,获得代价值最小的运动矢量作为最优偏移mv,利用最优偏移mv可以确定整像素运动矢量调整值和分像素运动矢量调整值,确定方式参见上述实施例。
[0238]
在另一例子中,假设sr=2,候选点可以为21个,针对这些候选点的顺序,可以采用从左到右,从上到下的顺序。参见图7b所示,这些候选点的顺序为:{mv(

1,

2),mv(0,

2),mv(1,

2),mv(

2,

1),mv(

1,

1),mv(0,

1),mv(1,

1),mv(2,

1),mv(

2,0),mv(

1,0),mv(0,0),mv(1,0),mv(2,0),mv(

2,1),mv(

1,1),mv(0,1),mv(1,1),mv(2,1),mv(

1,2),mv(0,2),mv(1,2)}。确定这21个点的运动矢量对应的代价值,并按照上述顺序进行扫描,获得代价值最小的运动矢量作为最优偏移mv,利用最优偏移mv可以确定整像素运动矢量调整值和分像素运动矢量调整值,确定方式参见上述实施例。
[0239]
在另一个例子中,假设sr=2,则候选点可以为25个,针对这些候选点的顺序,以运动矢量(0,0)为中心,采用距离中心从近到远的顺序。参见图7c所示,这些候选点的顺序可以为:{mv(0,0),mv(

1,0),mv(0,

1),mv(1,0),mv(0,1),mv(

1,1),mv(

1,

1),mv(1,

1),mv(1,1),mv(0,2),mv(

2,0),mv(0,

2),mv(2,0),mv(1,2),mv(

1,2),mv(

2,1),mv(

2,

1),mv(

1,

2),mv(1,

2),mv(2,

1),mv(2,1),mv(

2,2),mv(

2,

2),mv(2,

2),mv(2,2)}。确定这25个点的运动矢量对应的代价值,并按照上述顺序进行扫描,获得代价值最小的运动矢量作为最优偏移mv,利用最优偏移mv可以确定整像素运动矢量调整值和分像素运动矢量调整值,确定方式参见上述实施例。
[0240]
在另一例子中,假设sr=2,则候选点可以为21个,针对这些候选点的顺序,以运动矢量(0,0)为中心,采用距离中心从近到远的顺序。参见图7d所示,这些候选点的顺序为:
{mv(0,0),mv(

1,0),mv(0,

1),mv(1,0),mv(0,1),mv(

1,1),mv(

1,

1),mv(1,

1),mv(1,1),mv(0,2),mv(

2,0),mv(0,

2),mv(2,0),mv(1,2),mv(

1,2),mv(

2,1),mv(

2,

1),mv(

1,

2),mv(1,

2),mv(2,

1),mv(2,1)}。
[0241]
确定这21个点的运动矢量对应的代价值,并按照上述顺序进行扫描,获得代价值最小的运动矢量作为最优偏移mv,利用最优偏移mv可以确定整像素运动矢量调整值和分像素运动矢量调整值,确定方式参见上述实施例。
[0242]
在另一例子中,假设sr=2,则候选点可以为13个,针对这些候选点的顺序,以运动矢量(0,0)为中心,采用距离中心从近到远的顺序。参见图7e所示,这些候选点的顺序为:{mv(0,0),mv(

1,0),mv(0,

1),mv(1,0),mv(0,1),mv(

1,1),mv(

1,

1),mv(1,

1),mv(1,1),mv(0,2),mv(

2,0),mv(0,

2),mv(2,0)}。确定这13个点的运动矢量对应的代价值,并按照上述顺序进行扫描,获得代价值最小的运动矢量作为最优偏移mv,利用最优偏移mv可以确定整像素运动矢量调整值和分像素运动矢量调整值,确定方式参见上述实施例。
[0243]
实施例25:针对步骤303和步骤403,为了将第一原始运动矢量org_mv0和第二原始运动矢量org_mv1调整为第一目标运动矢量refined_mv0和第二目标运动矢量refined_mv1,实现方式与实施例21、实施例22类似。本实施例中,由于一次性的选取所有待处理的候选运动矢量,因此,可以对这些候选运动矢量进行并行处理,得到每个候选运动矢量的代价值,从而减少计算复杂度,提高编码性能。
[0244]
本实施例中,以原始运动矢量为中心,从原始运动矢量周围的共(2*sr+1)*(2*sr+1)个点中,选择偏移不超过sr范围内的部分运动矢量。例如,从包括原始运动矢量在内的(2*sr+1)*(2*sr+1)个点中,选择n个(n大于等于1,小于等于(2*sr+1)*(2*sr+1))候选点。确定这n个点对应的运动矢量的代价值。按一定顺序扫描这n个点的代价值,选择最小代价值的运动矢量作为最优运动矢量。若代价值相等则优先选取顺序靠前的候选点。
[0245]
与实施例24不同的是,实施例24的候选点的位置均是固定的,即与原始运动矢量无关,实施例25的候选点的位置与原始运动矢量相关,以下结合几个具体例子进行说明。
[0246]
在一个例子中,假设sr=2,则候选点可以为13个,针对这些候选点的顺序,以运动矢量(0,0)为中心,采用距离中心从近到远的顺序。而且,在距离中心的第一层候选点,顺序与原始运动矢量的大小无关,而距离中心的第二层候选点,顺序与原始运动矢量的大小有关。这些候选点的顺序为:{mv(0,0),mv(

1,0),mv(0,

1),mv(1,0),mv(0,1),mv(

1,1),mv(

1,

1),mv(1,

1),mv(1,1),mv(sign_h*2,0),mv(sign_h*2,sign_v*1),mv(0,sign_v*2),mv(0,sign_v*2)}。第一原始运动矢量记为mv0,水平分量为mv0_hor,垂直分量为mv0_ver。若mv0_hor大于等于0,则sign_h=1;否则sign_h=

1;若mv0_ver大于等于0,则sign_v=1;否则sign_v=

1。
[0247]
确定这13个点的运动矢量对应的代价值,并按照上述顺序进行扫描,获得代价值最小的运动矢量作为最优偏移mv,利用最优偏移mv可以确定整像素运动矢量调整值和分像素运动矢量调整值,确定方式参见上述实施例。
[0248]
在另一例子中,假设sr=2,则候选点可以为13个,针对这些候选点的顺序,以运动矢量(0,0)为中心,采用距离中心从近到远的顺序。而且,在距离中心的第一层候选点,顺序与原始运动矢量的大小无关,而距离中心的第二层候选点,顺序与原始运动矢量的大小有关,这些候选点的顺序为:{mv(0,0),mv(

1,0),mv(0,

1),mv(1,0),mv(0,1),mv(

1,1),mv
(

1,

1),mv(1,

1),mv(1,1),mv(sign_h*2,0),mv(sign_h*2,sign_v*1),mv(0,sign_v*2),mv(0,sign_v*2)}。第一原始运动矢量记为mv0,水平分量为mv0_hor,垂直分量为mv0_ver。若mv0_hor大于0,则sign_h=1;否则sign_h=

1;若mv0_ver大于0,则sign_v=1;否则sign_v=

1。
[0249]
确定这13个点的运动矢量对应的代价值,并按照上述顺序进行扫描,获得代价值最小的运动矢量作为最优偏移mv,利用最优偏移mv可以确定整像素运动矢量调整值和分像素运动矢量调整值,确定方式参见上述实施例。
[0250]
实施例26:在上述实施例中,根据第一参考块的第一像素值和第二参考块的第二像素值,获取中心运动矢量对应的第一代价值、边缘运动矢量对应的第二代价值。根据第一参考块的第一像素值和第二参考块的第二像素值,获取第一原始运动矢量对应的第三代价值、候选运动矢量对应的第四代价值。
[0251]
在一个例子中,可以根据未下采样的第一像素值和未下采样的第二像素值,获取中心运动矢量对应的第一代价值、边缘运动矢量对应的第二代价值、第一原始运动矢量对应的第三代价值、候选运动矢量对应的第四代价值。
[0252]
在另一个例子中,可以对第一像素值进行下采样操作,对第二像素值进行下采样操作;然后,根据下采样后的第一像素值和下采样后的第二像素值,获取中心运动矢量对应的第一代价值、边缘运动矢量对应的第二代价值、第一原始运动矢量对应的第三代价值、候选运动矢量对应的第四代价值。
[0253]
在另一个例子中,可以对第一像素值进行移位和下采样操作,对第二像素值进行移位和下采样操作;然后,根据操作后的第一像素值和操作后的第二像素值,获取中心运动矢量对应的第一代价值、边缘运动矢量对应的第二代价值、第一原始运动矢量对应的第三代价值、候选运动矢量对应的第四代价值。
[0254]
针对不同的情况,确定代价值的方式类似。例如,为了获取中心运动矢量对应的代价值,可以从第一参考块中复制获取中心运动矢量对应的子参考块a1,从第二参考块中复制获取中心运动矢量的对称运动矢量对应的子参考块b1,利用子参考块a1的第一像素值和子参考块b1的第二像素值,获取中心运动矢量对应的代价值。为了获取边缘运动矢量对应的代价值,可以从第一参考块中复制获取边缘运动矢量对应的子参考块a2,从第二参考块中复制获取边缘运动矢量的对称运动矢量对应的子参考块b2,利用子参考块a2的第一像素值和子参考块b2的第二像素值,获取边缘运动矢量对应的代价值,以此类推。
[0255]
综上所述,为了获取运动矢量对应的代价值,从第一参考块中获取该运动矢量对应的子参考块,从第二参考块中获取该运动矢量的对称运动矢量对应的子参考块,然后利用两个子参考块的像素值获取该运动矢量对应的代价值。
[0256]
实施例27:在实施例26的基础上,根据未下采样的第一像素值(即第一参考块中的子参考块的未下采样的像素值)和未下采样的第二像素值(即第二参考块中的子参考块的未下采样的像素值),获取运动矢量对应的代价值。
[0257]
在一个例子中,假设第一参考块中的子参考块为pred0,第二参考块中的子参考块为pred1,则根据子参考块pred0和子参考块pred1的所有像素值的sad确定代价值,不需要对子参考块pred0和子参考块pred1的像素进行垂直下采样。
[0258]
基于子参考块pred0和子参考块pred1的所有像素值,代价值计算公式为:
[0259][0260]
在上述公式中,cost表示代价值,w为子参考块的宽度值,h为子参考块的高度值,pred0(i,j)表示子参考块pred0的第i列第j行的像素值,pred1(i,j)表示子参考块pred1的第i列第j行的像素值,abs(x)表示x的绝对值。
[0261]
实施例28:在实施例26的基础上,可以对第一像素值进行下采样操作,对第二像素值进行下采样操作;可以根据下采样后的第一像素值(即第一参考块中的子参考块的下采样后的像素值)和下采样后的第二像素值(即第二参考块中的子参考块的下采样后的像素值),获取运动矢量对应的代价值。
[0262]
在一个例子中,假设第一参考块中的子参考块为pred0,第二参考块中的子参考块为pred1,则根据子参考块pred0和子参考块pred1的所有像素值的sad确定代价值。在利用所有像素值的sad确定代价值时,对子参考块pred0和子参考块pred1的像素值进行垂直n倍(n为大于0的整数,可以为2)下采样。
[0263]
基于子参考块pred0和子参考块pred1的所有像素值,代价值计算公式为:
[0264][0265]
在上述公式中,cost表示代价值,w为子参考块的宽度值,h为子参考块的高度值,n表示下采样的参数,为大于0的整数,可以为2,pred0(1+n(i

1),j)表示子参考块pred0的第1+n(i

1)列第j行的像素值,pred1(1+n(i

1),j)表示子参考块pred1的第1+n(i

1)列第j行的像素值,abs(x)表示x的绝对值。
[0266]
实施例29:在实施例26的基础上,对第一像素值进行移位和下采样操作,对第二像素值进行移位和下采样操作;根据操作后的第一像素值(第一参考块中的子参考块的移位和下采样后的像素值)和操作后的第二像素值(第二参考块中的子参考块的移位和下采样后的像素值),获取运动矢量对应的代价值。
[0267]
在一个例子中,假设第一参考块中的子参考块为pred0,第二参考块中的子参考块为pred1,pred0和pred1均采用d比特的存储方式,即,pred0中的每个像素值均采用d比特进行存储,pred1中的每个像素值均采用d比特进行存储。
[0268]
若d小于等于8,则根据子参考块pred0和子参考块pred1的所有像素值的sad确定代价值。在利用所有像素值的sad确定代价值时,对子参考块pred0和子参考块pred1的像素值进行垂直n倍(n为大于0的整数,可以为2)下采样。基于子参考块pred0和子参考块pred1的所有像素值,代价值计算公式为:
[0269][0270]
在上述公式中,cost表示代价值,w为子参考块的宽度值,h为子参考块的高度值,n表示下采样的参数,为大于0的整数,可以为2,pred0(1+n(i

1),j)表示子参考块pred0的第1+n(i

1)列第j行的像素值,pred1(1+n(i

1),j)表示子参考块pred1的第1+n(i

1)列第j行的像素值,abs(x)表示x的绝对值,综上可以看出,即仅计算第1行,第n+1行,第2n+1行

的差的绝对值和。
[0271]
若d大于8,先将子参考块pred0和子参考块pred1的所有像素值移位到8比特,获得8
比特的pred0和8比特的pred1,记为pred0‑
8bit(i,j)
和pred1‑
8bit(i,j)
。其目的是为了节省sad计算的存储代价,8位的存储可以实现更高并行度。
[0272]
pred
0_8bit
(i,j)=pred0(i,j)>>(d

8),pred1_
8bit
(i,j)=pred1(i,j)>>(d

8)
[0273]
然后,对8比特的pred0和8比特的pred1的像素值进行垂直n倍(n为大于0的整数,可以为2)下采样,这样,代价值的计算公式可以为:
[0274][0275]
在上述公式中,各个表达式的含义参见上述实施例,在此不再重复赘述。
[0276]
实施例30:步骤304和步骤404中,针对当前块的每个子块,根据该子块的第一目标运动矢量以及该子块的第二目标运动矢量,对该子块的进行运动补偿。具体的,根据该子块的第一目标运动矢量确定该子块对应的第三参考块,并根据该子块的第二目标运动矢量确定该子块对应的第四参考块。根据第三参考块的第三像素值和第四参考块的第四像素值进行加权,得到该子块的预测值。
[0277]
例如,基于子块的两个目标运动矢量,通过插值(如8抽头插值)获得两个方向的参考块(即第三参考块和第四参考块,包括三个分量的预测值,由于目标运动矢量可能为分像素,所以需要插值)。根据第三参考块的第三像素值和第四参考块的第四像素值进行加权,得到最终的预测值(三个分量)。
[0278]
在一个例子中,可以基于子块的第一目标运动矢量,从第一参考帧中确定该子块对应的第五参考块,并对第五参考块中的像素值进行插值,得到第三参考块。可以基于子块的第二目标运动矢量,从第二参考帧中确定该子块对应的第六参考块,并对第六参考块中的像素值进行插值,得到第四参考块。
[0279]
例如,假设当前块的大小为w*h,则可以基于第一目标运动矢量从第一参考帧中确定大小为a*b的第五参考块,第五参考块的大小a*b与插值方式有关,a大于w,b大于h,对此不做限制。通过对第五参考块中的像素值进行插值,可以得到大小为w*h的第三参考块,对此插值方式不做限制。可以基于第二目标运动矢量从第二参考帧中确定大小为a*b的第六参考块,第六参考块的大小a*b与插值方式有关,a大于w,b大于h。通过对第六参考块中的像素值进行插值,可以得到大小为w*h的第四参考块,对此插值方式不做限制。
[0280]
在另一个例子中,基于子块的第一目标运动矢量,从第一参考帧中确定该子块对应的第七参考块,利用第七参考块中的像素值构造第八参考块,并对第八参考块中的像素值进行插值,得到第三参考块。基于子块的第二目标运动矢量,从第二参考帧中确定该子块对应的第九参考块,利用第九参考块中的像素值构造第十参考块,并对第十参考块中的像素值进行插值,得到第四参考块。
[0281]
例如,假设当前块的大小为w*h,则可以基于第一目标运动矢量从第一参考帧中确定大小为w*h的第七参考块。基于第七参考块中的像素值构造大小为a*b的第八参考块,对此构造方式不做限制。第八参考块的大小a*b与插值方式有关,a大于w,b大于h,对此不做限制。通过对第八参考块中的像素值进行插值,可以得到大小为w*h的第三参考块,对此插值方式不做限制。
[0282]
又例如,假设当前块的大小为w*h,则可以基于第二目标运动矢量从第二参考帧中确定大小为w*h的第九参考块。基于第九参考块中的像素值构造大小为a*b的第十参考块,
对此构造方式不做限制。第十参考块的大小a*b与插值方式有关,a大于w,b大于h,对此不做限制。通过对第十参考块中的像素值进行插值,可以得到大小为w*h的第四参考块,对此插值方式不做限制。
[0283]
实施例31:在获得目标运动矢量后,基于每个子块的目标运动矢量,通过8抽头插值滤波器获得两个方向的预测值(即yuv三个分量,即上述第三参考块的预测值和第四参考块的预测值),并加权获得最终的预测值。参见图5所示,黑色区域和白色区域,是从参考帧中获取的像素值,针对灰色区域的像素值,不需要从参考帧中获取,而是可以采用拷贝相邻像素值的方式获得。
[0284]
在一个例子中,首先,可以将白色区域的第一行w+fs

1个像素值,复制给灰色区域的前sr行的像素值。将白色区域的最后一行w+fs

1个像素值,复制给灰色区域的最后sr行的像素值。然后,可以将白色区域第一列的h+fs

1个像素值以及上下各sr个已获得的灰色区域的像素值,复制给灰色区域的前sr列的像素值。将白色区域最后一列的h+fs

1个像素值以及上下各sr个已获得的灰色区域的像素值,复制给灰色区域的最后sr列的像素值。
[0285]
在另一个例子中,首先,可以将白色区域的第一列h+fs

1个像素值,复制给灰色区域的前sr列的像素值。将白色区域的最后一列h+fs

1个像素值,复制给灰色区域的最后sr列的像素值。然后,将白色区域第一行的w+fs

1个像素值以及左右各sr个已获得的灰色区域的像素值,复制给灰色区域的前sr行的像素值。将白色区域的最后一行的w+fs

1个像素值以及左右各sr个已获得的灰色区域的像素值,复制给灰色区域最后sr行的像素值。
[0286]
实施例32:在获得目标运动矢量后,基于每个子块的目标运动矢量,通过8抽头插值滤波器获得两个方向的预测值(即yuv三个分量,即第三参考块的预测值和第四参考块的预测值),并加权获得最终的预测值。参见图5所示,黑色区域和白色区域,是从参考帧中获取的像素值,针对灰色区域的像素值,直接从参考帧对应区域拷贝获得,而不是采用拷贝相邻像素值的方式获得。这种方法简单、性能可能更好,但增加了对于参考帧的访问数据量。
[0287]
实施例33:在获得目标运动矢量后,基于每个子块的目标运动矢量,通过双线性插值滤波器(此处不再是8抽头插值滤波器)获得两个方向的预测值(即yuv三个分量,即上述第三参考块的预测值和第四参考块的预测值),并加权获得最终的预测值。参见图5所示,黑色区域和白色区域,可以是从参考帧中获取的像素值。由于抽头数比较少,因此,不需要灰色区域的像素值。
[0288]
实施例34:在实施例30

实施例33中,在获得两个方向的预测值后,通过均值加权平均(即两个方向的预测值的权重相同),获得最终的预测值。或者,在获得两个方向的预测值后,通过加权平均获得最终的预测值,两个预测值的权值可以不同。例如,两个预测值的权值比例可以为1:2,1:3,2:1等。
[0289]
对于编码端,权重表中可以包括1:2,1:3,2:1等权值比例,编码端可以确定每个权值比例的代价值,并确定代价值最小的权值比例,这样,编码端可以基于代价值最小的权值比例,通过加权平均获得最终的预测值。
[0290]
编码端向解码端发送编码比特流时,该编码比特流携带权值比例在权重表中的索引值。这样,解码端通过解析编码比特流的索引值,从权重表中获取与该索引值对应的权值比例,基于权值比例通过加权平均获得最终的预测值。
[0291]
在一个例子中,权重表可以包括但不限于{

2,3,4,5,10}。权重
“‑
2”表示,最终预
测值=(预测值1*(

2)+预测值2*(8

(

2))),即(

2*预测值1+10*预测值2)/8。权重“10”表示,权重比为10:

2,即最终预测值=(预测值1*(10)+预测值2*(

2)),即(10*预测值1

2*预测值2)/8。权重“3”表示权重比为3:5。权重“5”表示权重比为5:3。权重“4”表示权重比为4:4,即权重“4”表示权重相同。
[0292]
实施例35:步骤305和步骤405中,需要保存当前块的每个子块的第一目标运动矢量和第二目标运动矢量,第一目标运动矢量和第二目标运动矢量用于后续块的编码/解码参考。例如,第一目标运动矢量和第二目标运动矢量用于当前帧的环路滤波;第一目标运动矢量和第二目标运动矢量用于后续帧的时域参考;和/或,第一目标运动矢量和第二目标运动矢量用于当前帧的空域参考。
[0293]
例如,当前块的每个子块的第一目标运动矢量和第二目标运动矢量,可以用于当前块的运动补偿,也可以用于后续帧的时域参考。又例如,当前块的每个子块的第一目标运动矢量和第二目标运动矢量,可以用于当前块的运动补偿,也可以用于当前块的环路滤波过程,还可以用于后续帧的时域参考。
[0294]
又例如,当前块的每个子块的第一目标运动矢量和第二目标运动矢量,可以用于当前块的运动补偿,也可以用于当前块的环路滤波过程,还可以用于后续帧的时域参考,还可以用于当前帧的空域参考,以下对此进行说明。
[0295]
当前块的每个子块的第一目标运动矢量和第二目标运动矢量,可以用于空域中某些lcu(largest coding unit,最大编码单元)内的块的空域参考。由于编解码顺序是从上到下,从左到右,因此,当前块的运动矢量可以被当前lcu内的其他块参考,也可以被后续相邻lcu内的块参考。由于获得的目标运动矢量所需要的计算量较大,若后续块参考当前块的目标运动矢量,则需要等待较长时间。为了避免过多等待引起的时延,只允许少数空域相邻块参考当前块的目标运动矢量,其他块则参考当前块的原始运动矢量。参见图8所示,这些少数的块包括位于当前lcu下侧的下侧lcu和右下侧lcu内的子块,而位于右侧lcu和左侧lcu内的子块,则不可参考当前块的目标运动矢量。
[0296]
实施例36:以下结合一个具体例子,对运动矢量的调整过程进行说明。运动矢量调整的具体步骤可以如下,下文中的“复制”说明不需要插值即可获得,mv为整像素偏移则可直接从参考帧中复制,否则需要进行插值获得。
[0297]
步骤e1、若当前块采用merge或skip模式,则执行下面的过程。
[0298]
步骤e2、准备参考像素值(假设当前块的宽为w,高为h)。
[0299]
准备用于步骤e3的整像素块:基于原始运动矢量(list0的原始运动矢量记为org_mv0,list1的原始运动矢量记为org_mv1),在对应参考帧的对应位置复制两块面积为(w+fs

1)*(h+fs

1)的三个分量的整像素块。
[0300]
准备用于步骤e4的整像素块:在上述(w+fs

1)*(h+fs

1)的整像素块的基础上,将(w+fs

1)*(h+fs

1)的三个分量的整像素块,进行上下左右各sr行/列的扩展,扩展后得到面积为(w+fs

1+2*sr)*(h+fs

1+2*sr)的三个分量的整像素块,记为pred_inter0和pred_inter1,参考图5所示。
[0301]
基于两个不同方向的运动信息进行第一次运动补偿。例如,对亮度分量(因为后续搜索过程用亮度分量计算代价值,从而降低复杂度),且基于两块面积为(w+fs

1)*(h+fs

1)的整像素参考块,通过双线性插值获得两块尺寸为(w+2*sr)*(h+2*sr)的初始参考预测
值(记为pred_bilinear0和pred_bilinear1),fs为滤波器抽头数,默认为8,sr为搜索范围,即目标运动矢量与原始运动矢量最大水平/竖直分量插值,默认为2。pred_bilinear0/1用于步骤e3的使用。
[0302]
步骤e3、对于当前块的每个dx*dy子块(16*16或更小的整块),分别获得目标运动矢量(两个目标运动矢量分别记为refined_mv0和refined_mv1)。
[0303]
步骤e31,进行sr次迭代,获得最优的整像素mv点的整像素偏移,记为integerdeltamv,将integerdeltamv初始化为(0,0),每次迭代执行如下过程:
[0304]
步骤e311,将deltamv设为(0,0)。若为首次迭代过程,则基于原始运动矢量在参考像素pred_bilinear0/1中,复制获得两块预测值块(其实就是pred_bilinear0/1最中心的w*h的块),基于这两个预测值块,获得初始代价值,也就是两个方向预测值块的垂直2倍下采样后的sad。
[0305]
若该初始代价值小于4*dx*dy/2,dx和dy是当前子块的宽度和高度,则直接跳过后续搜索过程,执行步骤步骤e32,并将notzerocost设为false。
[0306]
步骤e312,如图6所示,以上述初始点为中心,按照{mv(0,1),mv(0,

1),mv(1,0),mv(

1,0),mv(right,down)}的顺序得到五个偏移mv(这五个偏移mv均称为mvoffset),并进行这五个偏移mv的代价值的计算与比较过程。
[0307]
例如,基于某个mvoffset,在参考像素pred_bilinear0/1中,通过mvoffset获得两块预测值块(其实就是pred_bilinear0中进行中心位置偏移mvoffset的w*h的块,和pred_bilinear1中进行中心位置偏移

mvoffset(与list0相反)的w*h的块),计算这两个块的下采样sad作为mvoffset的代价值。保留代价值最小的mvoffset(存于deltamv),作为下一次迭代的新的中心偏移点。
[0308]
mv(right,down)的默认值为(

1,

1),若mv(1,0)的代价值小于mv(

1,0)的代价值,right为1;若mv(0,1)的代价值小于mv(0,

1)的代价值,down为1。
[0309]
基于deltamv值更新integerdeltamv:=integerdeltamv+deltamv。
[0310]
步骤e313,经过迭代后,若最优mv仍为初始mv或者最小代价值为0,则不进行下一次迭代搜索过程,执行步骤e32,并将notzerocost设为false。否则,若迭代次数达到sr,则执行步骤e32,若迭代次数未达到sr,则将最优mv作为中心,进行下一次迭代搜索过程,即返回上述步骤e311。
[0311]
步骤e32、可以以步骤e31的最优整像素mv点为中心,获得最优的分像素偏移mv,记为spmv,将spmv初始化为(0,0),然后执行如下过程:
[0312]
步骤e321、只有notzerocost不为false,且deltamv为(0,0)时,才进行后续处理,否则,直接利用integerdeltamv对原始运动矢量进行调整。
[0313]
步骤e322、将e(x,y)表示为步骤e31所得最优mv点偏移(x,y)的mv对应代价值(步骤e31计算的代价值)。基于中心及上下左右五个点的e(x,y),可得e(x,y)最小的点的偏移(x0,y0)为:x0=n*(e(

1,0)

e(1,0))/(e(

1,0)+e(1,0)

2*e(0,0)),y0=n*(e(0,

1)

e(0,1))/(e(0,

1)+e(0,1)

2*e(0,0))。
[0314]
在一个例子中,对于1/2、1/4、1/8和1/16的运动矢量像素精度,则n=1、2、4和8。然后,可以将(x0,y0)赋值给deltamv,spmv=deltamv/2n,若当前为1/16的运动矢量像素精度,则spmv可以为(x0/16,y0/16)。
[0315]
若e(

1,0)=e(0,0),则水平向左偏移半个像素(deltamv[0]=

n)。
[0316]
若e(1,0)=e(0,0),则水平向右偏移半个像素(deltamv[0]=n)。
[0317]
若e(0,

1)=e(0,0),则垂直向上偏移半个像素(deltamv[1]=

n)。
[0318]
若e(0,1)=e(0,0),则垂直向下偏移半个像素(deltamv[1]=n)。
[0319]
步骤e33、基于步骤e31的整像素偏移integerdeltamv和步骤e32的分像素偏移spmv,获得最优偏移mv,记为bestmvoffset。bestmvoffset=integerdeltamv+spmv。基于bestmvoffset可以获得两个方向的目标运动矢量:refined_mv0=org_mv0+bestmvoffset;refined_mv1=org_mv1

bestmvoffset。
[0320]
步骤e4、基于每个子块的目标运动矢量,进行8抽头插值获得两个方向的预测值,并加权获得最终的预测值(三个分量)。例如,基于每个子块的目标运动矢量refined_mv0和refined_mv1,在步骤e2准备的pred_inter0/1中,通过插值获得对应预测块(运动矢量可能为分像素,需插值才能获得对应像素块)。
[0321]
步骤e5、目标运动矢量,用于当前块的运动补偿和后续帧的时域参考。
[0322]
实施例37:上述实施例可以单独实现,也可以任意组合实现。例如,实施例13可以单独实现,实施例15可以单独实现,实施例24可以单独实现,实施例29可以单独实现。实施例13和实施例15组合实现,实施例13和实施例24组合实现,实施例13和实施例29组合实现,实施例15和实施例24组合实现,实施例15和实施例29组合实现,实施例24和实施例29组合实现,实施例13、实施例15和实施例24组合实现,实施例13、实施例15和实施例29组合实现,实施例15、实施例24和实施例29组合实现,实施例13、实施例15、实施例24和实施例29组合实现,等等,当然,上述只是几个示例,对此不做限制,本申请涉及的所有实施例,均可以单独实现或者组合实现。
[0323]
实施例38:
[0324]
基于与上述方法同样的申请构思,本申请实施例还提出一种编解码装置,应用于编码端或者解码端,如图9所示,为所述装置的结构图,所述装置包括:
[0325]
确定模块91,用于若当前块的特征信息满足特定条件,则根据所述当前块的第一原始运动矢量确定所述当前块对应的第一参考块,根据所述当前块的第二原始运动矢量确定所述当前块对应的第二参考块;处理模块92,用于根据所述第一参考块的第一像素值和所述第二参考块的第二像素值,对第一原始运动矢量和第二原始运动矢量进行调整,得到所述第一原始运动矢量对应的第一目标运动矢量和所述第二原始运动矢量对应的第二目标运动矢量;编解码模块93,用于根据所述第一目标运动矢量和所述第二目标运动矢量对所述当前块进行编码或者解码。
[0326]
所述特征信息包括以下一种或者多种:所述当前块对应的运动信息预测模式;所述当前块对应的运动信息属性;所述当前块的尺寸信息。
[0327]
若所述特征信息为所述当前块对应的运动信息预测模式,所述确定模块91还用于:若所述当前块对应的运动信息预测模式为普通融合模式,则确定所述当前块对应的运动信息预测模式满足特定条件;或者,若所述当前块对应的运动信息预测模式为用于帧间预测值与帧内预测值联合生成新预测值的融合模式,则确定所述当前块对应的运动信息预测模式满足特定条件。
[0328]
若所述特征信息为所述当前块对应的运动信息属性,所述确定模块91还用于:若
所述当前块对应的运动信息属性为所述当前块的运动信息包括两个不同方向的运动信息,则确定所述当前块对应的运动信息属性满足特定条件;或者,若所述当前块对应的运动信息属性为所述当前块的运动信息包括两个不同方向的运动信息,所述两个不同方向的运动信息对应的两个参考帧与当前帧的距离相同,则确定所述当前块对应的运动信息属性满足特定条件;或者,若所述当前块对应的运动信息属性为所述当前块复用周围块的运动信息,则确定所述当前块对应的运动信息属性满足特定条件;或者,若所述当前块对应的运动信息属性为所述当前块的每个子块的运动信息相同,则确定所述当前块对应的运动信息属性满足特定条件。
[0329]
若所述特征信息为所述当前块的尺寸信息,所述当前块的尺寸信息包括所述当前块的宽度值和所述当前块的高度值,所述确定模块91还用于:若所述当前块的宽度值位于第一区间[第一阈值,第二阈值]的范围内,则确定所述当前块的尺寸信息满足特定条件;或者,若所述当前块的高度值位于第二区间[第三阈值,第四阈值]的范围内,则确定所述当前块的尺寸信息满足特定条件;或者,若所述当前块的宽度值与高度值的面积位于第三区间[第五阈值,第六阈值]的范围内,则确定所述当前块的尺寸信息满足特定条件;或者,若所述宽度值位于第一区间[第一阈值,第二阈值]的范围内、所述高度值位于第二区间[第三阈值,第四阈值]的范围内、且所述面积位于第三区间[第五阈值,第六阈值]的范围内,则确定所述当前块的尺寸信息满足特定条件。
[0330]
所述确定模块91根据所述当前块的第一原始运动矢量确定所述当前块对应的第一参考块,根据所述当前块的第二原始运动矢量确定所述当前块对应的第二参考块时具体用于:基于所述当前块的第一原始运动矢量,从第一参考帧中确定所述当前块对应的第一参考块;基于所述当前块的第二原始运动矢量,从第二参考帧中确定所述当前块对应的第二参考块;其中,所述第一参考块中每个像素点的第一像素值,是通过对所述第一参考块中的相邻像素点的像素值进行插值得到,或者,通过对所述第一参考块中的相邻像素点的像素值进行拷贝得到;所述第二参考块中每个像素点的第二像素值,是通过对所述第二参考块中的相邻像素点的像素值进行插值得到,或者,通过对所述第二参考块中的相邻像素点的像素值进行拷贝得到。
[0331]
所述处理模块92根据所述第一参考块的第一像素值和所述第二参考块的第二像素值,对第一原始运动矢量和第二原始运动矢量进行调整,得到所述第一原始运动矢量对应的第一目标运动矢量和所述第二原始运动矢量对应的第二目标运动矢量时具体用于:
[0332]
若所述当前块包括至少一个子块,针对所述当前块的每个子块,则根据所述第一像素值和所述第二像素值,对所述第一原始运动矢量和所述第二原始运动矢量进行调整,得到所述子块的第一目标运动矢量和第二目标运动矢量。
[0333]
例如,可以根据所述第一像素值和所述第二像素值,确定所述子块的第一整像素运动矢量调整值和第二整像素运动矢量调整值、和/或,所述子块的第一分像素运动矢量调整值和第二分像素运动矢量调整值;根据所述第一整像素运动矢量调整值和/或第一分像素运动矢量调整值,对所述第一原始运动矢量进行调整,得到所述子块的第一目标运动矢量;根据所述第二整像素运动矢量调整值和/或第二分像素运动矢量调整值,对所述第二原始运动矢量进行调整,得到所述子块的第二目标运动矢量。
[0334]
所述处理模块92根据所述第一像素值和所述第二像素值,确定所述子块的第一整
像素运动矢量调整值和第二整像素运动矢量调整值、所述子块的第一分像素运动矢量调整值和第二分像素运动矢量调整值时具体用于:
[0335]
将所述第一原始运动矢量或者第二原始运动矢量确定为中心运动矢量;
[0336]
确定与所述中心运动矢量对应的边缘运动矢量;
[0337]
根据所述第一像素值和所述第二像素值,获取所述中心运动矢量对应的第一代价值、所述边缘运动矢量对应的第二代价值;
[0338]
根据所述第一代价值和所述第二代价值,从所述中心运动矢量和所述边缘运动矢量中选择一个运动矢量作为最优运动矢量;
[0339]
判断是否满足结束条件;如果否,将所述最优运动矢量确定为中心运动矢量,返回执行确定与所述中心运动矢量对应的边缘运动矢量;
[0340]
如果是,则根据所述最优运动矢量确定所述子块的第一整像素运动矢量调整值和第二整像素运动矢量调整值;根据所述最优运动矢量确定所述子块的第一分像素运动矢量调整值和第二分像素运动矢量调整值。
[0341]
所述处理模块92确定与所述中心运动矢量对应的边缘运动矢量时具体用于:
[0342]
将所述中心运动矢量(x,y)向不同方向偏移s,顺序得到不同方向的边缘运动矢量(x,y+s)、边缘运动矢量(x,y

s)、边缘运动矢量(x+s,y)、边缘运动矢量(x

s,y)、边缘运动矢量(x+right,y+down);或者,
[0343]
将所述中心运动矢量(x,y)向不同方向偏移s,顺序得到不同方向的边缘运动矢量(x,y

s)、边缘运动矢量(x,y+s)、边缘运动矢量(x

s,y)、边缘运动矢量(x+s,y)、边缘运动矢量(x+right,y+down);
[0344]
其中,边缘运动矢量(x+right,y+down)的默认值为(x

s,y

s);
[0345]
若边缘运动矢量(x+s,y)的代价值小于边缘运动矢量(x

s,y)的代价值,则right为s;若边缘运动矢量(x,y+s)的代价值小于边缘运动矢量(x,y

s)的代价值,则down为s;或者,若边缘运动矢量(x+s,y)的代价值小于或等于边缘运动矢量(x

s,y)的代价值,则right为s;若边缘运动矢量(x,y+s)的代价值小于或等于边缘运动矢量(x,y

s)的代价值,则down为s。
[0346]
所述处理模块92根据所述第一像素值和所述第二像素值,获取所述中心运动矢量对应的第一代价值、所述边缘运动矢量对应的第二代价值时具体用于:
[0347]
根据未下采样的第一像素值和未下采样的第二像素值,获取所述中心运动矢量对应的第一代价值、所述边缘运动矢量对应的第二代价值;或者,
[0348]
对所述第一像素值进行下采样操作,对所述第二像素值进行下采样操作;根据下采样后的第一像素值和下采样后的第二像素值,获取所述中心运动矢量对应的第一代价值、所述边缘运动矢量对应的第二代价值;或者,
[0349]
对所述第一像素值进行移位和下采样操作,对所述第二像素值进行移位和下采样操作;根据操作后的第一像素值和操作后的第二像素值,获取所述中心运动矢量对应的第一代价值、所述边缘运动矢量对应的第二代价值。
[0350]
所述处理模块92根据所述第一像素值和所述第二像素值,确定所述子块的第一整像素运动矢量调整值和第二整像素运动矢量调整值、所述子块的第一分像素运动矢量调整值和第二分像素运动矢量调整值时具体用于:
[0351]
以所述第一原始运动矢量或者第二原始运动矢量为中心,从周围的运动矢量中选择部分或者全部运动矢量,将选择的运动矢量作为候选运动矢量;
[0352]
根据所述第一像素值和所述第二像素值,获取所述第一原始运动矢量或者第二原始运动矢量对应的第三代价值、所述候选运动矢量对应的第四代价值;
[0353]
根据所述第三代价值和所述第四代价值,从所述第一原始运动矢量或者第二原始运动矢量、所述候选运动矢量中选择一个运动矢量作为最优运动矢量;
[0354]
根据所述最优运动矢量确定所述子块的第一整像素运动矢量调整值和第二整像素运动矢量调整值;根据所述最优运动矢量确定所述子块的第一分像素运动矢量调整值和第二分像素运动矢量调整值。
[0355]
所述处理模块92根据所述最优运动矢量确定所述子块的第一整像素运动矢量调整值和第二整像素运动矢量调整值时具体用于:根据所述最优运动矢量和所述第一原始运动矢量确定所述子块的第一整像素运动矢量调整值,并根据所述第一整像素运动矢量调整值确定所述子块的第二整像素运动矢量调整值。
[0356]
所述处理模块92根据所述最优运动矢量确定所述子块的第一分像素运动矢量调整值和第二分像素运动矢量调整值时用于:根据所述最优运动矢量对应的代价值、与所述最优运动矢量对应的边缘运动矢量对应的代价值,确定所述子块的第一分像素运动矢量调整值,根据第一分像素运动矢量调整值确定所述子块的第二分像素运动矢量调整值。
[0357]
所述编解码模块93根据所述第一目标运动矢量和所述第二目标运动矢量对所述当前块进行编码或者解码时具体用于:若所述当前块包括至少一个子块,针对所述当前块的每个子块,根据所述子块的第一目标运动矢量确定所述子块对应的第三参考块,并根据所述子块的第二目标运动矢量确定所述子块对应的第四参考块;根据所述第三参考块的第三像素值和所述第四参考块的第四像素值进行加权,得到子块的预测值;根据每个子块的预测值确定所述当前块的预测值。
[0358]
所述编解码模块93根据所述子块的第一目标运动矢量确定所述子块对应的第三参考块,并根据所述子块的第二目标运动矢量确定所述子块对应的第四参考块时具体用于:基于所述子块的第一目标运动矢量,从第一参考帧中确定所述子块对应的第五参考块,对所述第五参考块中的像素值进行插值,得到所述第三参考块;
[0359]
基于所述子块的第二目标运动矢量,从第二参考帧中确定所述子块对应的第六参考块,对所述第六参考块中的像素值进行插值,得到所述第四参考块。
[0360]
所述编解码模块93根据所述子块的第一目标运动矢量确定所述子块对应的第三参考块,并根据所述子块的第二目标运动矢量确定所述子块对应的第四参考块时具体用于:基于所述子块的第一目标运动矢量,从第一参考帧中确定所述子块对应的第七参考块,利用所述第七参考块中的像素值构造第八参考块,并对所述第八参考块中的像素值进行插值,得到所述第三参考块;基于所述子块的第二目标运动矢量,从第二参考帧中确定所述子块对应的第九参考块,利用所述第九参考块中的像素值构造第十参考块,并对所述第十参考块中的像素值进行插值,得到所述第四参考块。
[0361]
所述装置还包括:存储模块,用于为所述当前块存储所述第一目标运动矢量和第二目标运动矢量;其中,所述第一目标运动矢量和第二目标运动矢量用于当前帧的环路滤波、所述第一目标运动矢量和第二目标运动矢量用于后续帧的时域参考、和/或,所述第一
目标运动矢量和第二目标运动矢量用于当前帧的空域参考。
[0362]
实施例39:
[0363]
本申请实施例提供的解码端设备,从硬件层面而言,其硬件架构示意图具体可以参见图10所示。包括:处理器101和机器可读存储介质102,所述机器可读存储介质102存储有能够被所述处理器101执行的机器可执行指令;所述处理器101用于执行机器可执行指令,以实现本申请上述示例公开的方法。例如,处理器用于执行机器可执行指令,以实现如下步骤:
[0364]
若当前块的特征信息满足特定条件,则根据所述当前块的第一原始运动矢量确定所述当前块对应的第一参考块,根据所述当前块的第二原始运动矢量确定所述当前块对应的第二参考块;根据所述第一参考块的第一像素值和所述第二参考块的第二像素值,对第一原始运动矢量和第二原始运动矢量进行调整,得到所述第一原始运动矢量对应的第一目标运动矢量和所述第二原始运动矢量对应的第二目标运动矢量;根据所述第一目标运动矢量和所述第二目标运动矢量对所述当前块进行解码。
[0365]
本申请实施例提供的编码端设备,从硬件层面而言,其硬件架构示意图具体可以参见图11所示。包括:处理器111和机器可读存储介质112,所述机器可读存储介质112存储有能够被所述处理器111执行的机器可执行指令;所述处理器111用于执行机器可执行指令,以实现本申请上述示例公开的方法。例如,处理器用于执行机器可执行指令,以实现如下步骤:
[0366]
若当前块的特征信息满足特定条件,则根据所述当前块的第一原始运动矢量确定所述当前块对应的第一参考块,根据所述当前块的第二原始运动矢量确定所述当前块对应的第二参考块;根据所述第一参考块的第一像素值和所述第二参考块的第二像素值,对第一原始运动矢量和第二原始运动矢量进行调整,得到所述第一原始运动矢量对应的第一目标运动矢量和所述第二原始运动矢量对应的第二目标运动矢量;根据所述第一目标运动矢量和所述第二目标运动矢量对所述当前块进行编码。
[0367]
基于与上述方法同样的申请构思,本申请实施例还提供一种机器可读存储介质,所述机器可读存储介质上存储有若干计算机指令,所述计算机指令被处理器执行时,能够实现本申请上述示例公开的编解码方法。其中,上述机器可读存储介质可以是任何电子、磁性、光学或其它物理存储装置,可以包含或存储信息,如可执行指令、数据,等等。例如,机器可读存储介质可以是:ram(radom access memory,随机存取存储器)、易失存储器、非易失性存储器、闪存、存储驱动器(如硬盘驱动器)、固态硬盘、任何类型的存储盘(如光盘、dvd等),或者类似的存储介质,或者它们的组合。
[0368]
上述实施例阐明的系统、装置、模块或单元,具体可以由计算机芯片或实体实现,或者由具有某种功能的产品来实现。一种典型的实现设备为计算机,计算机的具体形式可以是个人计算机、膝上型计算机、蜂窝电话、相机电话、智能电话、个人数字助理、媒体播放器、导航设备、电子邮件收发设备、游戏控制台、平板计算机、可穿戴设备或者这些设备中的任意几种设备的组合。
[0369]
为了描述的方便,描述以上装置时以功能分为各种单元分别描述。当然,在实施本申请时可以把各单元的功能在同一个或多个软件和/或硬件中实现。
[0370]
本领域内的技术人员应明白,本申请的实施例可提供为方法、系统、或计算机程序
产品。因此,本申请可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本申请实施例可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、cd

rom、光学存储器等)上实施的计算机程序产品的形式。
[0371]
本申请是参照根据本申请实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可以由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其它可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其它可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
[0372]
而且,这些计算机程序指令也可以存储在能引导计算机或其它可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或者多个流程和/或方框图一个方框或者多个方框中指定的功能。
[0373]
这些计算机程序指令也可装载到计算机或其它可编程数据处理设备上,使得在计算机或者其它可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其它可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
[0374]
以上所述仅为本申请的实施例而已,并不用于限制本申请。对于本领域技术人员来说,本申请可以有各种更改和变化。凡在本申请的精神和原理之内所作的任何修改、等同替换、改进等,均应包含在本申请的权利要求范围之内。
当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1