视频解码器和方法转让专利

申请号 : CN202110430607.3

文献号 : CN113315974B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 蒂莫菲·米哈伊洛维奇·索洛维耶夫罗曼·伊戈列维奇·切尔尼亚克亚历山大·亚历山德罗维奇·卡拉布托夫陈建乐谢尔盖·尤里耶维奇·伊科宁伊蕾娜·亚历山德罗夫娜·阿尔希娜

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

摘要 :

本发明涉及视频编码和解码,尤其涉及使用基于历史的运动矢量预测(history‑basedmotion vector predictor,HMVP)列表确定当前块的运动信息。构建所述HMVP列表,所述HMVP列表是N个HMVP候选Hk(k=0……N–1)的有序列表,所述N个HMVP候选与帧中所述当前块之前的N个先行块的运动信息关联。每个HMVP候选具有包括以下元素的运动信息:一个或多个运动矢量(motion vector,MV)、与所述MV对应的一个或多个参考图像索引以及一个或多个双向预测权重索引。HMVP列表中的一个或多个HMVP候选添加到当前块的运动信息候选列表中。基于所述运动信息候选列表获取所述当前块的运动信息。还通过将所述HMVP列表的每个基于历史的候选的至少一个元素与所述当前块的对应元素进行比较来更新所述HMVP。当至少一个HMVP元素与所述当前块的对应元素不同时,所述当前块的所述运动信息添加到所述HMVP列表中。

权利要求 :

1.一种用于根据基于历史的运动矢量预测(history‑based motion  vector predictor,HMVP)列表确定帧中当前块的运动信息的方法,其特征在于,包括以下步骤:构建所述HMVP列表,所述HMVP列表是N个基于历史的候选H(k k=0……N–1)的有序列表,所述N个基于历史的候选与所述帧中所述当前块之前的N个先行块的运动信息关联,其中,N大于或等于1,每个基于历史的候选包括运动信息,所述运动信息包括以下元素:(1)一个或多个运动矢量(motion vectors,MV),所述运动矢量精度为1/16分像素点精度;

(2)与所述MV对应的一个或多个参考图像索引;

(3)一个或多个双向预测权重索引;

将所述HMVP列表中的一个或多个基于历史的候选添加到所述当前块的运动信息候选项列表中;

基于所述运动信息候选列表获取所述当前块的运动信息,其中,所述当前块的运动信息包括精度为1/16分像素点精度的运动矢量;还包括:将所述HMVP列表的每个基于历史的候选的至少一个元素与所述当前块的所述运动信息的对应元素进行比较;

如果比较所述HMVP列表的每个HMVP候选的至少一个元素与所述当前块的对应元素不同,则将所述当前块的运动信息添加到所述HMVP列表中。

2.根据权利要求1所述的方法,其特征在于,基于历史的候选还包括与所述一个或多个双向预测权重索引不同的一个或多个索引。

3.根据权利要求1所述的方法,其特征在于,构建所述HMVP列表还包括:将所述HMVP列表的每个基于历史的候选的至少一个元素与先行块的对应元素进行比较;

如果比较所述HMVP列表的每个基于历史的候选的至少一个元素与所述先行块的对应元素不同,则将所述先行块的运动信息添加到所述HMVP列表中。

4.根据权利要求3所述的方法,其特征在于,所述比较包括:比较对应的运动矢量;

比较对应的参考图像索引。

5.根据权利要求3所述的方法,其特征在于,所述比较包括:比较对应的运动矢量;

比较对应的参考图像索引;

比较双向预测权重索引。

6.根据权利要求1至5中任一项所述的方法,其特征在于,所述HMVP列表的所述基于历史的候选按照从码流中获取所述先行块的所述基于历史的候选的顺序进行排序。

7.根据权利要求1至5中任一项所述的方法,其特征在于,所述HMVP列表的长度为N,N为

6或5。

8.根据权利要求1至5中任一项所述的方法,其特征在于,所述运动信息候选列表包括:第一块的运动信息中的第一运动信息,所述第一块与所述当前块具有预设的空间或时间位置关系。

9.根据权利要求1至5中任一项所述的方法,其特征在于,基于所述运动信息候选列表获取所述当前块的运动信息包括:当以融合模式对所述当前块进行译码时,参考码流中的融合索引,或者当以高级运动矢量预测(advanced motion vector prediction,AMVP)模式对所述当前块进行译码时,参考码流中的运动矢量预测值索引,推导所述运动信息。

10.根据权利要求1至5中任一项所述的方法,其特征在于,还包括:使用根据所述运动信息候选列表推导的所述运动信息中包括的双向预测权重索引,获取所述当前块的预测值。

11.一种用于构建和更新基于历史的运动矢量预测(history‑based motion vector predictor,HMVP)列表的方法,其特征在于,包括以下步骤:构建所述HMVP列表,所述HMVP列表用于确定帧中当前块的运动信息,所述HMVP列表是N个基于历史的候选H(k k=0……N–1)的有序列表,所述N个基于历史的候选与所述帧中所述当前块之前的N个先行块的运动信息关联,其中,N大于或等于1,每个基于历史的候选包括运动信息,所述运动信息包括以下元素:(1)一个或多个运动矢量(motion vectors,MV),所述运动矢量精度为1/16分像素点精度;

(2)与所述MV对应的一个或多个参考图像索引;

(3)一个或多个双向预测权重索引;

将所述HMVP列表的每个基于历史的候选的至少一个元素与所述当前块的对应元素进行比较;

如果比较所述HMVP列表的每个基于历史的候选的至少一个元素与所述当前块的对应元素不同,则将所述当前块的运动信息添加到所述HMVP列表中,所述当前块的运动信息包括精度为1/16分像素点精度的运动矢量。

12.根据权利要求11所述的方法,其特征在于,基于历史的候选还包括与所述一个或多个双向预测权重索引不同的一个或多个索引。

13.根据权利要求11所述的方法,其特征在于,所述比较包括:比较对应的运动矢量;

比较对应的参考图像索引。

14.根据权利要求11所述的方法,其特征在于,所述比较包括:比较对应的运动矢量;

比较对应的参考图像索引;

比较双向预测权重索引。

15.根据权利要求11至14中任一项所述的方法,其特征在于,所述HMVP列表的所述基于历史的候选按照从码流中获取所述先行块的所述基于历史的候选的顺序进行排序。

16.根据权利要求11至14中任一项所述的方法,其特征在于,所述HMVP列表的长度为N,N为6或5。

17.一种用于确定当前块的运动信息的装置,其特征在于,包括:存储器和耦合到所述存储器的处理器;

所述处理器用于执行如权利要求1至16中任一项所述的方法。

18.一种用于根据基于历史的运动矢量预测(history‑based motion  vector predictor,HMVP)列表确定帧的当前块的运动信息的装置,其特征在于,包括:HMVP列表构建单元,用于构建所述HMVP列表,所述HMVP列表是N个基于历史的候选H(k k=

0……N–1)的有序列表,所述N个基于历史的候选与所述帧中所述当前块之前的N个先行块的运动信息关联,其中,N大于或等于1,每个基于历史的候选包括运动信息,所述运动信息包括以下元素:(1)一个或多个运动矢量(motion vectors,MV),所述运动矢量精度为1/16分像素点精度;

(2)与所述MV对应的一个或多个参考图像索引;

(3)一个或多个双向预测权重索引;

HMVP添加单元,用于将所述HMVP列表中的一个或多个基于历史的候选添加到所述当前块的运动信息候选项列表中;

运动信息推导单元,用于基于所述运动信息候选列表获取所述当前块的运动信息,所述当前块的运动信息包括精度为1/16分像素点精度的运动矢量;

HMVP添加单元,还用于将所述HMVP列表的每个基于历史的候选的至少一个元素与所述当前块的所述运动信息的对应元素进行比较;如果比较所述HMVP列表的每个HMVP候选的至少一个元素与所述当前块的对应元素不同,则将所述当前块的运动信息添加到所述HMVP列表中。

19.一种用于构建和更新基于历史的运动矢量预测(history‑based motion vector predictor,HMVP)列表的装置,其特征在于,包括:HMVP列表构建单元,用于构建所述HMVP列表,所述HMVP列表用于确定帧中当前块的运动信息,所述HMVP列表是N个基于历史的候选H(k k=0……N–1)的有序列表,所述N个基于历史的候选与所述帧中所述当前块之前的N个先行块的运动信息关联,其中,N大于或等于1,每个基于历史的候选包括运动信息,所述运动信息包括以下元素:(1)一个或多个运动矢量(motion vectors,MV),所述运动矢量精度为1/16分像素点精度;

(2)与所述MV对应的一个或多个参考图像索引;

(3)一个或多个双向预测权重索引;

运动信息比较单元,用于将所述HMVP列表的每个基于历史的候选的至少一个元素与所述当前块的对应元素进行比较;

运动信息添加单元,用于在比较所述HMVP列表的每个基于历史的候选的至少一个元素与所述当前块的对应元素不同时,将所述当前块的运动信息添加到所述HMVP列表中,所述当前块的运动信息包括精度为1/16分像素点精度的运动矢量。

20.一种包括程序代码的计算机可读介质,其特征在于,当所述程序代码被处理器执行时使得所述处理器执行根据权利要求1至16中任一项所述的方法。

说明书 :

视频解码器和方法

技术领域

[0001] 本发明涉及视频译码领域,更具体地涉及通过帧间预测进行运动补偿的领域。

背景技术

[0002] 视频译码(视频编码和解码)广泛用于数字视频应用,例如广播数字电视、基于互联网和移动网络的视频传输、视频聊天、视频会议等实时会话应用、DVD和蓝光光盘、视频内容采集和编辑系统以及安全应用的可携式摄像机。
[0003] 自从1990年H.261标准中基于块的混合视频译码方法发展以来,新的视频译码技术和工具相继出现,为新的视频译码标准奠定了基础。其它视频译码标准包括MPEG‑1视频、MPEG‑2视频、ITU‑T H.262/MPEG‑2、ITU‑T H.263、ITU‑T H.264/MPEG‑4,第10部分、高级视频译码(Advanced Video Coding,AVC)、ITU‑T H.265/高效视频译码(High Efficiency Video Coding,HEVC)、ITU‑T H.266/通用视频译码(Versatile video coding,VVC)以及扩展,例如这些标准的可扩展性和/或三维(three‑dimensional,3D)扩展。随着视频创建和使用变得越来越普遍,视频流量成为通信网络和数据存储的最大负担。因此,与前代标准相比,大多数视频译码标准的目标之一是在保证图像质量的情况下,降低码率。即使最新的高效视频译码(High Efficiency video coding,HEVC)可以在保证图像质量的前提下比AVC大约多压缩视频一倍,仍然亟需新技术相对HEVC进一步压缩视频。

发明内容

[0004] 本发明提供了用于对视频进行编码和解码的装置和方法。特别地,本发明涉及一种帧间预测装置的广义双向预测方法。更具体地,描述了以下方面:
[0005] 1.基于历史的运动信息列表构建修改:当前块的运动信息除了包括运动矢量和相应的参考图像索引外,还包括当前块的广义双向预测权重索引(bi‑prediction weightindex,bcwIdx索引)。
[0006] 2.融合模式的bcwIdx索引推导流程修改:对于具有与基于历史的候选相对应的融合索引的块,该候选的bcwIdx索引用于所述当前块。
[0007] 修改后的bcwIdx索引推导方法通过为CU使用更合适的bcwIdx索引,该索引采用融合方式进行译码,且具有与基于历史的融合候选相对应的融合索引,从而提高译码效率。
[0008] 上述和其它目的通过独立权利要求请求保护的主题实现。其它实现方式在从属权利要求、具体实施例和附图中显而易见。
[0009] 本发明的实施例由独立权利要求的特征定义,并且实施例的其它有利实现方式由从属权利要求的特征定义。
[0010] 根据本发明的一个方面,提供了一种用于根据基于历史的运动矢量预测(history‑based motion vector predictor,HMVP)列表确定帧中当前块的运动信息的方法,包括以下步骤:构建所述HMVP列表,所述HMVP列表是N个基于历史的候选Hk(k=0……N–1)的有序列表,所述N个基于历史的候选与所述帧中所述当前块之前的N个先行块的运动信息关联,其中,N大于或等于1,每个基于历史的候选包括运动信息,所述运动信息包括以下元素:(1)一个或多个运动矢量(motion vectors,MV);(2)与所述MV对应的一个或多个参考图像索引;(3)一个或多个双向预测权重索引;将所述HMVP列表中的一个或多个基于历史的候选添加到所述当前块的运动信息候选项列表中;基于所述运动信息候选列表获取所述当前块的运动信息。
[0011] 术语双向预测权重索引bcw_idx也称为广义双向预测权重索引(generalized bi‑prediction weight index,GBIdx)和/或CU级权重双向预测(Bi‑prediction with CU‑level Weight,BCW)索引。或者,所述索引可以称为双向预测权重索引(bi‑prediction weight index,BWI)。
[0012] 所述运动信息候选列表可以是融合候选列表或运动矢量预测列表。
[0013] 所述HMVP列表也可以称为基于历史的运动矢量列表(history‑based motion vector list,HMVL)。
[0014] 在一个示例性实施例中,如果有多于一个运动矢量(motion vector,MV),特别是当MV的数量为两个时,HMVP候选的运动信息可以包括一个双向预测权重索引作为元素。一个bcw索引就足够了,因为用于构建预测候选的两个bcw权重索引w0和w1的总和为1。换句话说,bcw索引权重对是归一化的。即,两个权重仅由其相应的bcw权重的一个bcw索引定义,(例如w0或w1)。
[0015] 具有以下优点:运动信息的一部分仅包括必需的元素,而删除冗余元素(由于知道bcw权重被归一化)。因此,所述运动信息只需要较小存储空间。
[0016] 替代性实现方式可以包括针对每个MV使用一个bcw索引,但是设置一个bcw索引对应零bcw权重。
[0017] 根据本发明的一个方面,基于历史的候选还包括与所述一个或多个双向预测权重索引不同的一个或多个索引。
[0018] 所述一个或多个索引可以用于指示在运动补偿期间使用替代插值滤波器对块进行插值。在一个示例性实施例中,其它索引之一可以是可切换插值滤波器索引。
[0019] 这样可以有助于通过使用其它索引更灵活地推导运动信息。
[0020] 根据本发明的一个方面,构建所述HMVP列表还包括:将所述HMVP列表的每个基于历史的候选的至少一个元素与先行块的对应元素进行比较;如果比较所述HMVP列表的每个基于历史的候选的至少一个元素与所述先行块的对应元素不同,则将所述先行块的运动信息添加到所述HMVP列表中。
[0021] 根据本发明的一个方面,所述方法还包括:将所述HMVP列表的每个基于历史的候选的至少一个元素与当前块的运动信息的对应元素进行比较;如果比较所述HMVP列表的每个基于历史的候选的至少一个元素与所述当前块的对应元素不同,则将所述当前块的运动信息添加到所述HMVP列表中。
[0022] 将所述HMVP列表中的HMVP候选与先行块和/或当前块进行比较是指所述比较是在逐个元素的基础上执行的。在简单的元素比较方面,无论相似元素是相同还是不同,所述比较的结果(也称为C结果)具有其通常的意义。换句话说,至少一个或多个元素的C结果可以指示HMVP候选与先行块和/或当前块的至少一个元素可以不同。如果是这样的话(即,所述C结果=不同),将所述先行块和/或当前块各自的运动信息添加到所述HMVP列表中。
[0023] 这样有利于从HMVP列表中删除冗余运动信息。由于HMVP列表用于将HMVP列表中的运动信息添加到运动信息候选列表中,因此所述冗余避免直接转换为运动信息候选列表。因此,由于没有使用重复的运动信息,可以更准确地推导所述运动矢量。
[0024] 此外,由于HMVP列表的大小/长度有限,因此从所述HMVP列表中删除冗余的运动信息(记录)允许添加更多实际不同的记录。换句话说,即增加了所述HMVP列表中记录的种类。
[0025] 根据本发明的一个方面,所述比较包括:比较对应的运动矢量,以及比较对应的参考图像索引。
[0026] 根据本发明的一个方面,所述比较包括:比较对应的运动矢量、比较对应的参考图像索引以及比较双向预测权重索引。
[0027] 可以以分量为单位比较运动矢量。即,具有两个分量MVx和MVy(也分别称为水平分量和垂直分量)的运动矢量MV相对于每个分量MVx和MVy进行比较。具体地,所述比较是根据MV分量是否不同进行简单比较。
[0028] 或者,对应运动矢量的比较可以根据适合于所述比较的任何其它度量。例如,这样的度量可以是p≥1的p范数。MV比较可以包括比较所述MV的大小。
[0029] 参考索引的比较还可以根据检查参考图像索引是否不同进行简单比较。
[0030] 在示例性实施例中,可以通过比较所述HMVP候选的至少一个元素是否等于和/或小于先行块和/或当前块的对应元素来对简单比较进行扩展。或者和/或另外,作为比较准则,可以使用“相等和/或更大”。所述更小/更大的准则可以不同地应用于运动信息的每个元素。
[0031] 如前所述,比较是逐个元素执行的。特别地,比较可以包括运动信息的所有元素。或者,在比较中可以使用这些元素中的一些。换句话说,所述运动信息包括(1)一个或多个MV,(2)一个或多个参考图像索引,(3)双向预测权重索引,所述运动信息的元素子集可用于比较。此外,所述运动信息可包括(4)与bcw索引不同的一个或多个索引。
[0032] 例如,所述运动信息的元素子集可以包括上述MV和参考图像索引。然后,不管其它元素(不是子集的一部分)是否相同,仅在检查所述MV和所述参考图像索引的差异时执行比较。在给定的子集示例中,所述比较中不包括的元素是bcw索引和与bcw索引不同的一个或多个其它索引。
[0033] 在第二示例中,所述子集可包括所述运动信息的以下元素:所述MV、所述参考图像索引和所述双向预测索引。该子集中不包括与bcw索引不同的一个或多个其它索引。在这种情况下,在检查这三种元素的差异时执行所述比较。
[0034] 因此,虽然运动信息可以包含多个元素,但可以根据所述运动信息的元素子集逐个元素执行所述比较。
[0035] 这样有助于灵活地执行比较并因此修剪(pruning)要添加到所述HMVP列表中的运动信息,因为所述比较的限制级别可以根据所述运动信息使用的元素的数量和/或类型来调整。
[0036] 根据本发明的一个方面,所述HMVP列表的所述基于历史的候选按照从码流中获取所述先行块的所述基于历史的候选的顺序进行排序。
[0037] 根据本发明的一个方面,所述HMVP列表的长度为N,N为6或5。
[0038] 根据本发明的一个方面,所述运动信息候选列表包括:第一块的运动信息中的第一运动信息,所述第一块与所述当前块具有预设的空间或时间位置关系。
[0039] 根据本发明的一个方面,基于所述运动信息候选列表获取所述当前块的运动信息包括:当以融合模式对所述当前块进行译码时,参考码流中的融合索引,或者当以高级运动矢量预测(advanced motion vector prediction,AMVP)模式对所述当前块进行译码时,参考码流中的运动矢量预测值索引,推导所述运动信息。
[0040] 所述运动信息候选列表可以是融合候选列表或运动矢量预测列表。
[0041] 图10为确定运动信息的方法的流程图。在步骤1001中,构建HMVP列表。在步骤1002中,将HMVP列表中的一个或多个基于历史的候选添加到运动信息候选列表中。在步骤1003中,基于所述运动信息候选列表获取所述当前块的运动信息。
[0042] 根据本发明的一个方面,还包括:使用根据所述运动信息候选列表推导的所述运动信息中包括的双向预测权重索引,获取所述当前块的预测值。
[0043] 在一个示例性实现方式中,根据所述运动信息候选列表直接从所述运动信息候选列表中推导所述运动信息。或者,参考所述运动信息候选列表间接执行所述推导步骤。
[0044] 根据本发明的一个方面,提供了一种用于构建和更新基于历史的运动矢量预测(history‑based motion vector predictor,HMVP)列表的方法,包括以下步骤:构建所述HMVP列表,所述HMVP列表是N个基于历史的候选Hk(k=0……N–1)的有序列表,所述N个基于历史的候选与所述帧中所述当前块之前的N个先行块的运动信息关联,其中,N大于或等于1,每个基于历史的候选包括运动信息,所述运动信息包括以下元素:(1)一个或多个运动矢量(motion vectors,MV);(2)与所述MV对应的一个或多个参考图像索引;(3)一个或多个双向预测权重索引;将所述HMVP列表的每个基于历史的候选的至少一个元素与所述当前块的对应元素进行比较;如果比较所述HMVP列表的每个基于历史的候选的至少一个元素与所述当前块的对应元素不同,则将所述当前块的运动信息添加到所述HMVP列表中。
[0045] 所述HMVP列表更新有利于将所述当前块的最新且无冗余的运动信息保持在所述HMVP列表中。通过使用与所述当前块保持空间相关性的基于历史的运动信息来改进运动信息推导。换句话说,HMVP列表的持续更新确保在运动信息推导期间具有并且使用了空间相关性。
[0046] 根据本发明的一个方面,基于历史的候选还包括与所述一个或多个双向预测权重索引不同的一个或多个索引。
[0047] 根据本发明的一个方面,所述比较包括:比较对应的运动矢量,以及比较对应的参考图像索引。
[0048] 根据本发明的一个方面,所述比较包括:比较对应的运动矢量、比较对应的参考图像索引以及比较双向预测权重索引。
[0049] 根据本发明的一个方面,所述HMVP列表的所述基于历史的候选按照从码流中获取所述先行块的所述基于历史的候选的顺序进行排序。
[0050] 根据本发明的一个方面,所述HMVP列表的长度为N,N为6或5。
[0051] 图11为用于构建和更新基于历史的运动矢量预测的方法的流程图。在步骤1101中,构建HMVP列表。在步骤1102中,将所述HMVP列表的每个基于历史的候选的至少一个元素与所述当前块的对应元素进行比较。
[0052] 以元素为基础的比较结果在图11中称为C结果。C结果可以是所有元素相同/相等,或者至少一个或多个元素不相同/不相等/不同。
[0053] 如果所述C结果为至少一个或多个元素不同,则将所述当前块的所述运动信息添加到所述HMVP列表中(步骤1103)。否则,如果所有元素都相同,则相应的运动信息不添加到所述HMVP列表中(步骤1104)。
[0054] 术语“所有”是指逐个元素进行比较中实际使用的那些元素。即,所述运动信息包括(1)一个或多个MV,(2)一个或多个参考图像索引,(3)双向预测权重索引,所述运动信息的元素子集可用于比较。此外,所述运动信息可包括(4)与bcw索引不同的一个或多个索引。
[0055] 例如,所述运动信息的可能元素子集可以包括所述MV和参考图像索引。然后,不管其它元素(不是子集的一部分)是否相同,仅在检查所述MV和所述参考图像索引的差异时执行上述比较。在给定的示例中,所述比较中不包括的元素是bcw索引和与bcw索引不同的一个或多个其它索引。
[0056] 因此,虽然运动信息可以包含多个元素,但可以根据所述运动信息的元素子集逐个元素执行所述比较。
[0057] 这样可以有助于灵活地执行比较并因此修剪要添加到所述HMVP列表中的运动信息,因为所述比较的限制级别可以由所述运动信息使用的元素的数量和/或类型来调整。
[0058] 根据本发明的一个方面,提供了一种用于确定当前块的运动信息的装置,包括:存储器和耦合到所述存储器的处理器;所述处理器用于执行根据本发明前述方面中任一方面所述的方法。
[0059] 图12为运动信息确定单元1200的示意图,所述运动信息确定单元1200分别包括存储器1201和处理器1202。
[0060] 根据本发明的一个方面,提供了一种用于根据基于历史的运动矢量预测(history‑based motion vector predictor,HMVP)列表确定帧的当前块的运动信息的装置,包括:HMVP列表构建单元,用于构建所述HMVP列表,所述HMVP列表是N个基于历史的候选Hk(k=0……N–1)的有序列表,所述N个基于历史的候选与所述帧中所述当前块之前的N个先行块的运动信息关联,其中,N大于或等于1,每个基于历史的候选包括运动信息,所述运动信息包括以下元素:(1)一个或多个运动矢量(motion vectors,MV);(2)与所述MV对应的一个或多个参考图像索引;(3)一个或多个双向预测权重索引;HMVP添加单元,用于将所述HMVP列表中的一个或多个基于历史的候选添加到所述当前块的运动信息候选项列表中;运动信息推导单元,用于基于所述运动信息候选列表获取所述当前块的运动信息。
[0061] 图13为运动信息确定单元1200的示意图,所述运动信息确定单元1200还包括HMVP列表构建单元1301、HMVP添加单元1302和运动信息推导单元1303。
[0062] 根据本发明的一个方面,提供了一种用于构建和更新基于历史的运动矢量预测(history‑based motion vector predictor,HMVP)列表的装置,包括:HMVP列表构建单元,用于构建所述HMVP列表,所述HMVP列表是N个基于历史的候选Hk(k=0……N–1)的有序列表,所述N个基于历史的候选与所述帧中所述当前块之前的N个先行块的运动信息关联,其中,N大于或等于1,每个基于历史的候选包括运动信息,所述运动信息包括以下元素:(1)一个或多个运动矢量(motion vectors,MV);(2)与所述MV对应的一个或多个参考图像索引;(3)一个或多个双向预测权重索引;运动信息比较单元,用于将所述HMVP列表的每个基于历史的候选的至少一个元素与所述当前块的对应元素进行比较;运动信息添加单元,用于在比较所述HMVP列表的每个基于历史的候选的至少一个元素与所述当前块的对应元素不同时,将所述当前块的运动信息添加到所述HMVP列表中。
[0063] 图14为HMVP列表更新单元1400的示意图,所述HMVP列表更新单元1400包括HMVP列表构建单元1301、运动信息比较单元1401和运动信息添加单元1402。
[0064] 根据本发明的一个方面,提供了一种计算机程序产品,包括用于执行本发明任一上述方面所述的方法的程序代码。
[0065] 一个或多个实施例的细节在附图和以下描述中阐述。其它特征、目标和优点将从描述、附图和权利要求中显而易见。
[0066] 这种实现方式有利于优化边界移位矢量的选择,从而优化编码方法的译码效率。
[0067] 本发明可以在硬件和/或软件中实现。
[0068] 为了描述的清晰性,上述任一实施例可以与上述其它任一或多个实施例结合以创建本发明范围内的新实施例。
[0069] 这些和其它特征将结合附图和权利要求书从以下详细描述中更清楚地理解。

附图说明

[0070] 下文将参考以下附图详细描述本发明实施例,其中:
[0071] 图1A为用于实现本发明实施例的视频译码系统的示例的框图;
[0072] 图1B为用于实现本发明实施例的视频译码系统的另一示例的框图;
[0073] 图2为用于实现本发明实施例的视频编码器的示例的框图;
[0074] 图3为用于实现本发明实施例的视频解码器的示例结构的框图;
[0075] 图4为编码装置或解码装置的示例的框图;
[0076] 图5为编码装置或解码装置的另一示例的框图;
[0077] 图6示出了块(例如CU)的示例以及一些相邻块的位置;
[0078] 图7至图9示出了实施例的示例;
[0079] 图10为运动信息确定方法的流程图;
[0080] 图11为HMVP列表更新方法的流程图;
[0081] 图12为运动信息确定单元(包括存储器和处理器)的框图;
[0082] 图13为运动信息确定单元(包括HMVP列表构建单元、HMVP添加单元和运动信息推导单元)的框图;
[0083] 图14为HMVP列表更新单元(包括HMVP列表构建单元、运动信息比较单元和运动信息添加单元)的框图。
[0084] 在以下相同附图标记中,如果没有关于这些相同参考符号的差异的特别说明,则相同的附图标记指相同的或至少在功能上等同的特征。

具体实施方式

[0085] 在以下描述中,参考构成本发明一部分的附图,附图通过说明的方式示出了本发明实施例的特定方面或可使用本发明实施例的特定方面。应理解,本发明的实施例可用于其它方面,并且包括未在附图中描绘的结构或逻辑变化。因此,以下详细的描述并不当作限定,本发明的范围由所附权利要求书界定。
[0086] 可以理解的是,与所描述的方法有关的内容对于与用于执行方法对应的设备或系统也同样适用,反之亦然。例如,如果描述了一个或多个特定方法步骤,则对应的设备可以包括一个或多个单元,例如,功能单元,用于执行所描述的一个或多个方法步骤(例如,执行所述一个或多个步骤的一个单元,或各自执行所述多个步骤中的一个或多个步骤的多个单元),即使图中未明确描述或说明此类一个或多个单元。另一方面,例如,如果根据一个或多个单元(例如,功能单元)来描述特定装置,对应的方法可以包括一个步骤来执行一个或多个单元的功能(例如,执行所述一个或多个单元的功能的一个步骤,或各自执行所述多个单元中的一个或多个单元的功能的多个步骤),即使图中未明确描述或说明此类一个或多个步骤。此外,应理解,除非另外具体指出,否则本文中描述的各种示例性实施例和/或方面的特征可彼此组合。
[0087] 视频译码通常指对构成视频或视频序列的图像序列进行的处理。在视频译码领域中,术语“帧(frame)”或“图像(picture/image)”可以用作同义词。本申请(或本发明)中使用的视频译码表示视频编码或视频解码。在源侧执行视频编码,通常包括处理(例如,通过压缩)原始视频图像,以减少表示视频图像所需的数据量(以进行更高效的存储和/或传输)。在目的地侧执行视频解码,通常包括相对于编码器的逆处理以重建视频图像。关于视频图像(或一般为图像,将在下文解释)的“译码”的实施例应理解为涉及视频序列的“编码”和“解码”两者。编码部分和解码部分的组合也称为CODEC(编码和解码)。
[0088] 在无损视频译码的情况下,可以重建原始视频图像,即,重建视频图像与原始视频图像的质量相同(假设在存储或传输过程中没有传输损失或其它数据丢失)。在有损视频编码的情况下,进一步执行压缩(例如,通过量化)以减少表示无法在解码器侧完全重建的视频图像的数据量,即,与原始视频图像相比,所述重建视频图像的质量较低或较差。
[0089] 从H.261开始的几种视频译码标准都属于“有损混合视频编解码器”(即,结合像素点域中的空间预测和时间预测以及在变换域中应用量化的2D变换译码)。视频序列的每个图像通常被分割成一组不重叠的块,并且译码通常以块为单位执行。换句话说,在编码器中,通常以块(视频块)为单位对视频进行处理(即编码),例如,通过空间(帧内)预测和时间(帧间)预测来生成预测块;从当前块(当前处理/待处理的块)中减去预测块,获得残差块;在变换域中变换残差块并量化残差块,以减少待传输(压缩)的数据量,而在解码器中,将相对于编码器的逆处理部分应用于经编码或压缩的块,以重建当前块以进行表示。此外,编码器的处理环路与解码器的处理环路相同,使得两者将生成相同的预测(例如,帧内预测和帧间预测)和/或重建以对后续块进行处理(即,编码)。
[0090] 如本文所使用的,术语“块”可以是图像或帧的一部分。为便于描述,本文参考由ITU‑T视频译码专家组(Video Coding Experts Group,VCEG)和ISO/IEC运动图像专家组(Motion Picture Experts Group,MPEG)的视频译码联合工作组(Joint Collaboration Team on Video Coding,JCT‑VC)开发的高效视频译码(High‑Efficiency Video Coding,HEVC)或通用视频译码(Versatile video coding,VVC)参考软件描述本发明实施例。本领域普通技术人员应理解本发明实施例不限于HEVC或VVC。块可以指CU、PU和TU。在HEVC中,通过表示为译码树的四叉树结构将CTU划分成CU。以CU为单位确定是使用帧间(时间)预测还是帧内(空间)预测对图像区域进行译码。可以根据PU划分类型将每个CU进一步划分为一个、两个或四个PU。一个PU内应用相同的预测过程,并以PU为单位向解码器发送相关信息。在根据PU划分类型应用预测过程获取残差块之后,可以根据与用于CU的译码树类似的另一种四叉树结构将CU分割为变换单元(transform unit,TU)。在视频压缩技术的最新进展中,使用四叉树和二叉树(qual‑tree and binary tree,QTBT)分割帧对译码块进行分割。在QTBT块结构中,CU可以为正方形或矩形。例如,首先通过四叉树结构对译码树单元(coding tree unit,CTU)进行分割。通过二叉树结构进一步分割四叉树叶节点。二叉树叶节点称为译码单元(coding unit,CU),片段用于在不进行进一步分割的情况下,进行预测和变换处理。即,在QTBT译码块结构中,CU、PU和TU的块大小相同。同时,还提出将三叉树分割等多重分割与QTBT块结构结合使用。
[0091] 在以下实施例中,根据图1至图3描述了编码器20、解码器30和译码系统10。
[0092] 图1A示意性地示出了可利用本申请(本发明)技术的示例性译码系统10,例如视频译码系统10。视频译码系统10的编码器20(例如,视频编码器20)和解码器30(例如,视频解码器30)代表可以用于根据本申请中描述的各种示例执行各技术的设备的示例。如图1A所示,译码系统10包括源设备12,所述源设备12用于将经编码数据13(例如,经编码图像13)提供到目的设备14等以对经编码数据13进行解码。
[0093] 源设备12包括编码器20,并且可以另外(即可选地)包括图像源16、预处理单元18(例如,图像预处理单元18)和通信接口或通信单元22。
[0094] 图像源16可以包括或可以是任何类型的图像捕获设备,例如用于捕获真实世界图像的设备,和/或任何类型的图像或评论(对于屏幕内容译码,屏幕上的一些文本也被认为是待编码的图像(picture/image)的一部分)生成设备,例如用于生成计算机动画图像的计算机图形处理器,或用于获取和/或提供真实世界图像、计算机动画图像(例如,屏幕内容、虚拟现实(virtual reality,VR)图像)和/或其任何组合(例如,增强现实(augmented reality,AR)图像)的任何类型的设备。
[0095] (数字)图像是或可为具有强度值的像素点的二维阵列或矩阵。阵列中的像素点也可以称为像素(图像元素的简短形式)。阵列或图像的水平和垂直方向(或轴)的像素点数定义了图像的大小和/或分辨率。为了表示颜色,通常使用三种颜色分量,即,该图像可以表示为或包括三个像素点阵列。在RBG格式或颜色空间中,图像包括对应的红色、绿色和蓝色像素点阵列。然而,在视频编码中,每个像素通常以亮度/色度格式或在颜色空间中表示,例如,YCbCr,包括由Y表示的亮度分量(有时也用L表示)和Cb、Cr表示的两个色度分量。亮度分量Y表示亮度或灰阶强度(例如,如同灰阶图像中),两个色度分量Cb和Cr表示色度或颜色信息分量。相应地,YCbCr格式的图像包括亮度像素点值(Y)的亮度像素点阵列和色度值(Cb和Cr)的两个色度像素点阵列。RGB格式的图像可以转换成YCbCr格式,反之亦然,该过程也称为颜色变换或转换。如果图像是单色的,则图像可以仅包括亮度像素点阵列。
[0096] 图像源16(例如,视频源16)可以是用于捕获图像的摄像机、包括或存储之前捕获或生成的图像的存储器(例如,图像存储器),和/或用于获取或接收图像的任何类型的(内部或外部)接口等。例如,摄像头可以是集成在源设备中的本地或集成摄像头,存储器可以是本地或集成存储器,例如,集成在源设备中。例如,接口可以是从外部视频源接收图像的外部接口,例如,摄像机等外部图像捕获设备、外部存储器或外部图像生成设备,例如,外部计算机图形处理器、计算机或服务器。接口可以是根据任何私有或标准化的接口协议的任何类型的接口,例如,有线或无线接口、光接口。获取图像数据17的接口可以是与通信接口22相同的接口或通信接口22的一部分。
[0097] 与预处理单元18以及预处理单元18执行的处理不同,图像或图像数据17(例如,视频数据16)也可以称为原始图像或原始图像数据17。
[0098] 预处理单元18用于接收(原始)图像数据17,对图像数据17进行预处理,以获取经预处理的图像19或经预处理的图像数据19。预处理单元18执行的预处理可以包括修剪(trimming)、颜色格式转换(例如,从RGB转换为YCbCr)、颜色校正或去噪等。可以理解的是,预处理单元18可以是可选组件。
[0099] 编码器20(例如,视频编码器20)用于接收经预处理的图像数据19并提供经编码的图像数据21(下文将根据图2或图4进行详细描述)。
[0100] 源设备12的通信接口22可用于接收经编码图像数据21并直接将其发送到另一设备(例如,目的地设备14)或用于存储或直接重建的任何其它设备,或分别在存储经编码数据13和/或将经编码数据13发送到另一设备(例如,目的地设备14)或用于解码或存储的任何其它设备之前处理经编码图像数据21。
[0101] 目的地设备14包括解码器30(例如,视频解码器30),并且可以另外(即,可选地)包括通信接口或通信单元28、后处理单元32和显示设备34。
[0102] 目的地设备14的通信接口28用于接收经编码图像数据21或经编码数据13,例如,直接从源设备12或从任何其它源,例如,经编码图像数据存储设备等存储器。
[0103] 通信接口22和通信接口28可以用于通过源设备12与目的地设备14之间的直接通信链路(例如,直接有线或无线连接),或通过任何类型的网络(例如,有线或无线网络或其任何组合,或任何类型的专用和公共网络),或其任何组合发送或接收经编码图像数据21或经编码数据13。
[0104] 例如,通信接口22可用于将经编码图像数据21打包为合适的格式(例如,数据包),用于在通信链路或通信网络上传输。
[0105] 形成通信接口22的对应的通信接口28可以用于解封装编码数据13以获得经编码图像数据21等。
[0106] 通信接口22和通信接口28均可配置为单向通信接口(如图1A中从源设备12指向目的地设备14的经编码图像数据13的箭头所指示),或双向通信接口,并可用于发送和接收消息等,例如,建立连接,确认和交换与通信链路和/或数据传输(例如,经编码图像数据传输)相关的任何其它信息。
[0107] 解码器30用于接收经编码图像数据21并提供经解码图像数据31或经解码图像31(下文将根据图3或图5进行详细描述)。
[0108] 目的地设备14的后处理器32用于对经解码图像数据31(也称为重建图像数据)(例如,解码图像31)进行后处理,以获取经后处理的图像数据33(例如,后处理图像33)。例如,后处理单元32执行的后处理可以包括颜色格式转换(例如从YCbCr转换为RGB)、调色、修剪或重采样,或者用于产生供显示设备34等显示的经解码图像数据31等任何其它处理。
[0109] 目的地设备14中的显示设备34用于接收经后处理的图像数据33,以向用户或观看者等显示图像。显示设备34可以为或包括用于表示重建图像的任何类型的显示器,例如,集成或外部显示器或监视器。例如,显示器可以包括液晶显示器(liquid crystal display,LCD)、有机发光二极管(organic light emitting diode,OLED)显示器、等离子显示器、投影仪、微型LED显示器、硅基液晶显示器(liquid crystal on silicon,LCoS)、数字光处理器(digital light processor,DLP)或任何类型的其它显示器。
[0110] 尽管图1A将源设备12和目的地设备14描绘为单独的设备,但是设备实施例也可以包括源设备12和目的地设备14或同时包括源设备12的对应功能和目的地设备14的对应功能。在这些实施例中,源设备12或对应功能以及目的地设备14或对应功能可以使用相同的硬件和/或软件或通过单独的硬件和/或软件或其任意组合来实现。
[0111] 根据描述,图1A所示的源设备12和/或目的地设备14中具有和(准确)划分的不同单元或功能可能根据实际设备和应用而有所不同,这对技术人员来说是显而易见的。
[0112] 编码器20(例如,视频编码器20)和解码器30(例如,视频解码器30)可以各自实现为各种合适的电路中的任一种,如一个或多个微处理器、数字信号处理器(digital signal processor,DSP)、专用集成电路(application‑specific integrated circuit,ASIC)、现场可编程门阵列(field‑programmable gate array,FPGA)、离散逻辑、硬件或其任何组合。当所述技术部分地以软件形式实现时,设备可将软件的指令存储在合适的非瞬时性计算机可读存储介质中,并且可以使用一个或多个处理器以硬件形式执行所述指令,以执行本发明的技术。上述任一种(包括硬件、软件、硬件和软件的组合等)可以是一个或多个处理器。
视频编码器20和视频解码器30各自可包括在一个或多个编码器或解码器中,其中任一者可作为组合式编码器/解码器(编解码器)的一部分集成在相应设备中。
[0113] 源设备12可以称为视频编码设备或视频编码装置。目的地设备14可以称为视频解码设备或视频解码装置。源设备12和目的地设备14可以是视频译码设备或视频译码装置的示例。
[0114] 源设备12和目的地设备14可以包括多种设备中的任一种,包括任何类型的手持或固定设备,例如,笔记本电脑或膝上型电脑、手机、智能手机、平板电脑(tablet/tablet computer)、摄像机、台式计算机、机顶盒、电视机、显示设备、数字媒体播放器、视频游戏机、视频流设备(如内容服务服务器或内容分发服务器)、广播接收器设备、广播发射器设备等,并且可以不使用或使用任何类型的操作系统。
[0115] 在一些情况下,源设备12和目的地设备14可配备用于无线通信的组件。因此,源设备12和目的地设备14可以是无线通信设备。
[0116] 在某些情况下图1A所示的视频编码系统10仅仅是示例,本申请的技术可适用于在编码设备与解码设备之间不一定包括任何数据通信的视频译码设置(例如,视频编码或视频解码)。在其它示例中,数据从本地存储器中检索,通过网络发送,等等。视频编码设备可以对数据进行编码并将数据存储到存储器中,和/或视频解码设备可以从存储器中检索数据并对数据进行解码。在一些示例中,编码和解码由相互不通信而只是将数据编码到存储器和/或从存储器中检索数据并对数据进行解码的设备来执行。
[0117] 应理解,对于结合视频编码器20描述的上述每个示例,视频解码器30可用于执行逆过程。视频解码器30可用于接收和解析指示语法元素,并相应地对相关视频数据进行解码。在一些示例中,视频编码器20可以将一个或多个语法元素熵编码到经编码视频码流中。在这些示例中,视频解码器30可以解析这些语法元素并相应地对相关视频数据进行解码。
[0118] 图1B为示例性实施例提供的包括图2的编码器20和/或图3的解码器30的另一示例性视频译码系统40的说明图。系统40可以根据本申请中描述的各种示例实现本申请中提供的技术。在所示实现方式中,视频译码系统40可以包括一个或多个成像设备41、视频编码器100、视频解码器30(和/或通过一个或多个处理单元46的逻辑电路47实现的视频译码器)、天线42、一个或多个处理器43、一个或多个存储器44和/或显示设备45。
[0119] 如图所示,一个或多个成像设备41、天线42、一个或多个处理单元46、逻辑电路47、视频编码器20、视频解码器30、一个或多个处理器43、一个或多个存储器44和/或显示设备45能够彼此通信。如所论述,尽管示出同时具有视频编码器20和视频解码器30,但是在各种示例中,视频译码系统40可以仅包括视频编码器20或仅包括视频解码器30。
[0120] 如图所示,在一些示例中,视频译码系统40可以包括天线42。例如,天线42可用于发送或接收经编码视频数据码流。此外,在一些示例中,视频译码系统40可以包括显示设备45。显示设备45可用于呈现视频数据。如图所示,在一些示例中,可以通过一个或多个处理单元46实现逻辑电路47。一个或多个处理单元46可以包括专用集成电路(application‑specific integrated circuit,ASIC)逻辑、一个或多个图形处理器、一个或多个通用处理器等。视频译码系统40还可以包括一个或多个可选的处理器43,所述一个或多个可选的处理器43可以类似地包括专用集成电路(ASIC)逻辑、一个或多个图形处理器、一个或多个通用处理器等。在一些示例中,逻辑电路47可以通过硬件、视频译码专用硬件等实现,一个或多个处理器43可以实现通用软件、操作系统等。此外,一个或多个存储器44可以是任何类型的存储器,如易失性存储器(例如,静态随机存取存储器(Static Random Access Memory,SRAM)、动态随机存取存储器(Dynamic Random Access Memory,DRAM)等)或非易失性存储器(例如,闪存等)等等。在非限制性示例中,一个或多个存储器44可以由高速缓冲存储器实现。在一些示例中,逻辑电路47可以访问一个或多个存储器44(例如,用于实现图像缓冲器)。在其它示例中,逻辑电路47和/或一个或多个处理单元46可以包括用于实现图像缓冲器等的存储器(例如,高速缓存等)。
[0121] 在一些示例中,通过逻辑电路实现的视频编码器100可以包括图像缓冲器(例如,通过一个或多个处理单元46或一个或多个存储器44实现)和图形处理单元(graphics processing unit,GPU)(例如,通过一个或多个处理单元46实现)。图形处理单元可以以通信方式耦合到图像缓冲器。图形处理单元可以包括通过逻辑电路47实现的视频编码器100,以体现结合图2所论述的各种模块和/或本文描述的任何其它编码器系统或子系统。逻辑电路可用于执行本文论述的各种操作。
[0122] 视频解码器30可以以与通过逻辑电路47实现的类似方式实现,以体现结合图3的解码器30讨论的各种模块和/或本文描述的任何其它解码器系统或子系统。在一些示例中,通过逻辑电路实现的视频解码器30可以包括图像缓冲器(例如,通过一个或多个处理单元420或一个或多个存储器44实现)和图形处理单元(graphics processing unit,GPU)(例如,通过一个或多个处理单元46实现)。图形处理单元可以以通信方式耦合到图像缓冲器。
图形处理单元可以包括通过逻辑电路47实现的视频解码器30,以体现结合图3所论述的各种模块和/或本文描述的任何其它解码器系统或子系统。
[0123] 在一些示例中,视频译码系统40的天线42可用于接收经编码视频数据码流。如所论述,经编码码流可以包括与本文所论述的视频帧的编码关联的数据、指示符、索引值、模式选择数据等,例如与译码分割关联的数据(例如,变换系数或经量化的变换系数、可选指示符(如所论述的)和/或定义译码分割的数据)。视频译码系统40还可以包括耦合到天线42并用于对经编码码流进行解码的视频解码器30。显示设备45用于呈现视频帧。
[0124] 编码器和编码方法
[0125] 图2示意性地示出了用于实现本申请技术的视频编码器20的示例。在图2的示例中,视频编码器20包括残差计算单元204、变换处理单元206、量化单元208、反量化单元210和逆变换处理单元212、重建单元214、缓冲器216、环路滤波器单元220、解码图像缓冲器(decoded picture buffer,DPB)230、预测处理单元260和熵编码单元270。预测处理单元260可以包括帧间预测单元244、帧内预测单元254和模式选择单元262。帧间预测单元244可以包括运动估计单元和运动补偿单元(未示出)。图2所示的视频编码器20也可以称为混合视频编码器或基于混合视频编解码器的视频编码器。
[0126] 残差计算单元204、变换处理单元206、量化单元208、预测处理单元260和熵编码单元270等形成编码器20的正向信号路径,而反量化单元210、逆变换处理单元212、重建单元214、缓冲器216、环路滤波器220、解码图像缓冲器(decoded picture buffer,DPB)230、预测处理单元260等形成编码器的反向信号路径。编码器的反向信号路径与解码器(参见图3中的解码器30)的信号路径对应。
[0127] 例如,编码器20用于通过输入202接收图像201或图像201的图像块203,例如,形成视频或视频序列的图像序列的图像。图像块203也可以称为当前图像块或待译码图像块,图像201也可以称为当前图像或待译码图像(特别是在视频译码中,以便将当前图像与其它图像(例如,同一视频序列(即,也包括当前图像的视频序列)的之前编码和/或解码的图像)区分开)。
[0128] 分割
[0129] 编码器20的实施例可以包括分割单元(图2中未描绘),用于将图像201分割成多个块(例如,块203等块),通常分割成多个不重叠块。分割单元可用于对视频序列的所有图像使用相同的块大小和定义块大小的对应网格,或者改变图像或图像的子集或组之间的块大小,并将每个图像分割成对应块。
[0130] 在一个示例中,视频编码器20的预测处理单元260可以用于执行上文描述的分割技术的任意组合。
[0131] 与图像201类似,块203同样是或可以看作是具有强度值(像素点值)的像素点的二维阵列或矩阵,但是,块203的尺寸比图像201小。换句话说,例如,根据所应用的颜色格式,块203可以包括一个像素点阵列(例如,图像201是单色情况下的亮度阵列)或三个像素点阵列(例如,图像201是彩色情况下的一个亮度阵列和两个色度阵列)或任何其它数量和/或类型的阵列。块203的水平和垂直方向(或轴)上的像素点数量限定了块203的大小。
[0132] 如图2所示的编码器20用于逐个块对图像201进行编码,例如,对每个块203执行编码和预测。
[0133] 残差计算
[0134] 残差计算单元204用于通过如下等方式根据图像块203和预测块265(下文将详细描述预测块265)来计算残差块205:逐个像素点(逐个像素)从图像块203的像素点值中减去预测块265的像素点值,以获得像素点域中的残差块205。
[0135] 变换
[0136] 变换处理单元206用于对残差块205的像素点值应用变换,例如,离散余弦变换(discrete cosine transform,DCT)或离散正弦变换(discrete sine transform,DST),以获取变换域中的变换系数207。变换系数207也可以称为变换残差系数,表示变换域中的残差块205。
[0137] 变换处理单元206可用于应用DCT/DST(例如为HEVC/H.265指定的核心变换)的整数近似值。与正交DCT变换相比,这种整数近似值通常按一定因子进行缩放。为了保持正逆变换处理的残差块的范数,在变换过程中应用了其它的缩放因子。缩放因子通常是根据某些约束条件来选择的,例如缩放因子是用于移位运算的2的幂、变换系数的位深度、准确性与实施成本之间的权衡等。例如,在解码器30侧通过逆变换处理单元212等为逆变换(以及在编码器20侧通过逆变换处理单元212等为对应逆变换)指定具体的缩放因子,以及相应地,可以在编码器20侧通过变换处理单元206等为正变换指定对应的缩放因子。
[0138] 量化
[0139] 量化单元208用于对变换系数207进行量化以获取经量化变换系数209,例如,应用标量量化或矢量量化。经量化变换系数209也可以称为经量化残差系数209。量化过程可以减少与部分或全部变换系数207关联的位深度。例如,可以在量化期间将n位变换系数向下取整到m位变换系数,其中n大于m。可以通过调整量化参数(quantization parameter,QP)修改量化程度。例如,对于标量量化,可以应用不同的缩放来实现更精细或更粗略的量化。较小的量化步长对应于更精细的量化,而较大的量化步长对应于更粗略的量化。适用的量化步长可以通过量化参数(quantization parameter,QP)指示。例如,量化参数可以是预定义的适用量化步长集的索引。例如,较小量化参数可以对应于精细量化(较小量化步长),较大量化参数可以对应于粗略量化(较大量化步长),反之亦然。量化可以包括除以量化步长,而反量化单元210等执行的对应或反解量化可包括乘以量化步长。根据HEVC等标准的实施例可以用于使用量化参数来确定量化步长。通常,量化步长可以根据使用包括除法的等式的定点近似法的量化参数来计算。量化和解量化可以引入其它缩放因子以恢复残差块的范数,由于在量化步长和量化参数的方程的定点近似法中使用的缩放,可能会修改残差块的范数。在一种示例性实现方式中,可以合并逆变换和解量化的缩放。或者,可以使用自定义量化表并在码流中从编码器指示到解码器。量化是有损操作,损失随着量化步长的增大而增大。
[0140] 反量化单元210用于对量化系数执行量化单元208的反量化,得到解量化系数211,例如,根据或使用与量化单元208相同的量化步长执行与量化单元208所执行的量化方案的反量化方案。解量化系数211也可称为解量化残差系数211,对应于变换系数207,但是由于量化造成损耗,反量化系数211通常与变换系数不完全相同。
[0141] 逆变换处理单元212用于应用变换处理单元206所应用的变换的逆变换,例如逆离散余弦变换(discrete cosine transform,DCT)或逆离散正弦变换(discrete sine transform,DST),以获得像素点域中的逆变换块213。逆变换块213也可以称为逆变换的解量化块213或逆变换的残差块213。
[0142] 重建单元214(例如,求和器214)用于通过将重建残差块213的像素点值和预测块265的像素点值相加,将逆变换块213(即重建残差块213)添加到预测块265,以在像素点域中获得重建块215。
[0143] 可选地,缓冲器单元216(或简称“缓冲器”216)(例如列缓冲器216)用于缓冲或存储重建块215和相应的像素点值,以进行帧内预测等。在其它实施例中,编码器可用于使用存储在缓冲器单元216中的未滤波的重建块和/或相应的像素点值进行任何类型的估计和/或预测(例如,帧内预测)。
[0144] 编码器20的实施例可配置成使得,例如缓冲器单元216不仅用于存储用于帧内预测254的重建块215,而且用于存储用于环路滤波器单元220(图2中未示出)的重建块215,和/或配置成使得,例如缓冲器单元216和解码图像缓冲器单元230形成一个缓冲器。其它实施例可用于使用滤波块221和/或解码图像缓冲器230中的块或像素点(两者都未在图2中示出)作为帧内预测254的输入或基础。
[0145] 环路滤波器单元220(或简称“环路滤波器”220)用于对重建块215进行滤波以获得滤波块221,从而顺利进行像素转变或提高视频质量等。环路滤波器单元220用于表示一个或多个环路滤波器,如去块效应滤波器、像素点自适应偏移(sample‑adaptive offset,SAO)滤波器或其它滤波器,例如双边滤波器或自适应环路滤波器(adaptive loop filter,ALF)或锐化或平滑滤波器或协作滤波器。虽然环路滤波器单元220在图2中示为环内滤波器,但是在其它配置中,环路滤波器单元220可以实现为后环路滤波器。滤波块221也可称为经滤波重建块221。解码图像缓冲器230可以在环路滤波器单元220对重建译码块进行滤波操作之后存储重建译码块。
[0146] 在实施例中,编码器20(对应为环路滤波器单元220)可用于输出环路滤波器参数(如像素点自适应偏移信息),例如直接输出或通过熵编码单元270或任何其它熵译码单元进行熵编码后输出,例如使得解码器30可以接收和应用相同的环路滤波器参数进行解码。
[0147] 解码图像缓冲器(decoded picture buffer,DPB)230可以是参考图像存储器,存储用于由视频编码器20对视频数据进行编码的参考图像数据。DPB 230可以由多种存储器设备中的任一种形成,例如动态随机存取存储器(dynamic random access memory,DRAM),包括同步DRAM(synchronous DRAM,SDRAM)、磁阻RAM(magnetoresistive RAM,MRAM)、电阻RAM(resistive RAM,RRAM)或其它类型的存储设备。DPB 230和缓冲器216可以由相同的存储设备或单独的存储设备提供。在一些示例中,解码图像缓冲器(decoded picture buffer,DPB)230用于存储滤波块221。解码图像缓冲器230还可用于存储同一当前图像或之前的重建图像等不同图像的其它之前的滤波块,例如之前的重建和滤波块221,并可提供完整的之前重建(即解码)图像(和对应参考块和像素点)和/或部分重建的当前图像(和对应参考块和像素点),例如进行帧间预测。在一些示例中,如果对重建块215进行重建但没有进行环内滤波,则解码图像缓冲器(decoded picture buffer,DPB)230用于存储重建块215。
[0148] 预测处理单元260(也称为块预测处理单元260)用于:接收或获取块203(当前图像201的当前块203)和重建图像数据,例如,缓冲器216中的相同(当前)图像的参考像素点和/或解码图像缓冲器230中的一个或多个之前解码图像的参考图像数据231,并处理这些数据以进行预测,即提供预测块265,其中,所述预测块265可以是帧间预测块245或帧内预测块
255。
[0149] 模式选择单元262可用于选择预测模式(例如,帧内预测或帧间预测模式)和/或对应的预测块245或255,用作预测块265以用于计算残差块205和对重建块215进行重建。
[0150] 在实施例中,模式选择单元262可用于选择预测模式(例如,从预测处理单元260支持的预测模式中选择),所述预测模式提供最佳匹配或者说最小残差(最小残差指传输或存储中进行更好的压缩),或具有最小指示开销(最小指示开销指传输或存储中进行更好的压缩),或者同时考虑或平衡以上两者。模式选择单元262可用于根据率失真优化(rate distortion optimization,RDO)确定预测模式,即选择提供最小率失真优化的预测模式,或者选择至少满足预测模式选择标准的关联率失真的预测模式。
[0151] 下文将更详细地解释由示例性编码器20执行的预测处理(例如,由预测处理单元260执行)和模式选择(例如,由模式选择单元262执行)。
[0152] 如上所述,编码器20用于从(预定的)预测模式集合中确定或选择最佳或最优的预测模式。例如,预测模式集可以包括帧内预测模式和/或帧间预测模式。
[0153] 帧内预测模式集合可以包括35种不同的帧内预测模式,例如,DC(或均值)模式和平面模式等非方向性模式,或例如H.265中所定义的方向性模式;或可包括67种不同的帧内预测模式,例如,DC(或均值)模式和平面模式等非方向性模式,或如H.266中定义的方向性模式。
[0154] (可能的)帧间预测模式集根据可用参考图像(即,例如存储在DPB 230中的之前至少部分解码的图像)和其它帧间预测参数确定,例如是否使用整个参考图像或只使用参考图像的一部分(例如当前块的区域附近的搜索窗口区域)来搜索最佳匹配参考块,和/或例如是否应用像素插值(例如半像素和/或四分之一像素插值)。
[0155] 除上述预测模式外,还可以应用跳过模式和/或直接模式。
[0156] 预测处理单元260还可以用于将块203分割成更小的块分割或子块,例如,迭代地使用四叉树分割(quad‑tree‑partitioning,QT)、二叉树分割(binary‑tree‑partitioning,BT)或三叉树分割(triple‑tree‑partitioning,TT)或其任何组合;例如,对块分割或子块中的每一个进行预测,其中,模式选择包括:选择分割块203的树结构以及应用于块分割或子块中的每一个的预测模式。
[0157] 帧间预测单元244可以包括运动估计(motion estimation,ME)单元(图2中未示出)和运动补偿(motion compensation,MC)单元(图2中未示出)。运动估计单元用于接收或获取图像块203(当前图像201的当前图像块203)和解码图像231,或至少一个或多个之前重建块,例如,一个或多个其它/不同之前解码图像231的重建块,以进行运动估计。例如,视频序列可以包括当前图像和之前的解码图像231,或者换句话说,当前图像和之前的解码图像231可以是组成视频序列的图像序列的一部分或形成视频序列的图像序列。
[0158] 例如,编码器20可用于从多个其它图像中的同一或不同图像的多个参考块中选择参考块,并将参考图像(或参考图像索引……)和/或参考块的位置(x坐标、y坐标)与当前块的位置之间的偏移(空间偏移)作为帧间预测参数提供给运动估计单元(图2中未示出)。这个偏移也称为运动矢量(motion vector,MV)。
[0159] 运动补偿单元用于获取(例如接收)帧间预测参数,并根据或使用帧间预测参数进行帧间预测,以获得帧间预测块245。由运动补偿单元(图2中未示出)执行的运动补偿可以涉及根据通过运动估计确定的运动/块矢量来提取或生成预测块,还可能包括对子像素精度进行插值。插值滤波可以从已知像素的像素点中生成其它像素的像素点,从而可能增加可用于对图像块进行译码的候选预测块的数量。一旦接收到当前图像块的PU的运动矢量,运动补偿单元246可以定位在其中一个参考图像列表中运动矢量指向的预测块。运动补偿单元246还可以生成与块和视频条带(slice)相关的语法元素,以供视频解码器30用于对视频条带的图像块进行解码。
[0160] 帧内预测单元254用于获取(例如接收)图像块203(当前图像块)和相同图像的一个或多个之前重建块(例如,重建邻块),以进行帧内估计。例如,编码器20可用于从多个(预定的)帧内预测模式中选择帧内预测模式。
[0161] 编码器20的实施例可用于根据优化标准(例如,最小残差(例如,提供与当前图像块203最相似的预测块255的帧内预测模式)或最小率失真)选择帧内预测模式。
[0162] 帧内预测单元254还用于根据帧内预测参数(例如,所选帧内预测模式)确定帧内预测块255。在任何情况下,在对块选择帧内预测模式之后,帧内预测单元254还用于向熵编码单元270提供帧内预测参数,即指示块的所选帧内预测模式的信息。在一个示例中,帧内预测单元254可用于执行下文描述的帧内预测技术的任何组合。
[0163] 熵编码单元270用于单独或联合(或完全不联合)对经量化的残差系数209、帧间预测参数、帧内预测参数和/或环路滤波器参数应用熵编码算法或方案(例如,可变长度译码(variable length coding,VLC)方案、上下文自适应VLC(context adaptive VLC,CAVLC)方案、算术译码方案、上下文自适应二进制算术译码(context adaptive  binary arithmetic coding,CABAC)、基于语法的上下文自适应二进制算术译码(syntax‑based context‑adaptive binary arithmetic coding,SBAC)、概率区间分割熵(probability interval partitioning entropy,PIPE)译码或其它熵编码方法或技术),以获得可由输出端272输出的经编码图像数据21,例如,以经编码码流21的形式输出。可以将经编码码流21发送到视频解码器30,或将其存档以用于稍后发送或由视频解码器30检索。熵编码单元270还可以用于对正在译码的当前视频条带的其它语法元素进行熵编码。
[0164] 视频编码器20的其它结构变体可用于对视频流进行编码。例如,基于非变换的编码器20可以在没有变换处理单元206的情况下直接对某些块或帧的残差信号进行量化。在另一种实现方式中,编码器20中,量化单元208和反量化单元210可以组合成一个单元。
[0165] 图3示出了用于实现本申请技术的示例性视频解码器30。例如,视频解码器30用于接收由编码器100编码的经编码图像数据(例如,经编码码流)21以获得解码图像131。在解码过程中,视频解码器30从视频编码器100接收视频数据,例如表示经编码视频条带的图像块的经编码视频码流以及相关语法元素。
[0166] 在图3的示例中,解码器30包括熵解码单元304、反量化单元310、逆变换处理单元312、重建单元314(例如,求和器314)、缓冲器316、环路滤波器320、解码图像缓冲器330和预测处理单元360。预测处理单元360可以包括帧间预测单元344、帧内预测单元354和模式选择单元362。在一些示例中,视频解码器30可执行通常与图2的视频编码器100描述的编码过程相反的解码过程。
[0167] 熵解码单元304用于对经编码图像数据21执行熵解码以获得量化系数309和/或经解码的译码参数(图3中未示出)等,例如帧间预测参数、帧内预测参数、环路滤波器参数和/或其它语法元素中的(解码的)任一者或全部。熵解码单元304还用于将帧间预测参数、帧内预测参数和/或其它语法元素转发给预测处理单元360。视频解码器30可以接收视频条带级和/或视频块级的语法元素。
[0168] 反量化单元310的功能可以与反量化单元110相同;逆变换处理单元312的功能可以与逆变换处理单元112相同;重建单元314的功能可以与重建单元114相同;缓冲器316的功能可以与缓冲器116相同;环路滤波器320的功能可以与环路滤波器120相同;解码图像缓冲器330的功能可以与解码图像缓冲器130相同。
[0169] 预测处理单元360可以包括帧间预测单元344和帧内预测单元354,其中,帧间预测单元344的功能可以与帧间预测单元144类似,帧内预测单元354的功能可以与帧内预测单元154类似。预测处理单元360通常用于根据经编码数据21进行块预测和/或获得预测块365,并用于从熵解码单元304等接收或获得(显式或隐式地)预测相关参数和/或关于所选预测模式的信息。
[0170] 当视频条带译码为经帧内译码(I)条带时,预测处理单元360的帧内预测单元354用于根据当前帧或图像的之前解码块的指示(signal)的帧内预测模式和数据来生成当前视频条带的图像块的预测块365。当将视频帧译码为经帧间译码(即,B或P)条带时,预测处理单元360的帧间预测单元344(例如,运动补偿单元)用于根据运动矢量和从熵解码单元304接收的其它语法元素产生当前视频条带的视频块的预测块365。对于帧间预测,可以从其中一个参考图像列表内的一个参考图像产生这些预测块。视频解码器30可以根据存储在DPB 330中的参考图像,使用默认构建技术来构建参考帧列表:列表0和列表1。
[0171] 预测处理单元360用于通过解析运动矢量和其它语法元素来确定当前视频条带中的视频块的预测信息并使用所述预测信息针对所解码的当前视频块生成预测块。例如,预测处理单元360使用接收到的一些语法元素确定用于对视频条带的视频块进行译码的预测模式(例如帧内预测或帧间预测)、帧间预测条带类型(例如B条带、P条带或GPB条带)、用于条带的一个或多个参考图像列表的构建信息、用于条带的每个帧间编码的视频块的运动矢量、用于条带的每个帧间译码的视频块的帧间预测状态、其它信息,以对当前视频条带内的视频块进行解码。
[0172] 反量化单元310用于对码流中提供并由熵解码单元304解码的量化变换系数进行反量化,即解量化。反量化过程可以包括使用视频编码器100对视频条带中的每个视频块计算的量化参数来确定量化程度,同样确定需要应用的反量化的程度。
[0173] 逆变换处理单元312用于对变换系数应用逆变换,例如逆DCT、逆整数变换或概念上类似的逆变换过程,以在像素域中产生残差块。
[0174] 重建单元314(例如,求和器314)用于通过将重建残差块313的像素点值和预测块365的像素点值相加,将逆变换块313(即重建残差块313)添加到预测块365,以在像素点域中获得重建块315。
[0175] 环路滤波器单元320(在译码环路中或译码环路之后)用于对重建块315进行滤波,以获得滤波块321,以顺利进行像素转变或以其它方式提高视频质量等。在一个示例中,环路滤波器单元320可用于执行下文描述的滤波技术的任何组合。环路滤波器单元320用于表示一个或多个环路滤波器,如解块滤波器、像素点自适应偏移(sample‑adaptive offset,SAO)滤波器或其它滤波器,例如双边滤波器或自适应环路滤波器(adaptive loop filter,ALF)或锐化或平滑滤波器或协作滤波器。虽然环路滤波器单元320在图3中示为环内滤波器,但是在其它配置中,环路滤波器单元320可以实现为后环路滤波器。
[0176] 然后,将给定帧或图像中的解码视频块321存储在解码图像缓冲器330中,所述解码图像缓冲器330存储用于后续运动补偿的参考图像。
[0177] 解码器30用于通过输出端332等输出解码图像331,向用户呈现或供用户观看。
[0178] 可以使用视频解码器30的其它变体对压缩码流进行解码。例如,解码器30可以在没有环路滤波单元320的情况下产生输出视频流。例如,基于非变换的解码器30可以在没有逆变换处理单元312的情况下直接对某些块或帧的残差信号进行反量化。在另一种实现方式中,视频解码器30中,反量化单元310和逆变换处理单元312可以组合成一个单元。
[0179] 图4为本发明实施例提供的视频译码设备400的示意图。视频译码设备400适用于实现本文所述的所公开实施例。在一个实施例中,视频译码设备400可以是解码器,例如图1A的视频解码器30,或编码器,例如图1A的视频编码器20。在一个实施例中,视频译码设备
400可以是如上所述的图1A的视频解码器30或图1A的视频编码器20的一个或多个组件。
[0180] 视频译码设备400包括用于接收数据的入端口410和接收器单元(receiver unit,Rx)420;用于处理数据的处理器、逻辑单元或中央处理单元(central processing unit,CPU)430;用于发送数据的发送器单元(transmitter unit,Tx)440和出端口450;以及用于存储数据的存储器460。视频译码设备400还可以包括耦合到入端口410、接收器单元420、发送器单元440和出端口450的光电(optical‑to‑electrical,OE)组件和电光(electrical‑to‑optical,EO)组件,用于光或电信号的出或入。
[0181] 处理器430通过硬件和软件实现。处理器430可实现为一个或多个CPU芯片、核(例如,多核处理器)、FPGA、ASIC和DSP。处理器430与入端口410、接收器单元420、发送器单元440、出端口450和存储器460通信。处理器430包括译码模块470。译码模块470实现上文所公开的实施例。例如,译码模块470执行、处理、准备或提供各种译码操作。因此,包括译码模块
470为视频译码设备400的功能提供了实质性改进,并且实现了视频译码设备400到不同状态的转换。或者,以存储在存储器460中并由处理器430执行的指令来实现译码模块470。
[0182] 存储器460包括一个或多个磁盘、磁带驱动器和固态驱动器,可用作溢出数据存储设备,以在选择执行程序时存储这些程序,以及存储程序执行期间读取的指令和数据。存储器460可以是易失性和/或非易失性的,并且可以是只读存储器(read‑only memory,ROM)、随机存取存储器(random access memory,RAM)、三态内容寻址存储器(ternary content‑addressable memory,TCAM)和/或静态随机存取存储器(static random‑access memory,SRAM)。
[0183] 图5为示例性实施例提供的装置500的简化框图,其中,装置500可用作图1中的源设备310和目的地设备320中的任一个或两个。装置500可以实现本申请中上文所述的技术。装置500的形式可以是包括多个计算设备的计算系统,也可以是单个计算设备,例如手机、平板电脑、膝上型电脑、笔记本电脑、台式计算机等。
[0184] 装置500中的处理器502可以是中央处理单元。或者,处理器502可以是现有的或今后将研发出的能够操控或处理信息的任何其它类型的设备或多个设备。虽然可以使用如图所示的处理器502等单个处理器来实现所公开的实现方式,但使用一个以上的处理器可以提高速度和效率。
[0185] 在一种实现方式中,装置500中的存储器504可以是只读存储器(read only memory,ROM)设备或随机存取存储器(random access memory,RAM)设备。任何其它合适类型的存储设备都可以用作存储器504。存储器504可以包括处理器502通过总线512访问的代码和数据506。存储器504还可包括操作系统508和应用程序510,应用程序510包括允许处理器502执行本文所述方法的至少一个程序。例如,应用程序510可以包括应用1至N,还包括执行本文所述方法的视频译码应用。装置500还可以包括辅助存储器514形式的附加存储器,辅助存储器514可以是与移动计算设备一起使用的存储卡等。由于视频通信会话可能包括大量信息,因此可以全部或部分地存储在辅助存储器514中,并根据需要加载到存储器504中进行处理。
[0186] 装置500还可以包括一个或多个输出设备,例如显示器518。在一个示例中,显示器518可以是将显示器与可用于感测触摸输入的触敏元件组合的触敏显示器。显示器518可以通过总线512耦合到处理器502。除了显示器518或作为显示器518的替代,可以提供允许用户对装置500进行编程或以其它方式使用装置500的其它输出设备。当所述输出设备是显示器或包括显示器时,所述显示器可以通过各种方式实现,包括通过液晶显示器(liquid crystal display,LCD)、阴极射线管(cathode‑ray tube,CRT)显示器、等离子显示器或发光二极管(light emitting diode,LED)显示器,如有机LED(organic LED,OLED)显示器。
[0187] 装置500还可以包括图像传感设备520或与图像传感设备520通信,例如,所述图像传感设备520为摄像机或现有的或今后将研发出的能够感测图像(如操作装置500的用户图像)的任何其它图像传感设备520。可以对图像传感设备520进行定位,使得其面向操作装置500的用户。在一个示例中,可以配置图像传感设备520的位置和光轴,使得视野包括与显示器518直接相邻并且可以看到显示器518的区域。
[0188] 装置500还可以包括声音传感设备522或与声音传感设备522通信,例如,所述声音传感设备522为麦克风或现有的或今后将研发出的能够感测装置500附近的声音的任何其它声音传感设备。声音传感设备522可以被定位成使得它面向操作装置500的用户,并且可以用于接收用户在操作装置500时发出的语音或其它话语等声音。
[0189] 尽管图5描述了装置500的处理器502和存储器504集成到单个单元中,但是可以利用其它配置。处理器502的操作可以分布在多个机器(每个机器具有一个或多个处理器)中,这些机器可以直接耦合或通过局域网或其它网络耦合。存储器504可以分布在多个机器中,如基于网络的存储器或执行装置500的操作的多个机器中的存储器。虽然装置500的总线512在本文中描述为单个总线,但是总线512可以包括多个总线。此外,辅助存储器514可以直接耦合到装置500的其它组件或可以通过网络进行访问,并且可以包括存储卡等单个集成单元或多个存储卡等多个单元。因此,装置500可以具有各种各样的配置。
[0190] 1.运动矢量译码基本信息
[0191] H.265/HEVC标准中帧间预测的一个重要部分是运动矢量(motion vector,MV)译码。运动矢量通常通过以下两种方案进行预测性译码:
[0192] 1.运动矢量由运动矢量预测值构建,运动矢量之间的差值通过运动估计过程和预测值得到。HEVC标准中的这种MV译码方法称为高级运动矢量预测(advanced motion vector prediction,AMVP)。
[0193] 2.运动矢量是通过从可配置的候选集(预测值)中选择而推导的,而无需对运动矢量差进行编码。这种方法称为融合(merge)模式。
[0194] 对于这两种技术,可以计算由已编码的运动矢量构建的可能预测候选的较大集合。在HEVC标准中,有四组运动矢量预测值:空间候选、时间候选、组合双向预测候选和零候选。在编码过程中,从一定数量的候选中选择最佳的运动矢量预测值,并将所述最佳运动矢量预测值在候选列表中的索引写入码流。空间MVP候选位置的示例(用于融合模式)如图6所示。
[0195] 在给定的示例中,MVP候选分别表示为A0、A1、B0、B1和B2。Ai候选位置表示当前CU左侧的预测值,Bj位置表示当前CU顶部的预测值。应注意,在一般情况下,候选位置可以根据CU的译码顺序确定。根据译码顺序,可以从顶部、左、右和底部相邻的CU中选择候选。
[0196] HEVC标准中所有空间MVP候选(用于融合模式和高级运动矢量预测)都属于相邻CU(即,相邻CU与当前CU共享边界)。
[0197] 基于历史的运动矢量预测
[0198] 为了进一步改进运动矢量预测,提供了使用来自非调整CU的运动信息(运动信息是融合列表索引、参考图像索引和运动矢量的集合)的技术。
[0199] 此类技术之一是基于历史的运动矢量预测(History‑based motion vector prediction,HMVP),由Li Zhang等人于2018年7月10日至18日在斯洛文尼亚共和国卢布尔雅那的ITU‑T SG 16WP 3和ISO/IEC JTC1/SC 29/WG 11JVET‑K0104联合视频探索小组(Joint Video Exploration Team,JVET),第11次会议中的“CE4相关:基于历史的运动矢量预测(History‑based Motion Vector Prediction)”中进行描述。HMVP使用由之前译码的CU的运动信息组成的查找表(look‑up table,LUT)。HMVP方法基本上由两个主要部分组成:
[0200] 1.HMVP查找表构建及更新方法
[0201] 2.HMVP LUT用于构建融合候选列表(或AMVP候选列表)。
[0202] 1.1 HMVP LUT构建及更新方法
[0203] 在编解码过程中维护LUT。当具有新的条带时,LUT被清空。在当前CU被帧间译码时,就将相关运动信息添加到表格的最后一个表项中,作为新的HMVP候选。LUT大小(用N表示)是HMVP方法中的一个参数。
[0204] 如果之前译码的CU的HMVP候选的数目大于LUT大小,则应用表格更新方法,使得LUT始终包含不超过N个最近之前译码的运动候选。在Zhang等人的方法中,提出了两种表格更新方法:
[0205] 1.先进先出(First‑In‑First‑Out,FIFO)
[0206] 2.受限的FIFO。
[0207] 1.1.1 FIFO LUT更新方法
[0208] 根据FIFO LUT更新方法,在插入新候选之前,先从表格中删除最早的候选(第0个表项)。该过程在图7中示出。在图7所示的示例中,H0是最早的(第0个)HMVP候选,X是新的候选。
[0209] 这种更新方法相对没那么复杂,但是LUT元素中应用该方法的的一些元素可以相同(包含相同的运动信息)。即,LUT中的一些数据是冗余的,并且LUT中的运动信息种类少于有重复的情况(即,实际上将冗余候选清除)下的运动信息种类。
[0210] 1.1.2约束FIFO LUT更新方法
[0211] 为了进一步提高译码效率,提供了一种约束FIFO LUT更新方法。根据这种方法,在向表格中插入新的HMVP候选之前,首先进行冗余校验。冗余校验是指判断新的候选X的运动信息与已位于LUT中的候选Hm的运动信息是否重合。如果未找到这样的候选Hm,则使用简单的FIFO方法,否则执行以下过程:
[0212] 1.Hm之后的所有LUT表项向左移一个位置(表头),这样从表中删除候选Hm,LUT末尾的一个位置被释放。
[0213] 2.将新的候选X添加到表格的第一个空位置。
[0214] 图8描述了使用约束FIFO LUT更新方法的示例。
[0215] 1.2使用HMVP LUT进行运动矢量译码
[0216] HMVP候选可用于融合候选列表构建过程和/或AMVP候选列表构建过程。
[0217] 1.2.1使用HMVP LUT进行融合候选名单构建
[0218] 根据Zhang等人的方法,HMVP候选从最后一个表项插入到TMVP候选之后的第一个表项(HN–1、HN–2……H0)的融合列表中。LUT遍历顺序如图9所示。如果HMVP候选与融合列表中已存在的候选之一相等,则该HMVP候选不会添加到融合列表中。由于融合列表大小有限,位于LUT开头的部分HMVP候选也可以不用于当前CU的融合列表构建过程中。
[0219] 1.2.2使用HMVP LUT进行AMVP候选列表构建过程
[0220] 在Zhang等人的方法中,为融合模式构建的HMVP LUT也用于AMVP。与在融合模式中使用该表格的不同之处在于,仅使用该LUT的少数表项来构建AMVP候选列表。更具体地说,使用最后M个元素(Zhang等人:M等于4)。在AMVP候选列表构建过程中,HMVP候选从最后一个表项插入到TMVP候选之后的第N–K个表项(HN–1、HN–2……HN–K)。LUT遍历顺序如图9所示。
[0221] 仅使用参考图像与AMVP目标参考图像相同的HMVP候选。如果HMVP候选与所述列表中已存在的候选之一相等,则该HMVP候选不会用于构建AMVP候选列表。由于AMVP候选列表大小有限,部分HMVP候选也可以不用于当前CU的AMVP列表构建过程中。
[0222] 1.3 HMVP方法的缺点
[0223] 在HEVC和VVC中,融合列表构建过程从分析相邻CU的运动信息开始,如图6所示。HMVP LUT中的候选插入相邻候选和TMVP候选之后。尽管如此,HMVP LUT构建方法使得HMVP LUT中的最后一个表项在大多数情况下也包含相邻CU的运动信息。因此,在候选列表中没有添加新元素的情况下,执行了不必要的候选比较操作。在使用HMVP LUT构建AMVP候选列表的过程中也存在同样的问题,因为AMVP列表构建过程也是从分析相邻CU的运动信息开始的。
[0224] 2.广义的双向预测
[0225] 广义的双向预测(Generalized bi‑prediction,GBi)是由C.‑C.Chen、X.Xiu、Y.He和Y.Ye于2016年5月在ITU‑T SG16 WP3与ISO/IEC JTC1/SC29/WG11的视频联合探索小组JVET‑C0047,“帧间译码的广义的双向预测(Generalized bi‑prediction for inter coding)”中提出的。GBi在双向预测模式下,对列表0和列表1中的预测值应用不相等的权重。在帧间预测模式中,根据率失真优化评估包括相等权重对(1/2、1/2)的多个权重对,并向解码器指示(signal)所选权重对的GBi索引。
[0226] 融合模式下,和相邻CU一样使用相同的GBi索引。根据等式(1)生成双向预测模式下的预测值。
[0227] PGBi=(w0*PL0+w1*PL1+RoundingOffsetGBi)>>shiftNumGBi    (1)
[0228] 其中,PGBi是GBi的最终预测值,w0和w1是所选的GBi权重对,分别应用于列表0(L0)和列表1(L1)的预测值。RoundingOffsetGBi和shiftNumGBi用于对最终的预测值进行GBi归一化。支持的w1权重集为{–1/4、3/8、1/2、5/8、5/4},其中5个权重对应1个相等权重对和4个不相等权重对。w1与w0之和固定为1.0。因此,对应的w0权重集为{5/4、5/8、1/2、3/8、–1/4}。以CU为单位选择权重对。
[0229] 对于非低延时图像,权重集大小由5缩小为3,其中w1权重集为{3/8、1/2、5/8},w0权重集为{5/8、1/2、3/8}。
[0230] 本发明的目的是降低融合/AMVP候选列表构建的复杂度,避免不必要的比较操作。
[0231] 本发明涉及一种帧间预测装置的广义双向预测方法和装置。更具体地,描述了以下方面:
[0232] 1.基于历史的运动信息列表构建修改:列表中除了存储当前块的运动信息外,还存储当前块的广义双向预测权重索引(bcwIdx索引)。
[0233] 2.融合模式的bcwIdx索引推导过程修改:对于具有与基于历史的候选相对应的融合索引的块,该候选的bcwIdx索引用于当前块。
[0234] 根据本发明的一个实施例,提供了一种用于根据基于历史的运动矢量预测(history‑based motion vector predictor,HMVP)列表确定帧中当前块的运动信息的方法,包括以下步骤:构建所述HMVP列表,所述HMVP列表是N个基于历史的候选Hk(k=0……N–1)的有序列表,所述N个基于历史的候选与所述帧中所述当前块之前的N个先行块的运动信息关联,其中,N大于或等于1,每个基于历史的候选包括运动信息,所述运动信息包括以下元素:(1)一个或多个运动矢量(motion vectors,MV);(2)与所述MV对应的一个或多个参考图像索引;(3)一个或多个双向预测权重索引;将所述HMVP列表中的一个或多个基于历史的候选添加到所述当前块的运动信息候选项列表中;基于所述运动信息候选列表获取所述当前块的运动信息。
[0235] 图10为确定运动信息的方法的流程图。在步骤1001中,构建HMVP列表。在步骤1002中,将HMVP列表中的一个或多个基于历史的候选添加到运动信息候选列表中。在步骤1003中,基于所述运动信息候选列表获取所述当前块的运动信息。
[0236] 根据本发明的一个实施例,基于历史的候选还包括与所述一个或多个双向预测权重索引不同的一个或多个索引。
[0237] 根据本发明的一个实施例,构建所述HMVP列表还包括:将所述HMVP列表的每个基于历史的候选的至少一个元素与先行块的对应元素进行比较;如果比较所述HMVP列表的每个基于历史的候选的至少一个元素与所述先行块的对应元素不同,则将所述先行块的运动信息添加到所述HMVP列表中。
[0238] 根据本发明的一个实施例,所述方法还包括:将所述HMVP列表的每个基于历史的候选的至少一个元素与当前块的运动信息的对应元素进行比较;如果比较所述HMVP列表的每个HMVP候选的至少一个元素与所述当前块的运动信息的对应元素不同,则将所述当前块的运动信息添加到所述HMVP列表中。
[0239] 根据本发明的一个实施例,所述比较包括:比较对应的运动矢量,以及比较对应的参考图像索引。
[0240] 根据本发明的一个实施例,所述比较包括:比较对应的运动矢量、比较对应的参考图像索引以及比较双向预测权重索引。
[0241] 如前所述,比较是逐个元素执行的。特别地,比较可以包括运动信息的所有元素。或者,在比较中可以使用这些元素中的一些。换句话说,所述运动信息包括(1)一个或多个MV,(2)一个或多个参考图像索引,(3)双向预测权重索引,运动信息的元素子集可用于进行比较。此外,所述运动信息可包括(4)与bcw索引不同的一个或多个索引。
[0242] 例如,所述运动信息的元素子集可以包括上述MV和参考图像索引。然后,不管其它元素(不是子集的一部分)是否相同,仅在检查所述MV和所述参考图像索引的差异时执行比较。在给定的子集示例中,所述比较中不包括的元素是bcw索引和与bcw索引不同的一个或多个其它索引。
[0243] 在第二示例中,所述子集可包括所述运动信息的以下元素:所述MV、所述参考图像索引和所述双向预测索引。该子集中不包括与bcw索引不同的一个或多个其它索引。在这种情况下,在检查这三种元素的差异时执行所述比较。
[0244] 因此,虽然运动信息可以包含多个元素,但可以根据所述运动信息的元素子集逐个元素执行所述比较。
[0245] 根据本发明的一个实施例,所述HMVP列表的所述基于历史的候选按照从码流中获取所述先行块的所述基于历史的候选的顺序进行排序。
[0246] 根据本发明的一个实施例,所述HMVP列表的长度为N,N为6或5。
[0247] 根据本发明的一个实施例,所述运动信息候选列表包括:第一块的运动信息中的第一运动信息,所述第一块与所述当前块具有预设的空间或时间位置关系。
[0248] 根据本发明的一个实施例,基于所述运动信息候选列表获取所述当前块的运动信息包括:当以融合模式对所述当前块进行译码时,参考码流中的融合索引,或者当以高级运动矢量预测(advanced motion vector prediction,AMVP)模式对所述当前块进行译码时,参考码流中的运动矢量预测值索引,推导所述运动信息。
[0249] 根据本发明的一个实施例,还包括:使用根据所述运动信息候选列表推导的所述运动信息中包括的双向预测权重索引,获取所述当前块的预测值。
[0250] 修改后的bcwIdx索引推导方法有利于通过为CU使用更合适的bcwIdx索引,该索引采用融合方式进行译码,且具有与基于历史的融合候选相对应的融合索引,从而提高译码效率。
[0251] 1.修改后的HMVP运动候选表更新过程
[0252] 该HMVP表更新逻辑与传统方法相同。不同之处在于,一个运动候选(mvCand),作为HMVP表更新过程的输入,除了包含两个运动矢量、两个参考索引和两个预测列表使用标志外,还包含广义的双向预测权重索引。该bcwIdx索引存储在HMVP表中,会影响HMVP表更新过程中的修剪(pruning)过程(变量sameCand的计算方式,见下文说明)。
[0253] 根据本发明的一个实施例,提供了一种用于构建和更新基于历史的运动矢量预测(history‑based motion vector predictor,HMVP)列表的方法,包括以下步骤:构建所述HMVP列表,所述HMVP列表是N个基于历史的候选Hk(k=0……N–1)的有序列表,所述N个基于历史的候选与所述帧中所述当前块之前的N个先行块的运动信息关联,其中,N大于或等于1,每个基于历史的候选包括运动信息,所述运动信息包括以下元素:(1)一个或多个运动矢量(motion vectors,MV);(2)与所述MV对应的一个或多个参考图像索引;(3)一个或多个双向预测权重索引;将所述HMVP列表的每个基于历史的候选的至少一个元素与所述当前块的对应元素进行比较;如果比较所述HMVP列表的每个基于历史的候选的至少一个元素与所述当前块的对应元素不同,则将所述当前块的运动信息添加到所述HMVP列表中。
[0254] 图11为用于构建和更新基于历史的运动矢量预测的方法的流程图。在步骤1101中,构建HMVP列表。在步骤1102中,将所述HMVP列表的每个基于历史的候选的至少一个元素与所述当前块的对应元素进行比较。
[0255] 以元素为基础的比较结果在图11中称为C结果。C结果可以是所有元素相同/相等,或者至少一个或多个元素不相同/不相等/不同。
[0256] 如果所述C结果为至少一个或多个元素不同,则将所述当前块的所述运动信息添加到所述HMVP列表中(步骤1103)。否则,如果所有元素都相同,则相应的运动信息不添加到所述HMVP列表中(步骤1104)。
[0257] 根据本发明的一个实施例,基于历史的候选还包括与所述一个或多个双向预测权重索引不同的一个或多个索引。
[0258] 根据本发明的一个实施例,所述比较包括:比较对应的运动矢量,以及比较对应的参考图像索引。
[0259] 根据本发明的一个实施例,所述比较包括:比较对应的运动矢量、比较对应的参考图像索引以及比较双向预测权重索引。
[0260] 根据本发明的一个实施例,所述HMVP列表的所述基于历史的候选按照从码流中获取所述先行块的所述基于历史的候选的顺序进行排序。
[0261] 根据本发明的一个实施例,所述HMVP列表的长度为N,N为6或5。
[0262] HMVP表更新过程的输入包括:
[0263] –包括两个运动矢量mvL0和mvL1的运动候选mvCand、两个参考索引refIdxL0和refIdxL1、两个可变预测列表使用标志predFlagL0和predFlagL1以及广义的双向预测权重索引bcwIdx。
[0264] 该过程的输出是一个修改后的HMVP阵列HMVPCandList。
[0265] 更新过程包括以下有序步骤:
[0266] 1.对于HMVPIdx=0...HMVPCandNum–1的每个索引HMVPIdx,按顺序进行以下步骤,直到变量sameCand的值等于真(true):
[0267] 1.1如果mvCand与HMVPCandList[HMVPIdx]的运动矢量、参考索引和GBi索引相同,则变量sameCand的值为真。
[0268] 1.2否则,变量sameCand的值为假(false)。
[0269] 1.3HMVPIdx++
[0270] 2.变量tempIdx的值为HMVPCandNum。
[0271] 3.如果sameCand等于真或HMVPCandNum等于6,则对于tempIdx=(sameCand?HMVPIdx:1)…HMVPCandNum–1的每个索引tempIdx,将HMVPCandList[tempIdx]复制到HMVPCandList[tempIdx–1]中。
[0272] 4.复制mvCand到HMVPCandList[tempIdx]中
[0273] 5.如果HMVPCandNum小于6,则HMVPCandNum加1。
[0274] 在一些实施例中,变量sameCand的计算方式(上述算法描述的步骤1、0)可以如下:
[0275] 1.1如果mvCand与HMVPCandList[HMVPIdx]的运动矢量、参考索引相同,则变量sameCand的值为真。
[0276] 1.2否则,变量sameCand的值为假。
[0277] 在一些实施例中,变量sameCand的计算方式可以根据mvCand和HMVPCandList[HMVPIdx]的GBi索引之间的差异确定。
[0278] 在一些实施例中,变量sameCand的计算方式可以根据mvCand和HMVPCandList[HMVPIdx]的精确bcwIdx索引值确定。例如,在HMVP表更新过程中,一些bcwIdx索引对可以是相等的。
[0279] 2.修改的HMVP融合候选推导过程
[0280] 文中提供的HMVP融合候选的推导过程与传统的推导过程的区别在于bcwIdx索引由文中提供的方法推导。这些bcwIdx索引存储在HMVP表中,会影响HMVP融合候选推导过程中的修剪过程。
[0281] HMVP融合候选推导过程的输入包括:
[0282] –融合候选列表mergeCandList;
[0283] –mergeCandList中每个候选N的参考索引refIdxL0N和refIdxL1N;
[0284] –mergeCandList中每个候选N的预测列表使用标志predFlagL0N和predFlagL1N;
[0285] –mergeCandList中每个候选N的1/16分数像素点精度的运动矢量mvL0N和mvL1N;
[0286] –memergeCandList中元素的个数numCurrMergeCand;
[0287] –空间和时间融合候选推导过程后mergeCandList中元素的个数numOrigMergeCand;
[0288] –由元素HMVPCandNum组成的HMVP列表HMVPCandList;
[0289] –最大融合候选数MaxNumMergeCand;
[0290] –mergeCandList中每个候选的广义的双向预测权重索引bcwIdx。
[0291] HMVP融合候选推导过程的输出包括:
[0292] –融合候选列表mergeCandList;
[0293] –memergeCandList中元素的个数numCurrMergeCand;
[0294] –调用本过程时,向mergeCandList中添加的每个新的候选combCandk的参考索引refIdxL0combCandk和refIdxL1combCandk;
[0295] –调用本过程时,向mergeCandList中添加的每个新的候选combCandk的预测列表使用标志predFlagL0combCandk和predFlagL1combCandk;
[0296] –调用本过程时,向mergeCandList中添加的每个新的候选combCandk的1/16分数像素点精度的运动矢量mvL0combCandk和mvL1combCandk;
[0297] –调用本过程时,向mergeCandList中添加的每个新的候选combCandk的广义的双向预测权重索引mvL0combCandk。
[0298] 1.设置变量numOrigMergeCand等于numCurrMergeCand,设置变量hmvpStop等于假。
[0299] 2.对于HMVPCandList中索引HMVPIdx=1..HMVPCandNum的每个候选,重复以下有序步骤,直到hmvpStop的值等于真:
[0300] 2.1.设置sameMotion为假
[0301] 2.2.如果HMVPCandList[HMVPCandNum‑HMVPIdx]与任一mergeCandList[i]的运动矢量、参考索引以及bcwIdx索引相同,其中i为0…numOrigMergeCand–1,设置sameMotion的值为真。
[0302] 2.3.如果sameMotion的值等于假,则设置mergeCandList[numCurrMergeCand++]为HMVPCandList[HMVPCandNum–HMVPIdx]。
[0303] 2.4.如果numCurrMergeCand的值等于(MaxNumMergeCand–1),则设置hmvpStop的值为真。
[0304] 在一些实施例中,变量sameCand的计算方式(上述算法描述的步骤0)可以如下:
[0305] 2.2如果HMVPCandList[HMVPCandNum–HMVPIdx]与任一mergeCandList[i]的运动矢量、参考索引相同,其中i为0…numOrigMergeCand–1,设置sameMotion的值为真。
[0306] 在一些实施例中,变量sameMotion的计算方式可以根据HMVPCandList[HMVPCandNum–HMVPIdx]与mergeCandList[i]的GBi索引之间的差异确定。
[0307] 在一些实施例中,变量sameMotion的计算方式可以根据HMVPCandList[HMVPCandNum–HMVPIdx]和mergeCandList[i]的精确bcwIdx索引值确定。例如,在HMVP融合候选推导过程中,一些bcwIdx索引对可以是相等的。
[0308] 下面描述处理HMVP融合候选的详细实施例示例:
[0309] 8.5.2运动矢量分量和参考指数的推导过程
[0310] 8.5.2.1概述
[0311] 该过程的输入是:
[0312] –当前亮度译码块的左上像素点相对于当前图像的左上亮度像素点的亮度位置(xCb,yCb);
[0313] –变量cbWidth,表示当前译码块以亮度像素点计算的宽度;
[0314] –变量cbHeight,表示当前译码块以亮度像素点计算的高度。
[0315] 该过程的输出是:
[0316] –1/16分数像素点精度的亮度运动矢量mvL0[0][0]和mvL1[0][0];
[0317] –参考索引refIdxL0和refIdxL1;
[0318] –预测列表使用标志predFlagL0[0][0]和predFlagL1[0][0];
[0319] –半像素点插值滤波器索引hpelIfIdx;
[0320] –双向预测权重索引bcwIdx。
[0321] 设置变量LX为当前图像的RefPicList[X],X为0或1。
[0322] 为了推导变量mvL0[0][0]和mvL1[0][0]、refIdxL0和refIdxL1以及predFlagL0[0][0]和predFlagL1[0][0],则:
[0323] –如果general_merge_flag[xCb][yCb]等于1,使用以下信息调用条款8.5.2.2中指定的融合模式的亮度运动矢量的推导过程:亮度位置(xCb,yCb)、变量cbWidth和cbHeight作为输入,亮度运动矢量mvL0[0][0]、mvL1[0][0]、参考索引refIdxL0、refIdxL1、预测列表使用标志predFlagL0[0][0]和predFlagL1[0][0]、半像素点插值滤波器索引hpelIfIdx、双向预测权重索引bcwIdx和融合候选列表mergeCandList作为输出。
[0324] –否则:
[0325] –对于PRED_LX中的变量predFlagLX[0][0]、mvLX[0][0]和refIdxLX中的X被0或1替换,在语法元素ref_idx_lX和MvdLX中,进行以下有序步骤:
[0326] 1.变量refIdxLX和predFlagLX[0][0]的推导方式如下:
[0327] –如果inter_pred_idc[xCb][yCb]等于PRED_LX或PRED_BI,
[0328] refIdxLX=ref_idx_lX[xCb][yCb]                       (8‑292)
[0329] predFlagLX[0][0]=1                                  (8‑293)
[0330] –否则,指定变量refIdxLX和predFlagLX[0][0]如下:
[0331] refIdxLX=‑1                                          (8‑294)[0332] predFlagLX[0][0]=0                                 (8‑295)
[0333] 2.变量mvdLX的推导方式如下:
[0334] mvdLX[0]=MvdLX[xCb][yCb][0]                    (8‑296)
[0335] mvdLX[1]=MvdLX[xCb][yCb][1]                    (8‑297)
[0336] 3.当predFlagLX[0][0]等于1时,使用以下信息调用条款8.5.2.8中亮度运动矢量预测的推导过程:亮度译码块位置(xCb,yCb)、译码块宽度cbWidth、译码块高度cbHeight和变量refIdxLX作为输入,mvpLX作为输出。
[0337] 4.当predFlagLX[0][0]=1时,亮度运动矢量mvLX[0][0]的推导方式如下:
[0338] uLX[0]=(mvpLX[0]+mvdLX[0]+218)%218          (8‑298)
[0339] mvLX[0][0][0]=(uLX[0]>=217)?(uLX[0]‑218):uLX[0]            (8‑299)[0340] uLX[1]=(mvpLX[1]+mvdLX[1]+218)%218          (8‑300)
[0341] mvLX[0][0][1]=(uLX[1]>=217)?(uLX[1]‑218):uLX[1]            (8‑301)[0342] 注1–上述规定的mvLX[0][0][0]和mvLX[0][0][1]的结果值始终在‑217到217‑1的范围内(包括端值)。
[0343] –半像素点插值滤波器索引hpelIfIdx的推导方式如下:
[0344] hpelIfIdx=AmvrShift==3?1:0                         (8‑302)[0345] –设置双向预测权重索引bcwIdx等于bcw_idx[xCb][yCb]。
[0346] 当以下条件都为真时,设置refIdxL1=–1,predFlagL1=0,bcwIdx=0:
[0347] –predFlagL0[0][0]=1;
[0348] –predFlagL1[0][0]=1;
[0349] –(cbWidth+cbHeight)的值等于12。
[0350] 使用以下信息调用条款8.5.2.16中指定的基于历史的运动矢量预测列表的更新过程:亮度运动矢量mvL0[0][0]和mvL1[0][0]、参考索引refIdxL0和refIdxL1、预测列表使用标志predFlagL0[0][0]和predFlagL1[0][0]、双向预测权重索引以及半像素点插值滤波器索引hpelIfIdx。
[0351] 8.5.2.3空间融合候选的推导过程
[0352] 该过程的输入是:
[0353] –当前亮度译码块的左上像素点相对于当前图像的左上亮度像素点的亮度位置(xCb,yCb);
[0354] –变量cbWidth,表示当前译码块以亮度像素点计算的宽度;
[0355] –变量cbHeight,表示当前译码块以亮度像素点计算的高度。
[0356] 该过程的输出如下,其中X为0或1:
[0357] –相邻译码单元的可用标志availableFlagA0、availableFlagA1、availableFlagB0、availableFlagB1和availableFlagB2;
[0358] –相邻译码单元的参考索引refIdxLXA0、refIdxLXA1、refIdxLXB0、refIdxLXB1、refIdxLXB2;
[0359] –相邻译码单元的预测列表使用标志predFlagLXA0、predFlagLXA1、predFlagLXB0、predFlagLXB1、predFlagLXB2;
[0360] –相邻译码单元的1/16分数像素点精度的运动矢量mvLXA0、mvLXA1、mvLXB0、mvLXB1、mvLXB2;
[0361] –半像素点插值滤波器索引hpelIfIdxA0、hpelIfIdxA1、hpelIfIdxB0、hpelIfIdxB1、hpelIfIdxB2;
[0362] –双向预测权重索引bcwIdxA0、bcwIdxA1、bcwIdxB0、bcwIdxB1、bcwIdxB2。
[0363] 对于availableFlagA1、refIdxLXA1、predFlagLXA1和mvLXA1的推导过程:
[0364] –设置相邻亮度译码块内的亮度位置(xNbA1,yNbA1)等于(xCb‑1,yCb+cbHeight‑1)。
[0365] –使用以下信息调用条款6.4.4中指定的相邻块可用性的推导过程,设置为(xCb,yCb)的当前亮度位置(xCurr,yCurr)、相邻亮度位置(xNbA1,yNbA1)、设置为真的checkPredModeY、设置为0的cIdx作为输入,块可用标志availableA1作为输出。
[0366] –变量availableFlagA1、refIdxLXA1、predFlagLXA1、mvLXA1的推导方式如下:
[0367] –如果availableA1等于假,则设置availableFlagA1等于0,mvLXA1的两个分量都等于0,refIdxLXA1等于‑1,predFlagLXA1等于0,X为0或1以及bcwIdxA1等于0。
[0368] –否则,设置availableFlagA1为1,并进行以下赋值:
[0369] mvLXA1=MvLX[xNbA1][yNbA1]                             (8‑319)[0370] refIdxLXA1=RefIdxLX[xNbA1][yNbA1]                        (8‑320)[0371] predFlagLXA1=PredFlagLX[xNbA1][yNbA1]                    (8‑321)[0372] hpelIfIdxA1=HpelIfIdx[xNbA1][yNbA1]                        (8‑322)[0373] bcwIdxA1=BcwIdx[xNbA1][yNbA1]                           (8‑323)[0374] 对于availableFlagB1、refIdxLXB1、predFlagLXB1和mvLXB1的推导过程:
[0375] –设置相邻亮度译码块内的亮度位置(xNbB1,yNbB1)等于(xCb+cbWidth‑1,yCb‑1)。
[0376] –使用以下信息调用条款6.4.4中指定的相邻块可用性的调用过程:设置为(xCb,yCb)的当前亮度位置(xCurr,yCurr)、相邻亮度位置(xNbB1,yNbB1)、设置为真的checkPredModeY、设置为0的cIdx作为输入,块可用标志availableB1作为输出。
[0377] –变量availableFlagB1、refIdxLXB1、predFlagLXB1、mvLXB1的推导方式如下:
[0378] –如果以下条件中的一个或多个为真,则设置availableFlagB1等于0,mvLXB1的两个分量都等于0,refIdxLXB1等于‑1,predFlagLXB1等于0,X为0或1以及bcwIdxB1等于0:
[0379] –availableB1等于假,
[0380] –availableA1等于真,亮度位置(xNbA1,yNbA1)和(xNbB1,yNbB1)的运动矢量、参考索引、双向预测权重索引和半像素点插值滤波器索引都相同。
[0381] –否则,设置availableFlagB1为1,并进行以下赋值:
[0382] mvLXB1=MvLX[xNbB1][yNbB1]                             (8‑324)[0383] refIdxLXB1=RefIdxLX[xNbB1][yNbB1]                        (8‑325)[0384] predFlagLXB1=PredFlagLX[xNbB1][yNbB1]                    (8‑326)[0385] hpelIfIdxB1=HpelIfIdx[xNbB1][yNbB1]                        (8‑327)[0386] bcwIdxB1=BcwIdx[xNbB1][yNbB1]                           (8‑328)[0387] 对于availableFlagB0、refIdxLXB0、predFlagLXB0和mvLXB0的推导过程:
[0388] –设置相邻亮度译码块内的亮度位置(xNbB0,yNbB0)等于(xCb+cbWidth,yCb‑1)。
[0389] –使用以下信息调用条款6.4.4中指定的相邻块可用性的调用过程:设置为(xCb,yCb)的当前亮度位置(xCurr,yCurr)、相邻亮度位置(xNbB0,yNbB0)、设置为真的checkPredModeY、设置为0的cIdx作为输入,块可用标志availableB0作为输出。
[0390] –变量availableFlagB0、refIdxLXB0、predFlagLXB0、mvLXB0的推导方式如下:
[0391] –如果以下条件中的一个或多个为真,则设置availableFlagB0等于0,mvLXB0的两个分量都等于0,refIdxLXB0等于‑1,predFlagLXB0等于0,X为0或1以及bcwIdxB0等于0:
[0392] –availableB0等于假,
[0393] –availableB1等于真,亮度位置(xNbB1,yNbB1)和(xNbB0,yNbB0)的运动矢量、参考索引、双向预测权重索引和半像素点插值滤波器索引都相同,
[0394] –availableA1等于真,亮度位置(xNbA1,yNbA1)和(xNbB0,yNbB0)的运动矢量、参考索引、双向预测权重索引和半像素点插值滤波器索引都相同,且MergeTriangleFlag[xCb][yCb]等于1。
[0395] –否则,设置availableFlagB0为1,并进行以下赋值:
[0396] mvLXB0=MvLX[xNbB0][yNbB0]                             (8‑329)[0397] refIdxLXB0=RefIdxLX[xNbB0][yNbB0]                        (8‑330)[0398] predFlagLXB0=PredFlagLX[xNbB0][yNbB0]                    (8‑331)[0399] hpelIfIdxB0=HpelIfIdx[xNbB0][yNbB0]                        (8‑332)[0400] bcwIdxB0=BcwIdx[xNbB0][yNbB0]                           (8‑333)[0401] 对于availableFlagA0、refIdxLXA0、predFlagLXA0和mvLXA0的推导过程:
[0402] –设置相邻亮度译码块内的亮度位置(xNbA0,yNbA0)等于(xCb‑1,yCb+cbWidth)。
[0403] –使用以下信息调用条款6.4.4中指定的相邻块可用性的推导过程,设置为(xCb,yCb)的当前亮度位置(xCurr,yCurr)、相邻亮度位置(xNbA0,yNbA0)、设置为真的checkPredModeY、设置为0的cIdx作为输入,块可用标志availableA0作为输出。
[0404] –变量availableFlagA0、refIdxLXA0、predFlagLXA0、mvLXA0的推导方式如下:
[0405] –如果以下条件中的一个或多个为真,则设置availableFlagA0等于0,mvLXA0的两个分量都等于0,refIdxLXA0等于‑1,predFlagLXA0等于0,X为0或1以及bcwIdxA0等于0:
[0406] –availableA0等于假,
[0407] –availableA1等于真,亮度位置(xNbA1,yNbA1)和(xNbA0,yNbA0)的运动矢量、参考索引、双向预测权重索引和半像素点插值滤波器索引都相同,
[0408] –availableB1等于真,亮度位置(xNbB1,yNbB1)和(xNbA0,yNbA0)的运动矢量、参考索引、双向预测权重索引和半像素点插值滤波器索引都相同,且MergeTriangleFlag[xCb][yCb]等于1,
[0409] –availableB0等于真,亮度位置(xNbB0,yNbB0)和(xNbA0,yNbA0)的运动矢量、参考索引、双向预测权重索引和半像素点插值滤波器索引都相同,且MergeTriangleFlag[xCb][yCb]等于1。
[0410] –否则,设置availableFlagA0为1,并进行以下赋值:
[0411] mvLXA0=MvLX[xNbA0][yNbA0]                            (8‑334)[0412] refIdxLXA0=RefIdxLX[xNbA0][yNbA0]                       (8‑335)[0413] predFlagLXA0=PredFlagLX[xNbA0][yNbA0]                   (8‑336)[0414] hpelIfIdxA0=HpelIfIdx[xNbA0][yNbA0]                        (8‑337)[0415] bcwIdxA0=BcwIdx[xNbA0][yNbA0]                           (8‑338)[0416] 对于availableFlagB2、refIdxLXB2、predFlagLXB2和mvLXB2的推导过程:
[0417] –设置相邻亮度译码块内的亮度位置(xNbB2,yNbB2)等于(xCb‑1,yCb‑1)。
[0418] –使用以下信息调用条款6.4.4中指定的相邻块可用性的调用过程:设置为(xCb,yCb)的当前亮度位置(xCurr,yCurr)、相邻亮度位置(xNbB2,yNbB2)、设置为真的checkPredModeY、设置为0的cIdx作为输入,块可用标志availableB2作为输出。
[0419] –变量availableFlagB2、refIdxLXB2、predFlagLXB2、mvLXB2的推导方式如下:
[0420] –如果以下条件中的一个或多个为真,则设置availableFlagB2等于0,mvLXB2的两个分量都等于0,refIdxLXB2等于‑1,predFlagLXB2等于0,X为0或1以及bcwIdxB2等于0:
[0421] ‑availableB2等于假,
[0422] ‑availableA1等于真,亮度位置(xNbA1,yNbA1)和(xNbB2,yNbB2)的运动矢量、参考索引、双向预测权重索引和半像素点插值滤波器索引都相同,
[0423] ‑availableB1等于真,亮度位置(xNbB1,yNbB1)和(xNbB2,yNbB2)的运动矢量、参考索引、双向预测权重索引和半像素点插值滤波器索引都相同,
[0424] ‑availableB0等于真,亮度位置(xNbB0,yNbB0)和(xNbB2,yNbB2)的运动矢量、参考索引、双向预测权重索引和半像素点插值滤波器索引都相同,且MergeTriangleFlag[xCb][yCb]等于1,
[0425] ‑availableA0等于真,亮度位置(xNbA0,yNbA0)和(xNbB2,yNbB2)的运动矢量、参考索引、双向预测权重索引和半像素点插值滤波器索引都相同,且MergeTriangleFlag[xCb][yCb]等于1,
[0426] ‑availableFlagA0+availableFlagA1+availableFlagB0+availableFlagB1=4,且MergeTriangleFlag[xCb][yCb]等于0。
[0427] ‑否则,设置availableFlagB2为1,并进行以下赋值:
[0428] mvLXB2=MvLX[xNbB2][yNbB2]                             (8‑339)[0429] refIdxLXB2=RefIdxLX[xNbB2][yNbB2]                        (8‑340)[0430] predFlagLXB2=PredFlagLX[xNbB2][yNbB2]                    (8‑341)[0431] hpelIfIdxB2=HpelIfIdx[xNbB2][yNbB2]                        (8‑342)[0432] bcwIdxB2=BcwIdx[xNbB2][yNbB2]                           (8‑343)[0433] 8.5.2.6基于历史的融合候选的推导过程
[0434] 该过程的输入是:
[0435] ‑融合候选列表mergeCandList;
[0436] ‑列表numCurrMergeCand中可用融合候选的数量。
[0437] 该过程的输出是:
[0438] ‑修改后的融合候选列表mergeCandList;
[0439] ‑修改后的列表numCurrMergeCand中融合候选的数量。
[0440] 变量isPrunedA1和isPrunedB1都设置为假。
[0441] 对于HmvpCandList[hMvpIdx]中索引hMvpIdx=1..NumHmvpCand的每个候选,重复以下有序步骤,直到numCurrMergeCand等于MaxNumMergeCand‑1:
[0442] 1.变量sameMotion的推导过程如下:
[0443] ‑任一融合候选N(N为A1或B1),如果以下条件中的任一条件为真,则sameMotion和isPrunedN均设置为真:
[0444] ‑hMvpIdx小于或等于2,
[0445] ‑其中,候选HmvpCandList[NumHmvpCand‑hMvpIdx]等于融合候选N,具有相同的运动矢量、相同的参考索引、相同的双向预测权重索引和相同的半像素点插值滤波器索引,[0446] –isPrunedN等于假。
[0447] –否则,将sameMotion设置为假。
[0448] 2.当sameMotion等于假时,将候选HmvpCandList[NumHmvpCand‑hMvpIdx]添加到融合候选列表中,具体如下:
[0449] mergeCandList[numCurrMergeCand++]=HmvpCandList[NumHmvpCand‑hMvpIdx] (8‑381)
[0450] 8.5.2.16基于历史的运动矢量预测候选列表的更新过程
[0451] 该过程的输入是:
[0452] –1/16分数像素点精度的亮度运动矢量mvL0和mvL1;
[0453] –参考索引refIdxL0和refIdxL1;
[0454] –预测列表使用标志predFlagL0和predFlagL1;
[0455] –双向预测权重索引bcwIdx;
[0456] –半像素点插值滤波器索引hpelIfIdx。
[0457] MVP候选hMvpCand包括亮度运动矢量mvL0和mvL1、参考索引refIdxL0和refIdxL1、预测表使用标志predFlagL0和predFlagL1、双向预测权重索引bcwIdx以及半像素点插值滤波器索引hpelIfIdx。
[0458] 按以下有序步骤使用候选hMvpCand对候选列表HmvpCandList进行修改:
[0459] 1.设置变量identicalCandExist等于假,设置变量removeIdx等于0。
[0460] 2.当NumHmvpCand大于0时,对于hMvpIdx=0..NumHmvpCand‑1的每个索引hMvpIdx,进行以下步骤,直到identicalCandExist等于真:
[0461] –当hMvpCand等于HmvpCandList[hMvpIdx],具有相同的运动矢量,相同的参考索引、相同的双向预测权重索引和相同的半像素点插值滤波器索引时,设置identicalCandExist等于真,设置removeIdx等于hMvpIdx。
[0462] 3.候选列表HmvpCandList更新如下:
[0463] –如果identicalCandExist等于真或者NumHmvpCand等于5,则:
[0464] –对于i=(removeIdx+1)..(NumHmvpCand‑1)的每个索引i,设置HmvpCandList[i‑1]等于HmvpCandList[i]。
[0465] –设置HmvpCandList[NumHmvpCand‑1]等于hMvpCand。
[0466] –否则(identicalCandExist等于假且NumHmvpCand小于5),则:
[0467] –设置HmvpCandList[NumHmvpCand++]等于mvCand。
[0468] 下面描述处理HMVP融合候选(在VVC工作草案的顶部)的详细实施例的另一示例,增加下划线部分:
[0469] 8.5.2运动矢量分量和参考指数的推导过程
[0470] 8.5.2.1概述
[0471] 该过程的输入是:
[0472] –当前亮度译码块的左上像素点相对于当前图像的左上亮度像素点的亮度位置(xCb,yCb);
[0473] –变量cbWidth,表示当前译码块以亮度像素点计算的宽度;
[0474] –变量cbHeight,表示当前译码块以亮度像素点计算的高度。
[0475] 该过程的输出是:
[0476] –1/16分数像素点精度的亮度运动矢量mvL0[0][0]和mvL1[0][0];
[0477] –参考索引refIdxL0和refIdxL1;
[0478] –预测列表使用标志predFlagL0[0][0]和predFlagL1[0][0];
[0479] –半像素点插值滤波器索引hpelIfIdx;
[0480] –双向预测权重索引bcwIdx。
[0481] 设置变量LX为当前图像的RefPicList[X],X为0或1。
[0482] 为了推导变量mvL0[0][0]和mvL1[0][0]、refIdxL0和refIdxL1以及predFlagL0[0][0]和predFlagL1[0][0],则:
[0483] –如果general_merge_flag[xCb][yCb]等于1,使用以下信息调用条款8.5.2.2中指定的融合模式的亮度运动矢量的推导过程:亮度位置(xCb,yCb)、变量cbWidth和cbHeight作为输入,亮度运动矢量mvL0[0][0]、mvL1[0][0]、参考索引refIdxL0、refIdxL1、预测列表使用标志predFlagL0[0][0]和predFlagL1[0][0]、半像素点插值滤波器索引hpelIfIdx、双向预测权重索引bcwIdx和融合候选列表mergeCandList作为输出。
[0484] –否则:
[0485] –对于PRED_LX中的变量predFlagLX[0][0]、mvLX[0][0]和refIdxLX中的X被0或1替换,在语法元素ref_idx_lX和MvdLX中,进行以下有序步骤:
[0486] 5.变量refIdxLX和predFlagLX[0][0]的推导方式如下:
[0487] –如果inter_pred_idc[xCb][yCb]等于PRED_LX或PRED_BI,
[0488] refIdxLX=ref_idx_lX[xCb][yCb]                       (8‑292)
[0489] predFlagLX[0][0]=1                                 (8‑293)
[0490] –否则,指定变量refIdxLX和predFlagLX[0][0]如下:
[0491] refIdxLX=‑1                                          (8‑294)[0492] predFlagLX[0][0]=0                                 (8‑295)
[0493] 6.变量mvdLX的推导方式如下:
[0494] mvdLX[0]=MvdLX[xCb][yCb][0]                    (8‑296)
[0495] mvdLX[1]=MvdLX[xCb][yCb][1]                    (8‑297)
[0496] 7.当predFlagLX[0][0]等于1时,使用以下信息调用条款8.5.2.8中亮度运动矢量预测的推导过程:亮度译码块位置(xCb,yCb)、译码块宽度cbWidth、译码块高度cbHeight和变量refIdxLX作为输入,mvpLX作为输出。
[0497] 8.当predFlagLX[0][0]=1时,亮度运动矢量mvLX[0][0]的推导方式如下:
[0498] uLX[0]=(mvpLX[0]+mvdLX[0]+218)%218          (8‑298)
[0499] mvLX[0][0][0]=(uLX[0]>=217)?(uLX[0]‑218):uLX[0]           (8‑299)[0500] uLX[1]=(mvpLX[1]+mvdLX[1]+218)%218          (8‑300)
[0501] mvLX[0][0][1]=(uLX[1]>=217)?(uLX[1]‑218):uLX[1]          (8‑301)[0502] 注1–上述规定的mvLX[0][0][0]和mvLX[0][0][1]的结果值始终在‑217到217‑1的范围内(包括端值)。
[0503] –半像素点插值滤波器索引hpelIfIdx的推导方式如下:
[0504] hpelIfIdx=AmvrShift==3?1:0                       (8‑302)[0505] –设置双向预测权重索引bcwIdx等于bcw_idx[xCb][yCb]。
[0506] 当以下条件都为真时,设置refIdxL1=–1,predFlagL1=0,bcwIdx=0:
[0507] –predFlagL0[0][0]=1;
[0508] –predFlagL1[0][0]=1;
[0509] –(cbWidth+cbHeight)的值等于12。
[0510] 使用以下信息调用条款8.5.2.16中指定的基于历史的运动矢量预测列表的更新过程:亮度运动矢量mvL0[0][0]和mvL1[0][0]、参考索引refIdxL0和refIdxL1、预测列表使用标志predFlagL0[0][0]和predFlagL1[0][0]、双向预测权重索引bcwIdx以及半像素点插值滤波器索引hpelIfIdx。
[0511] 8.5.2.6基于历史的融合候选的推导过程
[0512] 该过程的输入是:
[0513] –融合候选列表mergeCandList;
[0514] –列表numCurrMergeCand中可用融合候选的数量。
[0515] 该过程的输出是:
[0516] –修改后的融合候选列表mergeCandList;
[0517] –修改后的列表numCurrMergeCand中融合候选的数量。
[0518] 变量isPrunedA1和isPrunedB1都设置为假。
[0519] 对于HmvpCandList[hMvpIdx]中索引hMvpIdx=1..NumHmvpCand的每个候选,重复以下有序步骤,直到numCurrMergeCand等于MaxNumMergeCand‑1:
[0520] 3.变量sameMotion的推导过程如下:
[0521] –任一融合候选N(N为A1或B1),如果以下条件中的任一条件为真,则sameMotion和isPrunedN均设置为真:
[0522] –hMvpIdx小于或等于2,
[0523] –候选candidate HmvpCandList[NumHmvpCand‑hMvpIdx]和融合候选N的运动矢量和参考索引都相同,
[0524] –isPrunedN等于假。
[0525] –否则,将sameMotion设置为假。
[0526] 4.当sameMotion等于假时,将候选HmvpCandList[NumHmvpCand‑hMvpIdx]添加到融合候选列表中,具体如下:
[0527] mergeCandList[numCurrMergeCand++]=HmvpCandList[NumHmvpCand‑hMvpIdx] (8‑381)
[0528] 8.5.2.16基于历史的运动矢量预测候选列表的更新过程
[0529] 该过程的输入是:
[0530] –1/16分数像素点精度的亮度运动矢量mvL0和mvL1;
[0531] –参考索引refIdxL0和refIdxL1;
[0532] –预测列表使用标志predFlagL0和predFlagL1;
[0533] –双向预测权重索引bcwIdx;
[0534] –半像素点插值滤波器索引hpelIfIdx。
[0535] MVP候选hMvpCand包括亮度运动矢量mvL0和mvL1、参考索引refIdxL0和refIdxL1、预测表使用标志predFlagL0和predFlagL1、双向预测权重索引bcwIdx以及半像素点插值滤波器索引hpelIfIdx。
[0536] 按以下有序步骤使用候选hMvpCand对候选列表HmvpCandList进行修改:
[0537] 4.设置变量identicalCandExist等于假,设置变量removeIdx等于0。
[0538] 5.当NumHmvpCand大于0时,对于hMvpIdx=0..NumHmvpCand‑1的每个索引hMvpIdx,进行以下步骤,直到identicalCandExist等于真:
[0539] –当hMvpCand和HmvpCandList[hMvpIdx]的运动矢量和参考索引都相同时,设置identicalCandExist等于真,removeIdx等于hMvpIdx。
[0540] 6.候选列表HmvpCandList更新如下:
[0541] –如果identicalCandExist等于真或者NumHmvpCand等于5,则:
[0542] –对于i=(removeIdx+1)..(NumHmvpCand‑1)的每个索引i,设置HmvpCandList[i‑1]等于HmvpCandList[i]。
[0543] –设置HmvpCandList[NumHmvpCand‑1]等于hMvpCand。
[0544] –否则(identicalCandExist等于假且NumHmvpCand小于5),则:
[0545] 设置HmvpCandList[NumHmvpCand++]等于mvCand。
[0546] 实施例和示例性实施例参考了各自的方法,并具有对应的装置。
[0547] 根据本发明的一个实施例,提供了一种用于确定当前块的运动信息的装置,包括:存储器和耦合到所述存储器的处理器;所述处理器用于执行根据本发明前述方面中任一方面所述的方法。
[0548] 图12为运动信息确定单元1200的示意图,所述运动信息确定单元1200分别包括存储器1201和处理器1202。
[0549] 根据本发明的一个实施例,提供了一种用于根据基于历史的运动矢量预测(history‑based motion vector predictor,HMVP)列表确定帧的当前块的运动信息的装置,包括:HMVP列表构建单元,用于构建所述HMVP列表,所述HMVP列表是N个基于历史的候选Hk(k=0……N–1)的有序列表,所述N个基于历史的候选与所述帧中所述当前块之前的N个先行块的运动信息关联,其中,N大于或等于1,每个基于历史的候选包括运动信息,所述运动信息包括以下元素:(1)一个或多个运动矢量(motion vectors,MV);(2)与所述MV对应的一个或多个参考图像索引;(3)一个或多个双向预测权重索引;HMVP添加单元,用于将所述HMVP列表中的一个或多个基于历史的候选添加到所述当前块的运动信息候选项列表中;运动信息推导单元,用于基于所述运动信息候选列表获取所述当前块的运动信息。
[0550] 图13为运动信息确定单元1200的示意图,所述运动信息确定单元1200还包括HMVP列表构建单元1301、HMVP添加单元1302和运动信息推导单元1303。
[0551] 根据本发明的一个实施例,提供了一种用于构建和更新基于历史的运动矢量预测(history‑based motion vector predictor,HMVP)列表的装置,包括:HMVP列表构建单元,用于构建所述HMVP列表,所述HMVP列表是N个基于历史的候选Hk(k=0……N–1)的有序列表,所述N个基于历史的候选与所述帧中所述当前块之前的N个先行块的运动信息关联,其中,N大于或等于1,每个基于历史的候选包括运动信息,所述运动信息包括以下元素:(1)一个或多个运动矢量(motion vectors,MV);(2)与所述MV对应的一个或多个参考图像索引;(3)一个或多个双向预测权重索引;运动信息比较单元,用于将所述HMVP列表的每个基于历史的候选的至少一个元素与所述当前块的对应元素进行比较;运动信息添加单元,用于在比较所述HMVP列表的每个基于历史的候选的至少一个元素与所述当前块的对应元素不同时,将所述当前块的运动信息添加到所述HMVP列表中。
[0552] 图14为HMVP列表更新单元1400的示意图,所述HMVP列表更新单元1400包括HMVP列表构建单元1301、运动信息比较单元1401和运动信息添加单元1402。
[0553] 根据本发明的一个实施例,提供了一种计算机程序产品,包括用于执行本发明任一上述方面所述的方法的程序代码。
[0554] 在一个或多个示例中,所描述的功能可以以硬件、软件、固件或其任何组合实现。如果以软件实现,则这些功能可以作为一个或多个指令或代码存储在计算机可读介质上或经由计算机可读介质发送,并由基于硬件的处理单元执行。计算机可读介质可包括计算机可读存储介质,对应于有形介质,例如数据存储介质,或包括任何促进将计算机程序从一处传送到另一处的介质(例如根据通信协议)的通信介质。以此方式,计算机可读介质通常可以对应(1)非瞬时性的有形计算机可读存储介质,或(2)信号或载波等通信介质。数据存储介质可为可由一个或多个计算机或一个或多个处理器存取以检索用于实现本申请中描述的技术的指令、代码和/或数据结构的任何可用介质。计算机程序产品可以包括计算机可读介质。
[0555] 作为示例而非限制,这类计算机可读存储介质可以包括RAM、ROM、EEPROM、CD‑ROM或其它光盘存储器、磁盘存储器或其它磁性存储设备、闪存或可用于存储指令或数据结构形式的所需程序代码并且可由计算机访问的任何其它介质。此外,任何连接都可以被适当地定义为电脑可读介质。例如,如果软件是从一个网站站点、服务器或其它远程资源通过一个同轴电缆、光缆、双绞线、数字用户线(digital subscriber line,DSL)或以例如红外、无线和微波等无线方式发送的,也被包含在所定义的介质中。但是,应理解,所述计算机可读存储介质和数据存储介质并不包括连接、载波、信号或其它瞬时性介质,而是实际上针对于非瞬时性有形存储介质。本文中使用的磁盘(disk)和光盘(disc)包括压缩磁盘(compact disc,CD)、镭射盘、光盘、数字多功能光盘(digital versatile disc,DVD)、软盘和蓝光光盘,磁盘通常以磁性复制数据,而光盘通常以激光进行光学复制数据。上述的组合也可以包括在电脑可读介质范畴中。
[0556] 可通过一个或多个数字信号处理器(digital signal processor,DSP)、通用微处理器、专用集成电路(application specific integrated circuit,ASIC)、现场可编程逻辑阵列(field programmable logic array,FPGA)或其它等效集成或离散逻辑电路等一个或多个处理器来执行指令。因此,如本文中所使用的术语“处理器”可指前述结构或适合于实现本文中所描述的技术的任一其它结构中的任一者。另外,在一些方面中,本文描述的各种功能可以提供在用于编码和解码的专用硬件和/或软件模块内,或者并入到组合编解码器中。而且,所述技术可以完全在一个或多个电路或逻辑元件中实现。
[0557] 本发明的技术可以在多种设备或装置中实现,这些设备或装置包括无线手机、集成电路(integrated circuit,IC)或一组IC(例如芯片组)。本申请中描述各种组件、模块或单元是为了强调用于执行所公开技术的装置的功能方面,但未必需要由不同硬件单元实现。实际上,如上所述,各种单元可以结合合适的软件和/或固件组合在编解码器硬件单元中,或者通过互操作硬件单元(包括如上所述的一个或多个处理器)的集合来提供。
[0558] 总之,本发明涉及视频编码和解码,尤其涉及使用基于历史的运动矢量预测(history‑based motion vector predictor,HMVP)列表确定当前块的运动信息。构建HMVP列表,所述HMVP列表是N个HMVP候选Hk(k=0……N–1)的有序列表,所述N个HMVP候选与帧中所述当前块之前的N个先行块的运动信息关联。每个HMVP候选具有运动信息,所述运动信息包括:一个或多个运动矢量(motion vector,MV)、与所述MV对应的一个或多个参考图像索引以及一个或多个双向预测权重索引。HMVP列表中的一个或多个HMVP候选添加到当前块的运动信息候选列表中。基于所述运动信息候选列表获取所述当前块的运动信息。还通过将所述HMVP列表的每个基于历史的候选的至少一个元素与所述当前块的对应元素进行比较来更新所述HMVP。当至少一个HMVP元素与所述当前块的对应元素不同时,所述当前块的所述运动信息添加到所述HMVP列表中。
[0559] 其它实施例总结在以下实施例中:
[0560] 实施例1:一种双向预测权重索引的推导方法,其中,包括:
[0561] 构建基于历史的运动信息列表(history‑based motion information list,HMVL),所述HMVL列表是N个运动记录Hk(k=0……N–1)的有序列表,所述N个运动记录与帧的N个先行块相关联,其中,N大于或等于1,如果所述运动记录包括多个运动矢量,则所述每个运动记录包括一个或多个运动矢量、与所述运动矢量对应的一个或多个参考图像索引以及一个或多个双向预测权重索引;
[0562] 根据所述基于历史的运动信息列表,为当前块构建基于历史的运动信息候选。
[0563] 实施例2:根据实施例1所述的方法,其中,根据所述基于历史的运动信息列表为当前块构建基于历史的运动信息候选包括:
[0564] 为基于历史的运动信息列表记录Hk对应的基于历史的运动信息候选中的候选设置双向预测权重索引,作为所述记录Hk的权重索引。
[0565] 实施例3:根据实施例1所述的方法,其中,所述基于历史的运动信息列表中的运动记录按照从码流中获取所述先行块的运动记录的顺序进行排序。
[0566] 实施例4:根据实施例1所述的方法,其中,所述基于历史的运动信息列表的长度为N,N为6或5。
[0567] 实施例5:根据实施例1所述的方法,其中,构建基于历史的运动信息列表(history‑based motion information list,HMVL)包括:
[0568] 在将当前块的运动信息添加到HMVL之前,检查HMVL的每个元素是否与当前块的运动信息不同;
[0569] 只有当HMVL的每个元素都与当前块的运动信息不同时,才将当前块的运动信息添加到HMVL中。
[0570] 实施例6:根据实施例5所述的方法,其中,检查HMVL的每个元素是否与当前块的运动信息不同包括:
[0571] 比较对应的运动矢量;
[0572] 比较对应的参考图像索引。
[0573] 实施例7:根据实施例5所述的方法,其中,检查HMVL的每个元素是否与当前块的运动信息不同包括:
[0574] 比较对应的运动矢量;
[0575] 比较对应的参考图像索引;
[0576] 比较双向预测权重索引。
[0577] 实施例8:根据实施例1至7中任一项所述的方法,其中,为当前块构建候选运动信息集包括:
[0578] 推导第一块的运动信息中的运动信息,所述第一块与所述当前块具有预设的空间或时间位置关系。
[0579] 实施例9:根据实施例1至7中任一项所述的方法,其中,为当前块构建候选运动信息集包括:
[0580] 推导第二块的运动信息中的运动信息,所述第二块是在所述当前块之前构建的。
[0581] 实施例10:根据实施例1至9中任一项所述的方法,其中,根据所述基于历史的运动信息列表为当前块构建基于历史的运动信息候选包括:
[0582] 检查所构建的基于历史的运动信息候选(基于历史的运动信息列表记录Hk)是否与候选运动信息列表中的元素的某些(预定义)子集不同;
[0583] 仅当基于历史的运动信息候选(基于历史的运动信息列表记录Hk)与候选运动信息列表中的元素的某些(预定义)子集不同时,才使用基于历史的运动信息候选。
[0584] 实施例11:根据实施例10所述的方法,其中,检查所构建的基于历史的运动信息候选(基于历史的运动信息列表记录Hk)是否与候选运动信息列表中的元素的某些(预定义)子集不同包括:
[0585] 比较对应的运动矢量;
[0586] 比较对应的参考图像索引。
[0587] 实施例12:根据实施例10所述的方法,其中,检查所构建的基于历史的运动信息候选(基于历史的运动信息列表记录Hk)是否与候选运动信息列表中的元素的某些(预定义)子集不同包括:
[0588] 比较对应的运动矢量;
[0589] 比较对应的参考图像索引;
[0590] 比较双向预测权重索引。
[0591] 实施例13:根据实施例10至12中任一项所述的方法,其中,候选运动信息列表是融合候选列表。
[0592] 实施例14:根据实施例1至13中任一项所述的方法,特别是权利要求1至9中任一项所述的方法,其中,基于历史的运动信息候选集是所述当前块处于融合模式时,所述当前块的候选运动信息列表的子集,或者是所述当前块处于AMVP模式时,所述当前块的候选预测运动信息列表的子集。
[0593] 实施例15:一种当前块的运动信息推导方法,其中,包括:
[0594] 构建运动信息列表,包括:
[0595] 获取第一块和第二块的运动信息,所述第一块和第二块与所述当前块具有预设的空间或时间位置关系;
[0596] 将所述第一块的运动信息添加到所述运动信息列表中;
[0597] 在将所述第二块的运动信息添加到所述运动信息列表中之前,检查所述第一块的双向预测权重索引是否等于所述第二块的双向预测权重索引;
[0598] 仅当所述第一块的双向预测权重索引不等于所述第二块的双向预测权重索引时,将所述第二块的运动信息添加到所述运动信息列表中;
[0599] 从码流中获取运动信息候选索引;
[0600] 根据所构建的运动信息候选项和所获取的运动信息候选索引,推导所述当前块的运动信息。
[0601] 实施例16:根据实施例15所述的方法,其中,运动信息列表是融合候选列表。
[0602] 实施例17:根据实施例15和16中任一项所述的方法,其中,运动信息包括以下至少一项:
[0603] 一个或多个运动矢量;
[0604] 一个或多个参考索引;
[0605] 双向预测权重索引
[0606] 实施例18:根据实施例15和16中任一项所述的方法,其中,运动信息包括以下至少一项:
[0607] 一个或多个运动矢量;
[0608] 一个或多个参考索引;
[0609] 双向预测权重索引;或
[0610] 插值滤波器索引。
[0611] 实施例19:一种构建候选运动信息集的装置,其中,包括:
[0612] 存储器和耦合到所述存储器的处理器;
[0613] 所述处理器用于执行权利要求1至18中任一项所述的方法,特别是权利要求1至9和14中任一项所述的方法。
[0614] 附图标记列表
[0615] 图1A
[0616] 10               视频译码系统
[0617] 12               源设备
[0618] 13               通信信道
[0619] 14               目的地设备
[0620] 16               图像源
[0621] 17               图像数据
[0622] 18               预处理器
[0623] 19               预处理图像数据
[0624] 20               视频编码器
[0625] 21               经编码图像数据
[0626] 22               通信接口
[0627] 28               通信接口
[0628] 30               视频解码器
[0629] 31               经解码图像数据
[0630] 32               后处理器
[0631] 33               后处理图像数据
[0632] 34               显示设备
[0633] 图1B
[0634] 40               视频译码系统
[0635] 41               成像设备
[0636] 42               天线
[0637] 43               处理器
[0638] 44               存储器
[0639] 45               显示设备
[0640] 46               处理电路
[0641] 20               视频编码器
[0642] 30               视频解码器
[0643] 图2
[0644] 17               图像(数据)
[0645] 19               预处理图像(数据)
[0646] 20               编码器
[0647] 21               经编码图像数据
[0648] 201              输入(接口)
[0649] 204              残差计算[单元或步骤]
[0650] 206              变换处理单元
[0651] 208              量化单元
[0652] 210              反量化单位
[0653] 212              逆变换处理单元
[0654] 214              重建单元
[0655] 220              环路滤波器
[0656] 230              解码图像缓冲器(DPB)
[0657] 260              模式选择单位
[0658] 270              熵编码单元
[0659] 272              输出(接口)
[0660] 244              帧间预测单位
[0661] 254              帧内预测单位
[0662] 262              分割单元
[0663] 203              图像块
[0664] 205              残差块
[0665] 213              重建残差块
[0666] 215              重建块
[0667] 221              滤波块
[0668] 231              解码图像
[0669] 265              预测块
[0670] 266              语法元素
[0671] 207              变换系数
[0672] 209              量化系数
[0673] 211              解量化系数
[0674] 图3
[0675] 21               经编码图像数据
[0676] 30               视频解码器
[0677] 304              熵解码单元
[0678] 309              量化系数
[0679] 310              反量化单位
[0680] 311              解量化系数
[0681] 312              逆变换处理单元
[0682] 313              重建残差块
[0683] 314              重建单元
[0684] 315              重建块
[0685] 320              环路滤波器
[0686] 321              滤波块
[0687] 330              解码图像缓冲器(DPB)
[0688] 331              解码图像
[0689] 360              模式应用单位
[0690] 365              预测块
[0691] 366              语法元素
[0692] 344              帧间预测单位
[0693] 354              帧内预测单位
[0694] 图4
[0695] 400              视频译码设备
[0696] 410              入端口/输入端口
[0697] 420              接收器单元(Rx)
[0698] 430              处理器
[0699] 440              发送器单元(Tx)
[0700] 450              出端口/输出端口
[0701] 460              存储器
[0702] 470              译码模块
[0703] 图5
[0704] 500              源设备或目的地设备
[0705] 502              处理器
[0706] 504              存储器
[0707] 506              代码和数据
[0708] 508              操作系统
[0709] 510              应用程序
[0710] 512              总线
[0711] 518              显示器
[0712] 图10
[0713] 1000             运动信息确定方法的流程图
[0714] 图11
[0715] 1100             HMVP列表更新方法的流程图
[0716] 图12
[0717] 1200             运动信息确定单元
[0718] 1201             存储器
[0719] 1202             处理器
[0720] 图13
[0721] 1200             运动信息确定单元
[0722] 1301             HMVP列表构建单元
[0723] 1302             HMVP添加单元
[0724] 1303             运动信息推导单元
[0725] 图14
[0726] 1400             HMVP列表更新单元
[0727] 1301             HMVP列表构建单元
[0728] 1401             运动信息比较单元
[0729] 1402             运动信息添加单元
[0730] 缩略语和术语定义
[0731] HEVC‑High Efficiency Video Coding 高效视频译码
[0732] CTU              Coding tree unit 译码树单元
[0733] LCU              Largest coding unit 最大译码单元
[0734] CU               Coding unit 译码单元
[0735] MV               Motion vector 运动矢量
[0736] MVP              Motion vector prediction 运动矢量预测
[0737] MVCL             Motion vector candidates list 运动矢量候选列表[0738] HMVP             History‑based motion vector list 基于历史的运动矢量列表
[0739] HMVP             History‑based motion vector prediction 基于历史的运动矢量预测
[0740] AMVP             Advanced motion vector prediction 高级运动矢量预测[0741] LUT              Lookup table 查找表
[0742] FIFO             First‑In‑First‑Out 先进先出
[0743] TMVP             Temporal motion vector prediction 时间运动矢量预测[0744] GBi              Generalized bi‑prediction 广义的双向预测
[0745] RDO              Rate‑distortion optimization 率失真优化
[0746] BCW              Bi‑prediction weight index 双向预测权重索引