1、仿射运动补偿预测
HEVC中,运动补偿预测MCP仅采用平移运动模型。而在现实世界中,有很多种运动,比如放大/缩小、旋转、透视等不规则运动。在VTM中,采用了基于块的仿射变换运动补偿预测方法。如图所示,通过两个控制点(4参数)或三个控制点运动向量CPMV(6参数)来描述块的仿射运动场MF。
实际上Affine模式使用2组或者3组运动矢量来描述一个块的运动信息,块内每个点的运动矢量可以通过以下公式计算:
4参数:
6参数:
为了简化计算VTM中将编码块划分为4x4子块(色度块也是4x4),分块计算每个子块的运动矢量,如下图所示。
跟平移运动帧间预测相同,affine模式也有两种模式:merge模式和AMVP模式。
2、Affine merge模式
merge模式用于宽高均大于8的块,产生长度为5的候选列表,编码时仅传输CPMV在列表中的索引。merge候选列表的构造顺序为:
1、继承自CU相邻位置的CPMVs。
2、利用旁边CU的平移MV构造CPMVs。
3、0 MVs
2.1、 继承
首先,如果CU左侧和上册都有affine模式,最多可以得到两个CPMV加入候选列表。左侧搜索顺序是下图中A0->A1,上侧搜索顺序是B0->B1->B2,只有第一个满足条件的块会加入到候选列表。
2.2、构造
用CPMVk表示第k个控制点,搜索CU周边的MV,搜索MV顺序为:
CPMV1:B2->B3->A2
CPMV2:B1->B0
CPMV3:A1->A0
CPMV4:T,使用TMVP(如果可用)
6参数CPMV按以下顺序构造:
{CPMV1, CPMV2, CPMV3}, {CPMV1, CPMV2, CPMV4}, {CPMV1, CPMV3, CPMV4},{CPMV2, CPMV3, CPMV4}
4参数CPMV按以下顺序构造:
{ CPMV1, CPMV2}, { CPMV1, CPMV3}
2.3、0 MVs
当使用继承和构造两种方法后,候选列表仍然未满,使用0来填充生于位置。
3、Affine AMVP模式
Affine AMVP可以在长宽都大于16的块使用。这种模式下,预测值 CPMVPs在候选列表中的索引,以及它和运动搜索到的实际运动信息 CPMVs的差值会被传输。候选列表长度为2,建立顺序为:
1、继承自CU相邻位置的CPMVs。
2、利用旁边CU的平移MV构造CPMVs。
3、直接使用旁边CU的平移MV。
4、0 MVs。
继承的顺序与merge模式相同,区别是只考虑参考帧相同的CU。
构造的顺序同样与merge模式相同,同样只考虑参考帧相同的CU,注意此时只添加一个CPMVP到候选列表。
如果候选列表长度仍然小于2,使用相邻的平移MV填充mv0、mv1和mv2。
如果候选列表仍然未满,使用0填充。
4、Affine运动信息存储
在VTM中,CPMV被单独存储,只用来产生merge和AMVP中的继承CPMVPs。子块的MV用CPMV计算,用来进行运动补偿、平移MV候选列表构造和解码。
从上方CTU获取affine运动信息更加困难,因此如果CU的affine运动信息继承自上方的CTU行,改用上方CU左下子块和右下子块的MV来代替CPMV来进行预测,如下图所示。