确定仿射编码块的运动矢量的方法和装置转让专利

申请号 : CN201711025757.6

文献号 : CN109729352B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 陈焕浜杨海涛高山周建同刘杉

申请人 : 华为技术有限公司

摘要 :

本申请提供了一种确定仿射编码块的运动矢量的方法,包括:获取第一运动矢量,第一运动矢量为仿射编码块包括的第一运动补偿单元的运动矢量;根据第一运动矢量确定第二运动矢量,第二运动矢量的精度与第一运动补偿单元对应的存储单元的运动矢量精度相匹配;根据第二运动矢量确定第三运动矢量,第三运动矢量与第二运动矢量之间存在预设的对应关系,该第三运动矢量用于后续编解码处理。编码端和解码端在存储运动矢量时可以根据运动补偿单元的运动矢量获取存储单元的运动矢量,均无需再从头开始计算存储单元的运动矢量,从而减小了编解码的复杂度。

权利要求 :

1.一种确定仿射编码块的运动矢量的方法,其特征在于,包括:

获取第一运动矢量,所述第一运动矢量为仿射编码块包括的第一运动补偿单元的运动矢量;

根据所述第一运动矢量确定第二运动矢量,所述第二运动矢量的精度与所述第一运动补偿单元对应的存储单元的运动矢量精度相匹配;

根据所述第二运动矢量确定第三运动矢量,所述第三运动矢量与所述第二运动矢量之间存在预设的对应关系,所述第三运动矢量用于后续编解码处理。

2.根据权利要求1所述的方法,其特征在于,所述预设的对应关系为:

当所述存储单元的尺寸小于或等于所述第一运动补偿单元的尺寸时,所述第三运动矢量的值等于所述第二运动矢量的值;

当所述存储单元的尺寸大于所述第一运动补偿单元尺寸时,所述第三运动矢量的值等于所述第二运动矢量的值,或者,所述第三运动矢量的值等于第四运动矢量的值与所述第二运动矢量的值的平均值,所述第四运动矢量为所述存储单元对应的多个运动补偿单元中除所述第一运动补偿单元之外的运动补偿单元的运动矢量。

3.根据权利要求1所述的方法,其特征在于,所述获取第一运动矢量,包括:确定所述仿射编码块的控制点的运动矢量,所述控制点为用于预测所述仿射编码块的运动矢量的参考像素点;

根据所述控制点的运动矢量确定所述第一运动矢量,所述第一运动矢量的值与所述控制点的运动矢量的值相等,其中,所述第一运动补偿单元包括所述控制点,或者,所述仿射编码块不包括所述控制点且所述第一运动补偿单元是所述仿射编码块包括的多个运动补偿单元中距离所述控制点最近的运动补偿单元。

4.根据权利要求1至3中任一项所述的方法,其特征在于,所述根据所述第一运动矢量确定第二运动矢量,包括:当所述第一运动补偿单元的运动矢量精度与所述存储单元的运动矢量精度相同时,确定所述第二运动矢量的值等于所述第一运动矢量的值;

当所述第一运动补偿单元的运动矢量精度与所述存储单元的运动矢量精度相异时,根据所述第一运动矢量、所述第一运动补偿单元的运动矢量精度、所述存储单元的运动矢量精度以及运动矢量精度变换公式确定所述第二运动矢量。

5.根据权利要求1至3中任一项所述的方法,其特征在于,所述第二运动矢量的精度与所述第一运动补偿单元对应的存储单元的运动矢量精度相匹配,包括:所述第二运动矢量对应的坐标系中坐标轴的单位距离的长度等于所述存储单元对应的坐标系中坐标轴的单位距离的长度。

6.根据权利要求1至3中任一项所述的方法,其特征在于,所述第三运动矢量用于后续编解码处理,包括:所述第三运动矢量用于与所述仿射编码块相邻的编码块的运动信息的推导,和/或,所述第三运动矢量用于环路滤波,和/或,所述第三运动矢量用于重叠块运动补偿。

7.一种确定仿射编码块的运动矢量的装置,其特征在于,包括:

获取模块,用于获取第一运动矢量,所述第一运动矢量为仿射编码块包括的第一运动补偿单元的运动矢量;

第一确定模块,用于根据所述获取模块获取的所述第一运动矢量确定第二运动矢量,所述第二运动矢量的精度与所述第一运动补偿单元对应的存储单元的运动矢量精度相匹配;

第二确定模块,用于根据所述第一确定模块确定的所述第二运动矢量确定第三运动矢量,所述第三运动矢量与所述第二运动矢量之间存在预设的对应关系,所述第三运动矢量用于后续编解码处理。

8.根据权利要求7所述的装置,其特征在于,所述预设的对应关系为:

当所述存储单元的尺寸小于或等于所述运动补偿单元的尺寸时,所述第三运动矢量的值等于所述第二运动矢量的值;

当所述存储单元的尺寸大于所述运动补偿单元尺寸时,所述第三运动矢量的值等于所述第二运动矢量的值,或者,所述第三运动矢量的值等于第四运动矢量的值与所述第二运动矢量的值的平均值,所述第四运动矢量为所述存储单元对应的多个运动补偿单元中除所述第一运动补偿单元之外的运动补偿单元的运动矢量。

9.根据权利要求7所述的装置,其特征在于,所述获取模块具体用于:

确定所述仿射编码块的控制点的运动矢量,所述控制点为用于预测所述仿射编码块的运动矢量的参考像素点;

根据所述控制点的运动矢量确定所述第一运动矢量,所述第一运动矢量的值与所述控制点的运动矢量的值相等,其中,所述第一运动补偿单元包括所述控制点,或者,所述仿射编码块不包括所述控制点且所述第一运动补偿单元是所述仿射编码块包括的多个运动补偿单元中距离所述控制点最近的运动补偿单元。

10.根据权利要求7至9中任一项所述的装置,其特征在于,所述第一确定模块具体用于:当所述第一运动补偿单元的运动矢量精度与所述存储单元的运动矢量精度相同时,确定所述第二运动矢量的值等于所述第一运动矢量的值;

当所述第一运动补偿单元的运动矢量精度与所述存储单元的运动矢量精度相异时,根据所述第一运动矢量、所述第一运动补偿单元的运动矢量精度、所述存储单元的运动矢量精度以及运动矢量精度变换公式确定所述第二运动矢量。

11.根据权利要求7至9中任一项所述的装置,其特征在于,所述第二运动矢量的精度与所述第一运动补偿单元对应的存储单元的运动矢量精度相匹配,包括:所述第二运动矢量对应的坐标系中坐标轴的单位距离的长度等于所述存储单元对应的坐标系中坐标轴的单位距离的长度。

12.根据权利要求7至9中任一项所述的装置,其特征在于,所述第三运动矢量用于后续编解码处理,包括:所述第三运动矢量用于与所述仿射编码块相邻的编码块的运动信息的推导,和/或,所述第三运动矢量用于环路滤波,和/或,所述第三运动矢量用于重叠块运动补偿。

说明书 :

确定仿射编码块的运动矢量的方法和装置

技术领域

[0001] 本申请涉及视频领域,尤其涉及一种确定仿射编码块的运动矢量的方法和装置。

背景技术

[0002] 为了提高传输效率,需要对摄像头录制的原始视频进行编码以去除冗余信息。由于视频中邻近帧中的景物存在着一定的相关性,因此,可将图像分成若干块或宏块,搜索出每个块或宏块在邻近帧中的位置,并得出两者之间的空间位置的相对偏移量,得到的相对偏移量就是通常所指的运动矢量(motion vector,MV),得到运动矢量的过程被称为运动估计(motion estimation,ME)。运动矢量通常以一个固定尺寸的像素阵列为单位存储起来以便于解码端利用运动矢量进行解码,例如该固定尺寸是4×4,即,表示该单位内16个像素点具有相同的运动矢量,该像素阵列也称为存储单元。
[0003] 编码端或解码端可以根据运动矢量以及已重建的图像中确定待重建的图像的重建信息,上述过程称为运动补偿(motion compensation,MC),使用相同的运动矢量进行运动补偿的一组像素称为运动补偿单元。为了降低运动补偿的复杂度,现有技术将采用比存储单元的尺寸更大的运动补偿单元进行运动补偿,例如,将运动补偿单元的尺寸设置为8×8,即,64个像素点在进行运动补偿时使用相同的运动矢量。
[0004] 由于运动补偿单元的尺寸与存储单元的尺寸不同,上述运动补偿方法需要对分别计算运动补偿单元和存储单元对应的运动信息,从而增加了编解码的复杂度。

发明内容

[0005] 本申请提供了一种存储矢量的方法,根据运动补偿单元的运动矢量精度与存储单元的运动矢量精度的关系以及运动补偿单元的尺寸与存储单元的尺寸之间的关系对运动补偿单元的运动矢量进行处理,可以将处理后的运动矢量作为存储单元的运动矢量存储起来,无需再从头开始计算存储单元的运动矢量,从而可以减小编解码的复杂度。
[0006] 第一方面,提供了一种确定仿射编码块的运动矢量的方法,包括:获取第一运动矢量,第一运动矢量为仿射编码块包括的第一运动补偿单元的运动矢量;根据第一运动矢量确定第二运动矢量,第二运动矢量的精度与第一运动补偿单元对应的存储单元的运动矢量精度相匹配;根据第二运动矢量确定第三运动矢量,第三运动矢量与第二运动矢量之间存在预设的对应关系,该第三运动矢量用于后续编解码处理。
[0007] 在本实施例中,获取第一运动矢量后首先判断第一运动矢量的精度与存储单元的运动矢量精度是否匹配,并根据第一运动矢量确定符合存储单元的运动矢量精度的第二运动矢量,得到的第二运动矢量可能还不能直接存储起来,例如,第一运动补偿单元的尺寸可能与存储单元的尺寸不同,因此还需要根据预设的对应关系确定第三运动矢量,最后存储第三运动矢量。由上可知,编码端和解码端在存储运动矢量时可以根据运动补偿单元的运动矢量获取存储单元的运动矢量,均无需再从头开始计算存储单元的运动矢量,从而减小了编解码的复杂度。
[0008] 可选地,上述预设的对应关系为:当存储单元的尺寸小于或等于第一运动补偿单元的尺寸时,第三运动矢量的值等于第二运动矢量的值;当存储单元的尺寸大于第一运动补偿单元尺寸时,第三运动矢量的值等于第二运动矢量的值,或者,第三运动矢量的值等于第四运动矢量的值与第二运动矢量的值的平均值,该第四运动矢量为存储单元对应的多个运动补偿单元中除所述第一运动补偿单元之外的运动补偿单元的运动矢量。
[0009] 当存储单元的尺寸与第一运动补偿单元的尺寸相同时,可以直接将第二运动矢量作为存储单元的运动矢量存储起来,即,第二运动矢量的值与第三运动矢量的值相等;当存储单元的尺寸小于第一运动补偿单元的尺寸时,由于第一运动补偿单元中所有的像素点的运动矢量都是一样的,因此,也可以将第二运动矢量作为存储单元的运动矢量存储起来;当存储单元的尺寸大于第一运动补偿单元的尺寸时,由于存储单元对应多个运动补偿单元,多个运动补偿单元的运动矢量可能不同,因此,存储单元的运动矢量可以有多种选择,一种方法是不管其它运动补偿单元,直接将第二运动矢量作为该存储单元的运动矢量(即第三运动矢量)存储起来,另一种方法是对该存储单元对应的多个运动补偿单元的运动矢量求平均值,再将该平均值对应的矢量作为第三运动矢量存储起来。前一种方法较为简单,后一种方法得到的第三运动矢量的误差较小。
[0010] 可选地,所述获取第一运动矢量,包括:确定仿射编码块的控制点的运动矢量,该控制点为用于预测仿射编码块的运动矢量的参考像素点;根据该控制点的运动矢量确定第一运动矢量,第一运动矢量的值与该控制点的运动矢量的值相等,其中,第一运动补偿单元包括该控制点,或者,仿射编码块不包括该控制点且第一运动补偿单元是仿射编码块包括的多个运动补偿单元中距离该控制点最近的运动补偿单元。
[0011] 在预测编码块的运动矢量的过程中通常会选取一些像素点作为参考点,该参考点也称为控制点,当第一运动补偿单元包括控制点时,或者,当第一运动补偿单元为编码块所包括的多个运动补偿单元中距离控制点最近的运动补偿单元时,确定第一运动矢量为该控制点的运动矢量,从而使得待编解码的编码块能够根据该控制点的运动矢量进行预测,提高了编解码的效率。
[0012] 可选地,所述根据第一运动矢量确定第二运动矢量,包括:当第一运动补偿单元的运动矢量精度与存储单元的运动矢量精度相同时,确定第二运动矢量的值等于第一运动矢量的值;当第一运动补偿单元的运动矢量精度与存储单元的运动矢量精度相异时,根据第一运动矢量、第一运动补偿单元的运动矢量精度、存储单元的运动矢量精度以及运动矢量精度变换公式确定第二运动矢量。
[0013] 当第一运动补偿单元的运动矢量精度与存储单元的运动矢量精度相同时,可以直接将第一运动矢量作为第二运动矢量进行后续处理,当第一运动补偿单元的运动矢量精度与存储单元的运动矢量精度相异时,需要对第一运动矢量进行精度转换,以得到与存储单元的运动矢量精度相匹配的运动矢量。
[0014] 可选地,第二运动矢量的精度与第一运动补偿单元对应的存储单元的运动矢量精度相匹配,包括:第二运动矢量对应的坐标系中坐标轴的单位距离的长度等于存储单元对应的坐标系中坐标轴的单位距离的长度。
[0015] 运动矢量的精度指的是运动矢量所对应的坐标系的坐标轴的单位距离的长度(第一长度),存储单元的运动矢量精度指的是存储单元所对应的坐标系的坐标轴的单位距离的长度(第二长度),运动矢量的精度和存储单元的运动矢量精度相匹配指的是第一长度与第二长度相等,例如,第二长度为1/4个像素点,则当第一长度为1/4个像素点时运动矢量才可以从第一运动补偿单元的坐标系中变换至存储单元的坐标系中。又例如,当第二长度为1/4个像素点,第一长度为1/16个像素点,则运动矢量的精度与存储单元的运动矢量精度不匹配,运动矢量需要经过精度转变后才可以存储起来。
[0016] 可选地,所述第三运动矢量用于后续编解码处理,包括:所述第三运动矢量用于与所述仿射编码块相邻的编码块的运动信息的推导,和/或,所述第三运动矢量用于环路滤波,和/或,所述第三运动矢量用于重叠块运动补偿。
[0017] 第二方面,提供了一种存储运动矢量的装置,该装置可以实现上述第一方面所涉及的方法的执行主体所执行的功能,所述功能可以通过硬件实现,也可以通过硬件执行相应的软件实现。所述硬件或软件包括一个或多个与上述功能相对应的单元或模块。
[0018] 在一种可能的设计中,该装置为编码端,包括编码端预测模块、变换量化模块、熵编码模块、编码重建模块和编码端滤波模块,该编码端预测模块被配置为支持该装置执行上述第一方面所涉及的方法中相应的功能。
[0019] 在另一种可能的设计中,该装置为解码端,包括解码端预测模块、反变换量化模块、熵解码模块、解码重建模块和解码端滤波模块,该解码端预测模块被配置为支持该装置执行上述第一方面所涉及的方法中相应的功能。
[0020] 第三方面,提供了一种网络系统,所述网络系统包括第二方面所述的编码端和解码端。
[0021] 第四方面,提供了一种计算机可读存储介质,该计算机可读存储介质中存储了计算机程序代码,该计算机程序代码被编码端预测模块或解码端预测模块执行时,使得编码端或解码端执行第一方面所述的方法。
[0022] 第五方面,提供了一种芯片,其中存储有指令,当其在编码端或解码端上运行时,使得该芯片执行上述第一方面的方法。
[0023] 第六方面,提供了一种计算机程序产品,该计算机程序产品包括:计算机程序代码,当该计算机程序代码被编码端或解码端的处理单元或处理器运行时,使得编码端或解码端执行上述第一方面的方法。
[0024] 第七方面,提供了一种存储运动矢量的方法,包括:获取第一运动矢量,所述第一运动矢量为仿射编码块包括的第一运动补偿单元的运动矢量;根据所述第一运动矢量确定第五运动矢量,所述第五运动矢量与所述第一运动矢量之间存在预设的对应关系;根据所述第五运动矢量确定第六运动矢量,所述第六运动矢量的精度与所述第一运动补偿单元对应的存储单元的运动矢量精度相匹配,所述第六运动矢量用于后续编解码处理。
[0025] 在本实施例中,获取第一运动矢量后首先根据预设的对应关系确定第五运动矢量,以获取与存储单元的尺寸相匹配的第五运动矢量,随后再判断第五运动矢量的精度与存储单元的运动矢量精度是否匹配,并根据第五运动矢量确定与存储单元的运动矢量精度匹配的第六运动矢量。由上可知,编码端和解码端在存储运动矢量时可以根据运动补偿单元的运动矢量获取存储单元的运动矢量,均无需再从头开始计算存储单元的运动矢量,从而减小了编解码的复杂度。
[0026] 可选地,上述预设的对应关系为:当存储单元的尺寸小于或等于第一运动补偿单元的尺寸时,第五运动矢量的值等于第一运动矢量的值;当存储单元的尺寸大于第一运动补偿单元尺寸时,第五运动矢量的值等于第一运动矢量的值,或者,第五运动矢量的值等于第七运动矢量的值与第一运动矢量的值的平均值,该第七运动矢量为存储单元对应的多个运动补偿单元中除第一运动补偿单元之外的运动补偿单元的运动矢量。
[0027] 当存储单元的尺寸与第一运动补偿单元的尺寸相同时,可以直接将第五运动矢量的值设置为第一运动矢量的值;当存储单元的尺寸小于第一运动补偿单元的尺寸时,由于第一运动补偿单元中所有的像素点的运动矢量都是一样的,因此,也可以将第五运动矢量设置为第一运动矢量的值;当存储单元的尺寸大于第一运动补偿单元的尺寸时,由于存储单元对应多个运动补偿单元,多个运动补偿单元的运动矢量可能不同,因此,存储单元的运动矢量可以有多种选择,一种方法是不管其它运动补偿单元,直接将第五运动矢量作为该存储单元的运动矢量(即第六运动矢量)存储起来,另一种方法是对该存储单元对应的多个运动补偿单元的运动矢量求平均值,再将该平均值对应的矢量作为第六运动矢量存储起来。前一种方法较为简单,后一种方法得到的第六运动矢量的误差较小。
[0028] 可选地,所述获取第一运动矢量,包括:确定仿射编码块的控制点的运动矢量,该控制点为用于预测仿射编码块的运动矢量的参考像素点;根据该控制点的运动矢量确定第一运动矢量,第一运动矢量的值与该控制点的运动矢量的值相等,其中,第一运动补偿单元包括该控制点,或者,仿射编码块不包括该控制点且第一运动补偿单元是仿射编码块包括的多个运动补偿单元中距离该控制点最近的运动补偿单元。
[0029] 在预测编码块的运动矢量的过程中通常会选取一些像素点作为参考点,该参考点也称为控制点,当第一运动补偿单元包括控制点时,或者,当第一运动补偿单元为编码块所包括的多个运动补偿单元中距离控制点最近的运动补偿单元时,确定第一运动矢量为该控制点的运动矢量,从而使得待编解码的编码块能够根据该控制点的运动矢量进行预测,提高了编解码的效率。
[0030] 可选地,所述根据第五运动矢量确定第六运动矢量,包括:当第一运动补偿单元的运动矢量精度与存储单元的运动矢量精度相同时,确定第六运动矢量的值等于第五运动矢量的值;当第一运动补偿单元的运动矢量精度与存储单元的运动矢量精度相异时,根据第五运动矢量、第一运动补偿单元的运动矢量精度、存储单元的运动矢量精度以及运动矢量精度变换公式确定第六运动矢量。
[0031] 当第一运动补偿单元的运动矢量精度与存储单元的运动矢量精度相同时,可以直接将第五运动矢量作为第六运动矢量进行后续处理,当第一运动补偿单元的运动矢量精度与存储单元的运动矢量精度相异时,需要对第五运动矢量进行精度转换,以得到与存储单元的运动矢量精度相匹配的运动矢量。
[0032] 可选地,第六运动矢量的精度与第一运动补偿单元对应的存储单元的运动矢量精度相匹配,包括:第六运动矢量对应的坐标系中坐标轴的单位距离的长度等于存储单元对应的坐标系中坐标轴的单位距离的长度。
[0033] 运动矢量的精度指的是运动矢量所对应的坐标系的坐标轴的单位距离的长度(第一长度),存储单元的运动矢量精度指的是存储单元所对应的坐标系的坐标轴的单位距离的长度(第二长度),运动矢量的精度和存储单元的运动矢量精度相匹配指的是第一长度与第二长度相等,例如,第二长度为1/4个像素点,则当第一长度为1/4个像素点时运动矢量才可以从第一运动补偿单元的坐标系中变换至存储单元的坐标系中。又例如,当第二长度为1/4个像素点,第一长度为1/16个像素点,则运动矢量的精度与存储单元的运动矢量精度不匹配,运动矢量需要经过精度转变后才可以存储起来。
[0034] 可选地,所述第六运动矢量用于后续编解码处理,包括:所述第六运动矢量用于与所述仿射编码块相邻的编码块的运动信息的推导,和/或,所述第六运动矢量用于环路滤波,和/或,所述第六运动矢量用于重叠块运动补偿。
[0035] 第八方面,提供了一种存储运动矢量的装置,该装置可以实现上述第七方面所涉及的方法的执行主体所执行的功能,所述功能可以通过硬件实现,也可以通过硬件执行相应的软件实现。所述硬件或软件包括一个或多个与上述功能相对应的单元或模块。
[0036] 在一种可能的设计中,该装置为编码端,包括编码端预测模块、变换量化模块、熵编码模块、编码重建模块和编码端滤波模块,该编码端预测模块被配置为支持该装置执行上述第七方面所涉及的方法中相应的功能。
[0037] 在另一种可能的设计中,该装置为解码端,包括解码端预测模块、反变换量化模块、熵解码模块、解码重建模块和解码端滤波模块,该解码端预测模块被配置为支持该装置执行上述第七方面所涉及的方法中相应的功能。
[0038] 第九方面,提供了一种网络系统,所述网络系统包括第八方面所述的编码端和解码端。
[0039] 第十方面,提供了一种计算机可读存储介质,该计算机可读存储介质中存储了计算机程序代码,该计算机程序代码被编码端预测模块或解码端预测模块执行时,使得编码端或解码端执行第七方面所述的方法。
[0040] 第十一方面,提供了一种芯片,其中存储有指令,当其在编码端或解码端上运行时,使得该芯片执行上述第七方面的方法。
[0041] 第十二方面,提供了一种计算机程序产品,该计算机程序产品包括:计算机程序代码,当该计算机程序代码被编码端或解码端的处理单元或处理器运行时,使得编码端或解码端执行上述第七方面的方法。

附图说明

[0042] 图1是一种适用于本申请的视频编码方法的示意性流程图;
[0043] 图2是一种适用于本申请的视频解码方法的示意性流程图;
[0044] 图3是一种仿射先进运动矢量预测模式的示意图;
[0045] 图4是一种仿射变换融合模式的示意图;
[0046] 图5是本申请提供的一种存储运动矢量的方法的示意性流程图;
[0047] 图6是本申请提供的一种预测编码块的方法的示意性流程图;
[0048] 图7是一种适用于本申请的仿射编码块的示意图;
[0049] 图8是根据本申请提供的预测编码块的方法得到的一种运动矢量场的示意图;
[0050] 图9是本申请提供的另一种预测编码块的方法的示意性流程图;
[0051] 图10是另一种适用于本申请的仿射编码块的示意图;
[0052] 图11是根据本申请提供的预测编码块的方法得到的另一种运动矢量场的示意图;
[0053] 图12是本申请提供的再一种预测编码块的方法的示意性流程图;
[0054] 图13是再一种适用于本申请的仿射编码块的示意图;
[0055] 图14是根据本申请提供的预测编码块的方法得到的再一种运动矢量场的示意图;
[0056] 图15是本申请提供的一种当前编码块预测运动信息的示意图;
[0057] 图16是本申请提供的一种视频编码器的可能的结构示意图;
[0058] 图17是本申请提供的一种视频解码器的可能的结构示意图。

具体实施方式

[0059] 为了便于理解本申请,首先对本申请提供的技术方案中可能涉及的技术特征进行描述。
[0060] 图1示出了一种适用于本申请的视频编码方法的示意性流程图。
[0061] 该视频编码方法包括帧内预测(intra  prediction)、帧间预测(inter prediction)、变换(transform)、量化(quantization)、熵编码(entropy encode)、环内滤波(in-loop filtering)等环节。将图像划分为编码块之后进行帧内预测或者帧间预测,并且在得到残差之后进行变换量化,最终进行熵编码并输出码流。此处编码块为由像素点组成的M×N大小的阵列(M可以等于N,也可以不等于N),并且已知各个像素点位置的像素值。
图1中,P表示预测值,Dn表示残差,uFn'表示重建值(滤波前),Dn'表示残差。
[0062] 帧内预测是指利用当前图像内已重建区域内像素点的像素值对当前编码块内像素点的像素值进行预测。
[0063] 帧间预测是在已重建的图像中,为当前图像中的当前编码块寻找匹配的参考块,将参考块中的像素点的像素值作为当前编码块中像素点的像素值的预测信息或者预测值(以下不再区分信息和值),此过程即运动估计,并传输当前编码块的运动信息。
[0064] 需要说明的是,当前编码块的运动信息包括了预测方向的指示信息(通常为前向预测、后向预测或者双向预测),一个或两个指向参考块的运动矢量,以及参考块所在图像的指示信息(通常记为参考帧索引)。
[0065] 前向预测是指当前编码块从前向参考图像集合中选择至少一个参考图像获取至少一个参考块。后向预测是指当前编码块从后向参考图像集合中选择至少一个参考图像获取至少一个参考块。双向预测是指从前向和后向参考图像集合中各选择至少一个参考图像获取至少一个参考块。当使用双向预测方法时,当前编码块会存在至少两个参考块,每个参考块各自需要运动矢量和参考帧索引进行指示,然后根据至少两个参考块内像素点的像素值确定当前块内像素点像素值的预测值。
[0066] 运动估计过程需要为当前编码块在参考图像中搜索多个参考块,最终使用哪一个或者哪几个参考块用作预测则使用率失真优化(rate-distortion optimization,RDO)或者其它方法确定。
[0067] 利用帧内预测方法或者帧间预测方法得到预测信息之后,根据当前编码块内像素点的像素值和对应的预测信息可以得到残差信息,例如可以通过当前编码块的像素值与参考块的像素值直接相减的方式得到残差信息,也可以是通过其它可能的方式得到残差值信息。然后利用离散余弦变换(discrete cosine transformation,DCT)等方法对残差信息进行变换,再对变换后的残差信息进行量化,熵编码等操作,最终得到码流,以便解码端对码流进行解码。在编码端的处理中,还可以对预测信号和重建残差信号进行滤波操作,进而得到重建信号,并将其作为后续编码的参考信号。
[0068] 解码端对码流的处理类似于编码端对图像进行编码的逆过程,图2示出了适用于本申请的码流解码方法的示意性流程图。
[0069] 如图2所示,首先利用熵解码,反量化等操作变换得到残差信息,解码端首先通过解析码流得到当前待解码块的预测模式。如果是帧内预测,则利用当前待解码块周围已重建区域内像素点的像素值构建预测信息。如果是帧间预测,则需要当前待解码块,得到当前解码块的运动信息,并使用该运动信息在已重建的图像中确定参考块,将参考块内像素点的像素值作为预测信息。使用预测信息和残差信息,经过滤波操作便可以得到当前待解码块的重建信息,从而进一步得到重建的部分图像。
[0070] 在一些可能的实现方式中,可以通过非平动运动模型预测得到当前编码块的运动信息。
[0071] 在非平动运动模型预测的一些实现方式中,在编解码端使用相同的运动模型推导出当前编码块内每一个子运动补偿单元的运动信息,根据子运动补偿单元的运动信息进行运动补偿,得到预测块,从而提高预测效率。常用的运动模型有6参数仿射模型或者4参数仿射变换模型。
[0072] 4参数的仿射变换模型如公式(1)所示:
[0073]
[0074] 4参数仿射变换模型可以通过两个像素点的运动矢量及其相对于当前编码块左上顶点像素的坐标来表示,将用于表示运动模型参数的像素点记为控制点。若采用左上顶点(0,0)和右上顶点(W,0)像素点作为控制点,则先确定当前编码块左上顶点和右上顶点控制点的运动矢量(vx0,vy0)和(vx1,vy1),然后根据公式(2)推导得到当前编码块中每一个子运动补偿单元的运动信息,其中(x,y)为子运动补偿单元相对于当前编码块左上顶点像素的坐标,W为当前编码块的宽。
[0075]
[0076] 6参数的仿射变换模型如公式(3)所示:
[0077]
[0078] 6参数仿射变换模型可以通过三个像素点的运动矢量及其相对于当前编码块左上顶点像素的坐标来表示。若采用左上顶点(0,0)、右上顶点(W,0)和左下顶点(0,H)像素点作为控制点,则先确定当前编码块左上顶点、右上顶点和左下顶点控制点的运动矢量(vx0,vy0)、(vx1,vy1)和(vx2,vy2),然后根据公式(4)推导得到当前编码块中每一个子运动补偿单元的运动信息,其中(x,y)为子运动补偿单元相对于当前编码块左上顶点像素的坐标,W和H分别为当前编码块的宽和高。需要说明的是,在本申请中,宽和高的定义可以参考图像处理领域或视频处理领域标准中相关的标准,例如,宽指的是当前编码块在水平方向上的像素点的数量,高指的是当前编码块在竖直方向上的数量。
[0079]
[0080] 采用仿射变换运动模型进行预测的编码块称为仿射编码块。
[0081] 通常,可以使用仿射变换先进运动矢量预测(advanced  motion  vector prediction,AMVP)模式或者仿射变换融合(merge)模式获得仿射编码块的控制点的运动信息。
[0082] 下面以4参数仿射变换模型(仿射变换先进运动矢量预测模式)的两个控制点的运动信息的获取方法为例进行说明。
[0083] (1)构建候选运动矢量二元组。
[0084] 利用当前编码块周边邻近的已编码块的运动信息确定当前编码块左上顶点和右上顶点的运动矢量。如图3所示:首先,利用左上顶点相邻已编码块A、B和C块的运动矢量,作为当前编码块左上顶点的运动矢量的候选运动矢量;利用右上顶点相邻已编码块D和E块的运动矢量,作为当前编码块右上顶点的运动矢量的候选运动矢量。将上述左上顶点和右上顶点的候选运动矢量进行组合,构成两个控制点的候选运动矢量二元组队列:
[0085] {(v0A,υ1D),(v0A,υ1E),(v0B,υ1D),(v0B,υ1E),(v0C,υ1D),(v0C,υ1E)},   (5)[0086] 其中v0表示左上顶点候选运动矢量,v1表示右上顶点候选运动矢量,并对其在队列中的位置进行索引,索引值依次为0,1,2,3,4,5。
[0087] 可选的,将候选运动矢量二元组队列根据特定的规则进行剪枝和排序,并可将其截断或填充至特定的个数。
[0088] (2)确定最佳候选运动矢量二元组。
[0089] 在编码端,利用每个候选运动矢量二元组,通过公式(2)获得当前编码块中每个子运动补偿单元(按照像素点划分或按照其它方法划分的大小为N1×N2的像素块)的运动矢量,进而得到每个子运动补偿单元的运动矢量所指向的参考帧中位置的像素值,作为其预测值,进行仿射变换运动补偿。计算当前编码块中每个像素点的原始值和预测值之间差值的平均值,选择差值的平均值最小的对应候选运动矢量二元组中的运动矢量作为当前编码块两个控制点的运动矢量预测值。将表示该二元组在候选运动矢量二元组队列中位置的索引号编码入码流发送给解码器。
[0090] 在解码端,解析索引号,得到两个控制点的运动矢量预测值。
[0091] (3)确定控制点的运动矢量
[0092] 在编码端,以两个控制点的运动矢量预测值作为搜索起始点在一定搜索范围内进行运动搜索获得两个控制点的运动矢量。并将两个控制点的运动矢量与运动矢量预测值之间的预测残差传递到解码端。
[0093] 在解码端,解析码流,得到两个控制点的运动矢量运动残差,根据运动残差和运动矢量预测值得到控制点的运动矢量。
[0094] 下面以6参数仿射变换模型(仿射变换融合模式)的控制点的运动信息的获取方法为例进行说明。
[0095] 仿射变换融合模式是指当前仿射编码块采用与相邻已编码的仿射编码块相同的运动模型进行预测。
[0096] 如图4所示,A、B、C、D和E为当前编码块的相邻已编码块,按照A、B、C、D、E的顺序遍历,找到第一个仿射编码块,获得该仿射编码块的控制点的运动信息,进而推导出当前编码块的左上顶点和右上顶点的运动信息。
[0097] 下面以A为例描述推导过程,其他情况以此类推:
[0098] 若A所在的编码块为仿射编码块,则获得该仿射编码块左上顶点(x2,y2)的运动矢量(vx2,vy2)、右上顶点(x3,y3)的运动矢量(vx3,vy3);利用公式(5)计算获得当前编码块左上顶点(x0,y0)的运动矢量(vx0,vy0),利用公式(6)计算获得当前编码块右上顶点(x1,vy1)的运动矢量(vx1,vy1)。
[0099]
[0100]
[0101] 需要说明的是,其它获得控制点的运动信息的方法也可以应用到本申请中,为了简介,在此不再赘述。
[0102] 为了便于后续编码块根据当前编码块的运动信息进行编解码,需要存储当前编码块的运动信息,下文以确定仿射编码块的运动矢量为例对本申请提供的技术方案进行详细说明。
[0103] 图5是本申请提供的一种确定仿射编码块的矢量的方法的示意性流程图。如图5所示,该方法500包括:
[0104] S501,获取第一运动矢量,第一运动矢量为仿射编码块包括的第一运动补偿单元的运动矢量。
[0105] S502,根据第一运动矢量确定第二运动矢量,第二运动矢量的精度与第一运动补偿单元对应的存储单元的运动矢量精度相匹配。
[0106] S503,根据第二运动矢量确定第三运动矢量,第三运动矢量与第二运动矢量之间存在预设的对应关系,该第三运动矢量用于后续编解码处理。
[0107] 方法500可以由编码端或解码端执行,编码端或解码端可以是硬件设备,也可以是运行在通用硬件设备上的编码软件或解码软件,还可以是具有编解码功能的硬件设备与编解码软件的集合。
[0108] 本申请对编码端或解码端获取第一运动矢量的方式不做限定,例如,可以通过前述4参数仿射变换模型或6参数仿射变换模型获取第一运动矢量,也可以通过其它方式获取第一运动矢量。
[0109] 作为一个可选的示例,获取第一运动矢量之后,先判断第一运动矢量的精度与存储单元的运动矢量精度是否匹配,并确定与存储单元的运动矢量精度相匹配的第二运动矢量,再根据预设的对应关系确定第三运动矢量。
[0110] 作为另一个可选的示例,获取第一运动矢量之后,先根据预设的对应关系确定第五运动矢量,再判断第五运动矢量的精度与存储单元的运动矢量精度是否匹配,并确定与存储单元的运动矢量精度相匹配的第六运动矢量。
[0111] 需要说明的是,上述预设的对应关系只调整运动矢量的大小,不涉及运动矢量的精度转变,无论是先调整第一运动矢量的精度还是先调整第一运动矢量的大小,最终的结果都是相同的,即,第三运动矢量与第六运动矢量是等价的,为了简洁,下面均以先调整第一运动矢量的精度再根据预设的对应关系对调整精度后的第一运动矢量(即,第二运动矢量)进行处理为例进行说明。
[0112] 在本申请中,存储单元的运动矢量精度指的是编解码端对待存储的运动矢量的精度的要求,例如,存储单元的运动矢量精度为1/4表示该存储单元中的像素点的运动矢量的精度需要为1/4个像素点才可以存储到存储器中。
[0113] 第三运动矢量用于后续编解码处理指的是:与仿射编码块相邻的编码块的运动信息的推导,和/或,环路滤波,和/或,重叠块运动补偿。因此,为了便于后续处理,需要存储该第三运动矢量。
[0114] 综上所述,在本实施例中,获取第一运动矢量后首先判断第一运动矢量的精度与存储单元的运动矢量精度是否匹配,并根据第一运动矢量确定符合存储单元的运动矢量精度的第二运动矢量,得到的第二运动矢量可能还不能直接存储起来,例如,第一运动补偿单元的尺寸可能与存储单元的尺寸不同,因此还需要根据预设的对应关系确定第三运动矢量,最后存储第三运动矢量。由上可知,编码端和解码端在存储运动矢量时可以根据运动补偿单元的运动矢量获取存储单元的运动矢量,均无需再从头开始计算存储单元的运动矢量,从而减小了编解码的复杂度。
[0115] 可选地,上述预设的对应关系为:
[0116] 当存储单元的尺寸小于或等于第一运动补偿单元的尺寸时,第三运动矢量的值等于第二运动矢量的值;
[0117] 当存储单元的尺寸大于第一运动补偿单元尺寸时,第三运动矢量的值等于第二运动矢量的值,或者,第三运动矢量的值等于第四运动矢量的值与第二运动矢量的值的平均值,该第四运动矢量为存储单元对应的多个运动补偿单元中除所述第一运动补偿单元之外的运动补偿单元的运动矢量。
[0118] 当存储单元的尺寸与第一运动补偿单元的尺寸相同时,可以直接将第二运动矢量作为存储单元的运动矢量存储起来,即,第二运动矢量的值与第三运动矢量的值相等;当存储单元的尺寸小于第一运动补偿单元的尺寸时,由于第一运动补偿单元中所有的像素点的运动矢量都是一样的,因此,也可以将第二运动矢量作为存储单元的运动矢量存储起来;当存储单元的尺寸大于第一运动补偿单元的尺寸时,由于存储单元对应多个运动补偿单元,多个运动补偿单元的运动矢量可能不同,因此,存储单元的运动矢量可以有多种选择,一种方法是不管其它运动补偿单元,直接将第二运动矢量作为该存储单元的运动矢量存储起来,另一种方法是对该存储单元对应的多个运动补偿单元的运动矢量求平均值,再将该平均值对应的矢量作为第三运动矢量存储起来。前一种方法较为简单,后一种方法得到的第三运动矢量的误差较小。
[0119] 可选地,所述获取第一运动矢量,包括:
[0120] S504,确定仿射编码块的控制点的运动矢量,该控制点为用于预测仿射编码块的运动矢量的参考像素点。
[0121] S505,根据该控制点的运动矢量确定第一运动矢量,第一运动矢量的值与该控制点的运动矢量的值相等,其中,第一运动补偿单元包括该控制点,或者,仿射编码块不包括该控制点且第一运动补偿单元是仿射编码块包括的多个运动补偿单元中距离该控制点最近的运动补偿单元。
[0122] 在预测仿射编码块的运动矢量的过程中通常会选取一些像素点作为参考点,该参考点也称为控制点,当第一运动补偿单元包括控制点时,或者,当第一运动补偿单元为编码块所包括的多个运动补偿单元中距离控制点最近的运动补偿单元时,确定第一运动矢量为该控制点的运动矢量,从而使得与该仿射编码块相邻的编码块能够根据该控制点的运动矢量进行编解码处理,提高了编解码的效率。
[0123] 可选地,所述根据第一运动矢量确定第二运动矢量,包括:
[0124] S507,当第一运动补偿单元的运动矢量精度与存储单元的运动矢量精度相同时,确定第二运动矢量的值等于第一运动矢量的值。
[0125] S508,当第一运动补偿单元的运动矢量精度与存储单元的运动矢量精度相异时,根据第一运动矢量、第一运动补偿单元的运动矢量精度、存储单元的运动矢量精度以及运动矢量精度变换公式确定第二运动矢量。
[0126] 当第一运动补偿单元的运动矢量精度与存储单元的运动矢量精度相同时,可以直接将第一运动矢量作为第二运动矢量进行后续处理,当第一运动补偿单元的运动矢量精度与存储单元的运动矢量精度相异时,需要对第一运动矢量进行精度转换,以得到与存储单元的运动矢量精度相匹配的运动矢量。
[0127] 可选地,第二运动矢量的精度与第一运动补偿单元对应的存储单元的运动矢量精度相匹配,包括:
[0128] 第二运动矢量对应的坐标系中坐标轴的单位距离的长度等于存储单元对应的坐标系中坐标轴的单位距离的长度。
[0129] 运动矢量的精度指的是运动矢量所对应的坐标系的坐标轴的单位距离的长度(第一长度),存储单元的运动矢量精度指的是存储单元所对应的坐标系的坐标轴的单位距离的长度(第二长度),运动矢量的精度和存储单元的运动矢量精度相匹配指的是第一长度与第二长度相等,例如,第二长度为1/4个像素点的长度,则当第一长度为1/4个像素点的长度时运动矢量才可以从第一运动补偿单元的坐标系中变换至存储单元的坐标系中。又例如,当第二长度为1/4个像素点的长度,第一长度为1/16个像素点的长度,则运动矢量的精度与存储单元的运动矢量精度不匹配,运动矢量需要经过精度转变后才可以存储起来。
[0130] 下面再举一个例子进一步说明上述精度匹配的问题。
[0131] 第一运动补偿单元的运动矢量精度为1/M,M的值例如是16,则1/M表示运动矢量在第一运动补偿单元的平面直角坐标系中水平或者竖直移动单位距离的长度为1/16个像素点的长度,若第一运动矢量为(3,7),则第一运动矢量表示第一运动补偿单元中的像素点水平移动3/16个像素点的距离,以及竖直移动7/16个像素点的距离。由于第一运动矢量是与根据第一运动补偿单元的尺寸和精度计算出的运动矢量,因此,第一运动补偿单元的运动矢量精度与第一运动矢量的精度是等价的。
[0132] 令上述第一运动补偿单元对应的存储单元的运动矢量精度为1/N,N的值例如是4,则1/N表示运动矢量在存储单元的平面直角坐标系中水平或者竖直移动单位距离的长度为1/4个像素点的长度。存储单元的运动矢量精度与第一运动补偿单元的运动矢量精度不同,需要将第一运动矢量的精度由1/16转变为1/4才能作为存储单元的运动矢量存储起来。
[0133] 第一运动矢量的精度转变可以通过下述公式实现:
[0134] shift=log2(M)–log2(N) offset=(shift-1)<<1   (8)
[0135] x’=(x+offset)>>shift y’=(y+offset)>>shift   (9)
[0136] 其中,shift表示运动矢量精度差,offset用于四舍五入,“<<”表示二进制数向左移位,“>>”表示二进制数向右移位,x’表示精度转变后得到的第二运动矢量的横坐标值,y’表示精度转变后得到的第二运动矢量的纵坐标值。
[0137] 将第一运动矢量(3,7)带入上述公式(8)和公式(9),得到精度转变后的第二运动矢量(1,2),第二运动矢量表示存储单元中像素点水平移动1/4个像素点的距离,以及竖直移动2/4个像素点的距离。由此可见,上述方法以略微增大运动矢量的误差的代价使得运动补偿单元的运动矢量可以经过转变精度后存储起来,无需根据控制点的运动信息重头计算存储单元的运动矢量,提高了编解码的效率。
[0138] 应理解,上述精度转变方法仅是举例说明,适用于本申请的精度转变方法不限于此。
[0139] 上文重点描述了本申请提供的存储运动矢量的方法,下面,将详细描述预测编码块的流程,以便于读者更加全面地理解本申请。
[0140] 图6示出了本申请提供的一种预测编码块的方法的示意性流程图。该方法600包括:
[0141] S601,得到当前仿射编码块的控制点的运动信息。
[0142] 编解码端可以根据前述4参数仿射变换模型或6参数仿射变换模型获取当前仿射编码块的控制点的运动信息,也可以通过其它方式获取当前仿射编码块的控制点的运动信息。运动信息可以包括编码块中的子运动补偿单元的运动矢量,或者可以包括子图像块的运动矢量。
[0143] S602,获取运动补偿单元尺寸。
[0144] 当前仿射编码块的运动补偿单元的尺寸M×N可以为编解码端预先确定的尺寸,例如可以固定地设置为4×4、8×8等,也可以根据控制点运动矢量差异、运动矢量精度和控制点之间的距离进行确定。
[0145] 需要说明的是,仿射编码块运动补偿单元的尺寸可以通过其它方法确定,具体方法可参照现有技术,在本申请中不再赘述。
[0146] S603,计算每个运动补偿单元的运动信息。
[0147] 在本步骤中,根据控制点的运动信息,采用仿射变换模型,确定当前仿射编码块中每一个运动补偿单元的运动信息。
[0148] 对于当前仿射编码块的每一个运动补偿单元,可采用运动补偿单元中预设位置像素点的运动信息(例如,运动矢量)来表示该运动补偿单元内所有像素点的运动信息。假设运动补偿单元的尺寸为M×N,则预设位置像素点可以为运动补偿单元中心点(M/2,N/2)、左上顶点(0,0),右上顶点(M-1,0),或其它位置的像素点,上述坐标点的坐标系是以左上顶点为原点、以水平方向为x轴、以竖直方向为y轴的平面直角坐标系。以下以运动补偿单元中心点为例说明。
[0149] 运动补偿单元中心点相对于当前仿射编码块左上顶点像素的坐标使用公式(10)计算得到,其中i为水平方向第i个运动补偿单元(从左到右),j为竖直方向第j个运动补偿单元(从上到下),(x(i,j),y(i,j))表示第(i,j)个运动补偿单元中心点相对于当前仿射编码块左上顶点像素的坐标。再将(x(i,j),y(i,j))代入公式(4),获得每个运动补偿单元中心点的运动信息,作为该运动补偿单元内所有像素点的运动信息(vx(i,j),vy(i,j))。
[0150]
[0151] 可选地,直接通过公式(4)计算得到的运动矢量精度高于控制点运动矢量的精度,可以进一步将其量化为与控制点运动矢量相同的精度。
[0152] 如图7所示,在尺寸为16×16的仿射编码块中,运动补偿单元的尺寸为8×8,存储单元的尺寸也是8×8,与运动补偿单元重合,黑色实心点为控制点,斜线图案填充点为每个8×8运动补偿单元的中心点,将各个运动补偿单元的运动信息设置为各个运动补偿单元的中心点的运动信息,控制点的运动信息可以单独存储。
[0153] 图8示出了根据本申请提供的预测编码块的方法得到的运动矢量场。图8中,V(x,y)代表位于(x,y)坐标的像素点的运动矢量,例如,V(4,4)代表位于(4,4)坐标的像素点的运动矢量,V(4,12)代表位于(4,12)坐标的像素点的运动矢量,V(12,4)代表位于(12,4)坐标的像素点的运动矢量,V(12,12)代表位于(12,12)坐标的像素点的运动矢量。由于运动补偿单元和存储单元的尺寸相同且精度相同,因此,图8所示的运动补偿单元的运动矢量场即存储单元的运动矢量场。
[0154] S604,进行运动补偿。
[0155] 对于当前仿射编码块的每一个运动补偿单元,采用S603得到的运动信息,进行运动补偿预测,得到每个运动补偿单元的预测值,进而得到当前仿射编码块的预测块。
[0156] S605,存储运动信息。
[0157] 应理解,上述编码块在编码端指的是待编码的块,上述编码块在解码端指的是待解码的块。
[0158] 在后续编解码流程中,如去块效应滤波器、重叠块运动补偿、后续编码块的运动信息的推导等,需要利用当前仿射编码块的运动信息。因此需要将S603得到的运动补偿单元的运动信息进行存储。
[0159] 当运动补偿单元的运动矢量精度与存储单元的运动矢量精度相同时:
[0160] 如果运动补偿单元的尺寸与存储单元的尺寸相同,则直接将存储单元的运动信息设置为对应运动补偿单元的运动信息(例如运动信息A)。
[0161] 如果运动补偿单元的尺寸大于存储单元,则将运动补偿单元内的每个存储单元的运动信息设置为第一运动信息。例如运动补偿单元的尺寸为8×8,存储单元的尺寸为4×4,则每个运动补偿单元里面有4个存储单元,将其运动信息设置为运动信息A。
[0162] 如果运动补偿单元的尺寸小于存储单元,则可以将存储单元的运动信息设置为其对应的多个运动补偿单元中的一个运动补偿单元的运动信息,或者,将其设置为其对应的多个运动补偿单元中的所有运动信息的平均值。
[0163] 当运动补偿单元的运动矢量精度与存储单元的运动矢量精度相异时:
[0164] 可以先将根据运动补偿单元的运动矢量精度计算得到运动信息转变为与存储单元的运动矢量精度相匹配的运动信息,再采用上述方法确定存储单元的运动信息;也可以先采用上述方法确定存储单元的运动信息(例如运动信息B),再将运动信息B转变为与存储单元的运动矢量精度相匹配的运动信息进行存储。
[0165] 需要说明的是,S605和S604的执行顺序可以调换,即将计算得到的运动补偿单元运动信息存储后,再根据存储的运动信息进行运动补偿。
[0166] 图9示出了本申请提供的一种预测编码块的方法的示意性流程图。该方法900包括:
[0167] S901,得到当前仿射编码块的控制点的运动信息。
[0168] 编解码端可以根据前述4参数仿射变换模型或6参数仿射变换模型获取当前仿射编码块的控制点的运动信息,也可以通过其它方式获取当前仿射编码块的控制点的运动信息。运动信息可以包括编码块中的子运动补偿单元的运动矢量,或者可以包括子图像块的运动矢量。
[0169] S902,获取运动补偿单元尺寸。
[0170] 当前仿射编码块的运动补偿单元的尺寸M×N可以为编解码端预先确定的尺寸,例如可以固定地设置为4×4、8×8等,也可以根据控制点运动矢量差异、运动矢量精度和控制点之间的距离进行确定。
[0171] 需要说明的是,仿射编码块运动补偿单元的尺寸可以通过其它方法确定,具体方法可参照现有技术,在本申请中不再赘述。
[0172] S903,计算每个运动补偿单元的运动信息。
[0173] 在本步骤中,根据控制点的运动信息,采用仿射变换模型,确定当前仿射编码块中每一个运动补偿单元的运动信息。
[0174] 对于当前仿射编码块的每一个运动补偿单元,可采用运动补偿单元中预设位置像素点的运动信息(例如,运动矢量)来表示该运动补偿单元内所有像素点的运动信息。假设运动补偿单元的尺寸为M×N,则预设位置像素点可以为运动补偿单元中心点(M/2,N/2)、左上顶点(0,0),右上顶点(M-1,0),或其它位置的像素点,上述坐标点的坐标系是以左上顶点为原点、以水平方向为x轴、以竖直方向为y轴的平面直角坐标系。以下以运动补偿单元中心点为例说明。
[0175] 运动补偿单元中心点相对于当前仿射编码块左上顶点像素的坐标使用公式(10)计算得到,其中i为水平方向第i个运动补偿单元(从左到右),j为竖直方向第j个运动补偿单元(从上到下),(x(i,j),y(i,j))表示第(i,j)个运动补偿单元中心点相对于当前仿射编码块左上顶点像素的坐标。再将(x(i,j),y(i,j))代入公式(4),获得每个运动补偿单元中心点的运动信息,作为该运动补偿单元内所有像素点的运动信息(vx(i,j),vy(i,j))。
[0176]
[0177] 可选地,直接通过公式(4)计算得到的运动矢量精度高于控制点运动矢量的精度,可以进一步将其量化为与控制点运动矢量相同的精度。
[0178] 可选地,对于控制点所在的运动补偿单元,直接将该运动补偿单元的运动信息设置为控制点的运动信息,若控制点不在当前仿射编码块内,则将距离该控制点最近的运动补偿单元的运动信息设置为控制点的运动信息。
[0179] 如图10所示,在尺寸为16×16的仿射编码块中,运动补偿单元的尺寸为8×8,存储单元的尺寸也是8×8,与运动补偿单元重合,黑色实心点为控制点,斜线图案填充点为每个8×8运动补偿单元的中心点。左上角运动补偿单元的运动信息设置为控制点(0,0)的运动信息,右上角运动补偿单元的运动信息设置为控制点(16,0)的运动信息,其它运动补偿单元的运动信息设置为其对应中心点的运动信息,即,左下角的运动补偿单元的运动信息设置为像素点(4,12)的运动信息,右下角的运动补偿单元的运动信息设置为像素点(12,12)的运动信息。
[0180] 图11示出了根据本申请提供的预测编码块的方法得到的运动矢量场。图11中,V(x,y)代表位于(x,y)坐标的像素点的运动矢量,例如,V(0,0)代表位于(0,0)坐标的像素点的运动矢量,V(4,12)代表位于(4,12)坐标的像素点的运动矢量,其中,位于(0,0)坐标的像素点为控制点。由于运动补偿单元和存储单元的尺寸相同且精度相同,因此,图11所示的运动补偿单元的运动矢量场即存储单元的运动矢量场。
[0181] 在本实施例中,通过将包括控制点的运动补偿单元的运动矢量设置为该控制点的运动矢量,以及将仿射编码块中距离控制点最近的运动补偿单元的运动矢量设置为该控制点的运动矢量,使得控制点的运动矢量可以作为运动补偿单元的运动矢量直接存储起来,无需再单独存储,减少了运动信息存储的复杂度及内存开销,待编解码的仿射编码块能够根据该控制点的运动矢量进行预测,提高了编解码的效率。
[0182] S904,进行运动补偿。
[0183] 对于当前仿射编码块的每一个运动补偿单元,采用S903得到的运动信息,进行运动补偿预测,得到每个运动补偿单元的预测值,进而得到当前仿射编码块的预测块。
[0184] S905,存储运动信息。
[0185] 应理解,上述编码块在编码端指的是待编码的块,上述编码块在解码端指的是待解码的块。
[0186] 在后续解码流程中,如去块效应滤波器、重叠块运动补偿、后续编码块的运动信息的推导等,需要利用当前仿射编码块的运动信息。因此需要将S903得到的运动补偿单元的运动信息进行存储。
[0187] 当运动补偿单元的运动矢量精度与存储单元的运动矢量精度相同时:
[0188] 如果运动补偿单元的尺寸与存储单元的尺寸相同,则直接将存储单元的运动信息设置为对应运动补偿单元的运动信息(例如运动信息A)。
[0189] 如果运动补偿单元的尺寸大于存储单元,则将运动补偿单元内的每个存储单元的运动信息设置为第一运动信息。例如运动补偿单元的尺寸为8×8,存储单元的尺寸为4×4,则每个运动补偿单元里面有4个存储单元,将其运动信息设置为运动信息A。
[0190] 如果运动补偿单元的尺寸小于存储单元,则可以将存储单元的运动信息设置为其对应的多个运动补偿单元中的一个运动补偿单元的运动信息,或者,将其设置为其对应的多个运动补偿单元中的所有运动信息的平均值。
[0191] 当运动补偿单元的运动矢量精度与存储单元的运动矢量精度相异时:
[0192] 可以先将根据运动补偿单元的运动矢量精度计算得到运动信息转变为与存储单元的运动矢量精度相匹配的运动信息,再采用上述方法确定存储单元的运动信息;也可以先采用上述方法确定存储单元的运动信息(例如运动信息B),再将运动信息B转变为与存储单元的运动矢量精度相匹配的运动信息进行存储。
[0193] 需要说明的是,S905和S904的执行顺序可以调换,即将计算得到的运动补偿单元运动信息存储后,再根据存储的运动信息进行运动补偿。
[0194] 图12示出了本申请提供的一种预测编码块的方法的示意性流程图。该方法1200包括:
[0195] S1201,得到当前仿射编码块的控制点的运动信息。
[0196] 编解码端可以根据前述4参数仿射变换模型或6参数仿射变换模型获取当前仿射编码块的控制点的运动信息(包括第一运动矢量),也可以通过其它方式获取当前仿射编码块的控制点的运动信息。运动信息可以包括编码块中的子运动补偿单元的运动矢量,或者可以包括子图像块的运动矢量。
[0197] S1202,获取运动补偿单元尺寸。
[0198] 当前仿射编码块的运动补偿单元的尺寸M×N可以为编解码端预先确定的尺寸,例如可以固定地设置为4×4、8×8等,也可以根据控制点运动矢量差异、运动矢量精度和控制点之间的距离进行确定。
[0199] 需要说明的是,仿射编码块运动补偿单元的尺寸可以通过其它方法确定,具体方法可参照现有技术,在本申请中不再赘述。
[0200] S1203,计算每个运动补偿单元的运动信息。
[0201] 在本步骤中,根据控制点的运动信息,采用仿射变换模型,确定当前仿射编码块中每一个运动补偿单元的运动信息。
[0202] 对于当前仿射编码块的每一个运动补偿单元,可采用运动补偿单元中预设位置像素点的运动信息(例如,运动矢量)来表示该运动补偿单元内所有像素点的运动信息。假设运动补偿单元的尺寸为M×N,则预设位置像素点可以为运动补偿单元中心点(M/2,N/2)、左上顶点(0,0),右上顶点(M-1,0),或其它位置的像素点,上述坐标点的坐标系是以左上顶点为原点、以水平方向为x轴、以竖直方向为y轴的平面直角坐标系。以下以运动补偿单元中心点为例说明。
[0203] 运动补偿单元中心点相对于当前仿射编码块左上顶点像素的坐标使用公式(10)计算得到,其中i为水平方向第i个运动补偿单元(从左到右),j为竖直方向第j个运动补偿单元(从上到下),(x(i,j),y(i,j))表示第(i,j)个运动补偿单元中心点相对于当前仿射编码块左上顶点像素的坐标。再将(x(i,j),y(i,j))代入公式(4),获得每个运动补偿单元中心点的运动信息,作为该运动补偿单元内所有像素点的运动信息(vx(i,j),vy(i,j))。
[0204]
[0205] 可选地,直接通过公式(4)计算得到的运动矢量精度高于控制点运动矢量的精度,可以进一步将其量化为与控制点运动矢量相同的精度。
[0206] 可选地,对于控制点所在的运动补偿单元,直接将该运动补偿单元的运动信息设置为控制点的运动信息,若控制点不在当前仿射编码块内,则将距离该控制点最近的运动补偿单元的运动信息设置为控制点的运动信息。
[0207] 如图13所示,在尺寸为16×16的仿射编码块中,运动补偿单元的尺寸为8×8,存储单元的尺寸也是8×8,与运动补偿单元重合,黑色实心点为控制点,斜线图案填充点为每个8×8运动补偿单元的中心点。将全部运动补偿单元的运动信息设置为其包括的控制点的运动信息,或者,将全部运动补偿单元的运动信息设置为与其最近的控制点的运动信息,即,左上角运动补偿单元的运动信息设置为控制点(0,0)的运动信息,右上角运动补偿单元的运动信息设置为控制点(16,0)的运动信息,左下角的运动补偿单元的运动信息设置为控制点(0,16)的运动信息,右下角的运动补偿单元的运动信息设置为控制点(16,16)的运动信息。
[0208] 图14示出了根据本申请提供的预测编码块的方法得到的运动矢量场。图14中,V(x,y)代表位于(x,y)坐标的像素点的运动矢量,例如,V(0,0)代表位于(0,0)坐标的像素点的运动矢量,V(0,16)代表位于(0,16)坐标的像素点的运动矢量,其中,位于(0,0)坐标的像素点为控制点,位于(0,16)坐标的像素点的也是控制点。由于运动补偿单元和存储单元的尺寸相同且精度相同,因此,图14所示的运动补偿单元的运动矢量场即存储单元的运动矢量场。
[0209] 在本实施例中,通过将包括控制点的运动补偿单元的运动矢量设置为该控制点的运动矢量,以及将仿射编码块中距离控制点最近的运动补偿单元的运动矢量设置为该控制点的运动矢量,使得控制点的运动矢量可以作为运动补偿单元的运动矢量直接存储起来,无需再单独存储,减少了运动信息存储的复杂度及内存的开销,待编解码的仿射编码块能够根据该控制点的运动矢量进行预测,提高了编解码的效率。此外,由于位于仿射编码块的四个角的存储单元的运动信息均为控制点的运动信息,因此,当后续编码块根据图14所示的仿射编码块进行编解码处理(例如,进行运动信息的预测)时,可以选取该仿射编码块中离该后续编码块最近的两个存储单元中存储的运动信息使用,相比于方法900,应用方法1200读取存储单元的运动信息的读取速度更快,原因是运动信息的存储位置离后续编码块的位置越近,读取速度越快。
[0210] 下面举一个例子说明上述有益效果。
[0211] 如图15所示,当前编码块左侧的编码块A为已编码块,在对编码块A进行编码时计算编码块A的四个控制点的运动矢量(现有技术仅计算左上角和右上角的控制点的运动矢量),即,运动矢量V2(x2,y2)、运动矢量V3(x3,y3)、运动矢量V4(x4,y4)和运动矢量V5(x5,y5),当前编码块在进行运动矢量预测时可以选择距离当前编码块最近的两个控制点的运动矢量,即,运动矢量V3和运动矢量V5,从而可以加快运动矢量的读取速度(按照现有技术,只能选择运动矢量V2和运动矢量V3)。当前编码块上侧的编码块B为已编码块,当前编码块在进行运动矢量预测时可以选择距离当前编码块最近的两个控制点的运动矢量,即,运动矢量V6和运动矢量V7,从而可以加快运动矢量的读取速度。
[0212] S1204,进行运动补偿。
[0213] 对于当前仿射编码块的每一个运动补偿单元,采用S1203得到的运动信息,进行运动补偿预测,得到每个运动补偿单元的预测值,进而得到当前仿射编码块的预测块。
[0214] S1205,存储运动信息。
[0215] 在后续解码流程中,如去块效应滤波器、重叠块运动补偿、后续编码块的运动信息的推导等,需要利用当前仿射编码块的运动信息。因此需要将S1203得到的运动补偿单元的运动信息进行存储。
[0216] 当运动补偿单元的运动矢量精度与存储单元的运动矢量精度相同时:
[0217] 如果运动补偿单元的尺寸与存储单元的尺寸相同,则直接将存储单元的运动信息设置为对应运动补偿单元的运动信息(例如运动信息A)。
[0218] 如果运动补偿单元的尺寸大于存储单元,则将运动补偿单元内的每个存储单元的运动信息设置为第一运动信息。例如运动补偿单元的尺寸为8×8,存储单元的尺寸为4×4,则每个运动补偿单元里面有4个存储单元,将其运动信息设置为运动信息A。
[0219] 如果运动补偿单元的尺寸小于存储单元,则可以将存储单元的运动信息设置为其对应的多个运动补偿单元中的一个运动补偿单元的运动信息,或者,将其设置为其对应的多个运动补偿单元中的所有运动信息的平均值。
[0220] 当运动补偿单元的运动矢量精度与存储单元的运动矢量精度相异时:
[0221] 可以先将根据运动补偿单元的运动矢量精度计算得到运动信息转变为与存储单元的运动矢量精度相匹配的运动信息,再采用上述方法确定存储单元的运动信息;也可以先采用上述方法确定存储单元的运动信息(例如运动信息B),再将运动信息B转变为与存储单元的运动矢量精度相匹配的运动信息进行存储。
[0222] 需要说明的是,S1205和S1204的执行顺序可以调换,即将计算得到的运动补偿单元运动信息存储后,再根据存储的运动信息进行运动补偿。
[0223] 图16是本申请提供的用于确定仿射编码块运动矢量的视频编码器10的示意性框图,包括编码端预测模块101、变换量化模块102、熵编码模块103、编码重建模块104、编码端滤波模块105,图17是本申请提供的用于确定仿射编码块运动矢量的视频解码器20的示意性框图,包括解码端预测模块206、反变换反量化模块207、熵解码模块208、解码重建模块209、解码滤波模块210。具体的:
[0224] 编码端预测模块101和解码端预测模块206用于产生预测数据。视频编码器10可产生每一不再分割编码单元(CU)的一个或多个预测单元(PU)。CU的每一个PU可与CU的像素块内的不同像素块相关联。视频编码器10可针对CU的每一个PU产生预测性像素块。视频编码器10可使用帧内预测或帧间预测来产生PU的预测性像素块。如果视频编码器10使用帧内预测来产生PU的预测性像素块,则视频编码器10可基于与PU相关联的图片的解码后的像素来产生PU的预测性像素块。如果视频编码器10使用帧间预测来产生PU的预测性像素块,则视频编码器10可基于不同于与PU相关联的图片的一个或多个图片的解码后的像素来产生PU的预测性像素块。视频编码器10可基于CU的PU的预测性像素块来产生CU的残余像素块。CU的残余像素块可指示CU的PU的预测性像素块中的采样值与CU的初始像素块中的对应采样值之间的差。
[0225] 变换量化模块102用于对经过预测的残差数据进行处理。视频编码器10可对CU的残余像素块执行递归四叉树分割以将CU的残余像素块分割成与CU的变换单元(TU)相关联的一个或多个较小残余像素块。因为与TU相关联的像素块中的像素各自对应一个亮度采样及两个色度采样,所以每一个TU可与一个亮度的残余采样块及两个色度的残余采样块相关联。视频编码器10可将一个或多个变换应用于与TU相关联的残余采样块以产生系数块(即,系数的块)。变换可以是DCT变换或者它的变体。采用DCT的变换矩阵,通过在水平和竖直方向应用一维变换计算二维变换,获得所述系数块。视频编码器10可对系数块中的每一个系数执行量化程序。量化一般指系数经量化以减少用以表示系数的数据量,从而提供进一步压缩的过程。反变换反量化模块207执行的是变换量化模块102的逆过程。
[0226] 视频编码器10可产生表示量化后系数块中的系数的语法元素的集合。视频编码器10通过熵编码模块103可将熵编码操作(例如,上下文自适应二进制算术译码(CABAC)操作)应用于上述语法元素中的部分或者全部。为将CABAC编码应用于语法元素,视频编码器10可将语法元素二进制化以形成包括一个或多个位(称作“二进位”)的二进制序列。视频编码器
10可使用规则(regular)编码来编码二进位中的一部分,且可使用旁通(bypass)编码来编码二进位中的其它部分。
[0227] 除熵编码系数块的语法元素外,视频编码器10通过编码重建模块104,可将逆量化及逆变换应用于变换后的系数块,以从变换后的系数块重建残余采样块。视频编码器10可将重建后的残余采样块加到一个或多个预测性采样块的对应采样块,以产生重建后的采样块。通过重建每一色彩分量的采样块,视频编码器10可重建与TU相关联的像素块。以此方式重建CU的每一TU的像素块,直到CU的整个像素块重建完成。
[0228] 在视频编码器10重建构CU的像素块之后,视频编码器10通过编码端滤波模块105,执行消块滤波操作以减少与CU相关联的像素块的块效应。在视频编码器10执行消块滤波操作之后,视频编码器10可使用采样自适应偏移(SAO)来修改图片的CTB的重建后的像素块。在执行这些操作之后,视频编码器10可将CU的重建后的像素块存储于解码图片缓冲器中以用于产生其它CU的预测性像素块。
[0229] 视频解码器20可接收码流。所述码流以比特流的形式包含了由视频编码器10编码的视频数据的编码信息。视频解码器20通过熵解码模块208,解析所述码流以从所述码流提取语法元素。当视频解码器20执行CABAC解码时,视频解码器20可对部分二进位执行规则解码且可对其它部分的二进位执行旁通解码,码流中的二进位与语法元素具有映射关系,通过解析二进位获得语法元素。
[0230] 视频解码器20通过解码重建模块209,可基于从码流提取的语法元素来重建视频数据的图片。基于语法元素来重建视频数据的过程大体上与由视频编码器10执行以产生语法元素的过程互逆。举例来说,视频解码器20可基于与CU相关联的语法元素来产生CU的PU的预测性像素块。另外,视频解码器20可逆量化与CU的TU相关联的系数块。视频解码器20可对逆量化后的系数块执行逆变换以重建与CU的TU相关联的残余像素块。视频解码器20可基于预测性像素块及残余像素块来重建CU的像素块。
[0231] 在视频解码器20重建CU的像素块之后,视频解码器20通过解码滤波模块210,执行消块滤波操作以减少与CU相关联的像素块的块效应。另外,基于一个或多个SAO语法元素,视频解码器20可执行与视频编码器10相同的SAO操作。在视频解码器20执行这些操作之后,视频解码器20可将CU的像素块存储于解码图片缓冲器中。解码图片缓冲器可提供用于后续运动补偿、帧内预测及显示装置呈现的参考图片。
[0232] 上述编码端预测模块101和解码端预测模块206用于执行方法500、方法600、方法900和方法1200中相应的步骤,例如,用于执行:
[0233] 获取第一运动矢量,所述第一运动矢量为仿射编码块包括的第一运动补偿单元的运动矢量;
[0234] 用于根据所述第一运动矢量确定第二运动矢量,所述第二运动矢量的精度与所述第一运动补偿单元对应的存储单元的运动矢量精度相匹配;
[0235] 用于根据所述第二运动矢量确定第三运动矢量,所述第三运动矢量与所述第二运动矢量之间存在预设的对应关系,所述第三运动矢量用于后续编解码处理。
[0236] 本领域的技术人员可以清楚地了解到,为了描述的方便和简洁,上述描述的编码端和解码端的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。
[0237] 本申请提供的编码端10和解码端20,获取第一运动矢量后首先判断第一运动矢量的精度与存储单元的运动矢量精度是否匹配,并根据第一运动矢量确定符合存储单元的运动矢量精度的第二运动矢量,得到的第二运动矢量可能还不能直接存储起来,例如,第一运动补偿单元的尺寸可能与存储单元的尺寸不同,因此还需要根据预设的对应关系确定第三运动矢量,最后存储第三运动矢量。由上可知,编码端和解码端在存储运动矢量时可以根据运动补偿单元的运动矢量获取存储单元的运动矢量,均无需再从头开始计算存储单元的运动矢量,从而减小了编解码的复杂度。
[0238] 在本申请各个实施例中,各过程的序号的大小并不意味着执行顺序的先后,各过程的执行顺序应以其功能和内在逻辑确定,而不应对本申请的实施过程构成任何限定。
[0239] 另外,本文中术语“和/或”,仅仅是一种描述关联对象的关联关系,表示可以存在三种关系,例如,A和/或B,可以表示:单独存在A,同时存在A和B,单独存在B这三种情况。另外,本文中字符“/”,一般表示前后关联对象是一种“或”的关系。
[0240] 结合本申请公开内容所描述的方法或者算法的步骤可以硬件的方式来实现,也可以是由处理器执行软件指令的方式来实现。软件指令可以由相应的软件模块组成,软件模块可以被存放于随机存取存储器(random access memory,RAM)、闪存、只读存储器(read only memory,ROM)、可擦除可编程只读存储器(erasable programmable ROM,EPROM)、电可擦可编程只读存储器(electrically EPROM,EEPROM)、寄存器、硬盘、移动硬盘、只读光盘(CD-ROM)或者本领域熟知的任何其它形式的存储介质中。一种示例性的存储介质耦合至处理器,从而使处理器能够从该存储介质读取信息,且可向该存储介质写入信息。当然,存储介质也可以是处理器的组成部分。处理器和存储介质可以位于ASIC中。另外,该ASIC可以位于终端设备中。当然,处理器和存储介质也可以作为分立组件存在于编码端或解码端中。
[0241] 在上述实施例中,可以全部或部分地通过软件、硬件、固件或者其任意组合来实现。当使用软件实现时,可以全部或部分地以计算机程序产品的形式实现。所述计算机程序产品包括一个或多个计算机指令。在计算机上加载和执行所述计算机程序指令时,全部或部分地产生按照本申请所述的流程或功能。所述计算机可以是通用计算机、专用计算机、计算机网络、或者其他可编程装置。所述计算机指令可以存储在计算机可读存储介质中,或者通过所述计算机可读存储介质进行传输。所述计算机指令可以从一个网站站点、计算机、服务器或数据中心通过有线(例如同轴电缆、光纤、数字用户线(digital subscriber line,DSL))或无线(例如红外、无线、微波等)方式向另一个网站站点、计算机、服务器或数据中心进行传输。所述计算机可读存储介质可以是计算机能够存取的任何可用介质或者是包含一个或多个可用介质集成的服务器、数据中心等数据存储设备。所述可用介质可以是磁性介质,(例如,软盘、硬盘、磁带)、光介质(例如,数字通用光盘(digital versatile disc,DVD)、或者半导体介质(例如固态硬盘(solid state disk,SSD))等。
[0242] 以上所述的具体实施方式,对本申请的目的、技术方案和有益效果进行了进一步详细说明,所应理解的是,以上所述仅为本申请的具体实施方式而已,并不用于限定本申请的保护范围,凡在本申请的技术方案的基础之上,所做的任何修改、等同替换、改进等,均应包括在本申请的保护范围之内。