在HEVC中,仅应用平移运动模型来进行运动补偿预测(MCP)。 在现实世界中,运动有很多种,例如放大/缩小、旋转、透视运动和其他不规则运动。 在VVC中,应用基于块的仿射变换运动补偿预测。 如图27所示,块的仿射运动场由两个控制点(4参数)或三个控制点运动矢量(6参数)的运动信息来描述。

对于 4 参数仿射运动模型,块中样本位置 (x, y) 处的运动矢量导出为:

对于 6 参数仿射运动模型,块中样本位置 (x, y) 处的运动矢量导出为:

其中,(mv0x,mv0y)是左上角控制点的运动矢量,(mv1x,mv1y)是右上角控制点运动矢量,以及(mv2x,mv2y)是左下角控制点运动矢量。
为了简化运动补偿预测,应用基于块的仿射变换预测。 为了导出每个 4×4 亮度子块的运动矢量,根据上述方程计算每个子块的中心样本的运动矢量(如图 28 所示),并四舍五入到 1/16 分数精度。 然后应用运动补偿插值滤波器来生成具有导出的运动矢量的每个子块的预测。 色度分量的子块大小也设置为4×4。 4×4 色度子块的 MV 计算为对应 8×8 亮度区域中左上和右下亮度子块 MV 的平均值。

与平移运动帧间预测一样,也有两种仿射运动帧间预测模式:仿射Merge模式和仿射 AMVP 模式。
Affine merge prediction
AF_MERGE模式可以应用于宽度和高度都大于或等于8的CU。在该模式下,当前CU的CPMV是基于空间相邻CU的运动信息生成的。 最多可以有五个 CPMVP 候选者,并且用信号发送索引来指示要用于当前 CU 的候选者。 以下三种类型的 CPMV 候选用于形成仿射合并候选列表:
- 从相邻 CU 的 CPMV 推断的继承仿射merge候选
- 使用相邻 CU 的平移 MV 导出的构造仿射merge候选 CPMVP
- 零 MV
在VVC中,最多有两个继承仿射候选,它们是从相邻块的仿射运动模型导出的,一个来自左相邻CU,一个来自上相邻CU。 候选块如图29所示。对于左侧预测器,扫描顺序为A0->A1,对于上面的预测器,扫描顺序为B0->B1->B2。 仅选择双方的第一个继承候选人。 在两个继承的候选者之间不执行修剪检查。 当识别出相邻仿射CU时,其控制点运动矢量用于导出当前CU的仿射merge列表中的CPMVP候选者。 如图30所示,若将相邻左下块A采用仿射方式编码,则得到包含块A的CU的左上角、右上角和左下角的运动矢量v2、v3和v4。 当块A采用4参数仿射模型编码时,根据v2、v3计算当前CU的两个CPMV。 如果块A采用6参数仿射模型编码,则根据v2、v3和v4计算当前CU的三个CPMV。


构造仿射候选是指通过组合每个控制点的邻近平移运动信息来构造候选。 控制点的运动信息是从图 31 中所示的指定空间邻居和时间邻居导出的。CPMVk (k=1,2,3,4) 表示第 k 个控制点。 对于 CPMV1,检查 B2->B3->A2 块并使用第一个可用块的 MV。 对于 CPMV2,检查 B1->B0 块,对于 CPMV3,检查 A1->A0 块。 对于 TMVP,如果可用,则用作 CPMV4。

获得四个控制点的 MV 后,基于这些运动信息构建仿射merge候选者。 使用以下控制点 MV 组合按顺序构建:
{CPMV1, CPMV2, CPMV3}, {CPMV1, CPMV2, CPMV4}, {CPMV1, CPMV3, CPMV4},
{CPMV2, CPMV3, CPMV4}, { CPMV1, CPMV2}, { CPMV1, CPMV3}
3 个 CPMV 的组合构造了 6 参数仿射合并候选,2 个 CPMV 的组合构造了 4 参数仿射合并候选。 为了避免运动缩放过程,如果控制点的参考索引不同,则丢弃控制点MV的相关组合。
在检查继承的仿射合并候选者和构造的仿射合并候选者之后,如果列表仍然未满,则将零个MV插入到列表的末尾。
Affine AMVP prediction
仿射 AMVP 模式可应用于宽度和高度都大于或等于 16 的 CU。在比特流中用信号发送 CU 级别中的仿射标志以指示是否使用仿射 AMVP 模式,然后用信号发送另一个标志以指示是否使用 4 参数仿射或 6 参数仿射。 在此模式下,当前 CU 的 CPMV 与其预测器 CPMVP 的差异在比特流中用信号表示。 仿射AVMP候选列表大小为2,它是按顺序使用以下四种类型的CPVM候选生成的:
- 从相邻 CU 的 CPMV 推断的继承仿射 AMVP 候选者
- 使用相邻 CU 的平移 MV 导出的仿射 AMVP 候选 CPMVP
- 来自邻近 CU 的平移 MV
- 零 MV
继承的仿射 AMVP 候选的检查顺序与继承的仿射merge候选的检查顺序相同。 唯一的区别在于,对于 AVMP 候选者,仅考虑与当前块中具有相同参考图片的仿射 CU。 将继承的仿射运动预测器插入候选列表时,不应用修剪过程。
构造的 AMVP 候选是从图 31 中所示的指定空间邻居导出的。使用与仿射merge候选构造中相同的检查顺序。 另外,还检查相邻块的参考图片索引。 使用检查顺序中经过帧间编码且具有与当前 CU 中相同的参考图片的第一个块。 只有一个当当前CU采用4参数仿射模式编码,并且mv0和mv1都可用时,将它们作为一个候选添加到仿射AMVP列表中。 当当前CU采用6参数仿射模式编码并且所有三个CPMV都可用时,它们被添加为仿射AMVP列表中的一个候选者。 否则,构建的 AMVP 候选者将被设置为不可用。
如果插入有效的继承仿射 AMVP 候选和构造 AMVP 候选后,仿射 AMVP 列表候选仍然小于 2,则将依次添加 mv0 、 mv1 和 mv2 作为平移 MV 来预测当前 CU 的所有控制点 MV, 有空的时候。 最后,如果仿射AMVP列表仍未满,则使用零MV来填充该列表。
Affine motion information storage
在 VVC 中,仿射 CU 的 CPMV 存储在单独的缓冲区中。 存储的CPMV仅用于为最近编码的CU以仿射Merge模式和仿射AMVP模式生成继承的CPMVP。 从 CPMV 导出的子块 MV 用于运动补偿、平移 MV 的Merge/AMVP 列表的 MV 导出以及去块。
为了避免附加 CPMV 的图像行缓冲区,来自上面 CTU 的 CU 的仿射运动数据继承与来自正常相邻 CU 的继承的处理方式不同。 如果用于仿射运动数据继承的候选CU位于上述CTU行中,则使用行缓冲器中的左下和右下子块MV而不是CPMV来进行仿射MVP推导。 这样,CPMV仅存储在本地缓冲区中。 如果候选CU是6参数仿射编码,则仿射模型退化为4参数模型。 如图 32 所示,沿着顶部 CTU 边界,CU 的左下和右下子块运动向量用于底部 CTU 中 CU 的仿射继承。
