在HEVC中,只有平动模型被用于运动补偿预测。然而在真实世界中,有各种各样的运动,比如放大/缩小,旋转,透视运动和其他非规则运动。

JEM中简化的仿射运动补偿预测

在JEM中,使用了一个简化的仿射运动补偿预测。如下图所示,一个块的仿射运动域由两个运动矢量表示。
H.266帧间预测:仿射运动预测

一个块的运动矢量域(MVF)表示如下:
H.266帧间预测:仿射运动预测
其中(v0x,v0y)是左上中心控制点的运动矢量,(v1x,v1y)是右上中心控制点的运动矢量。

为了进一步简化运动补偿预测,使用了基于仿射变换预测的子块。子块尺寸为MxN通过下式推导:
H.266帧间预测:仿射运动预测
上式推导得到的M和N,如果需要应该分别向下调整,使其成为w和h的除数。其中MvPre是运动矢量的亚像素精度(JEM中为1/16),(v2x,v2y)为左下控制点的运动矢量,可以根据等式15计算得到。

为了推导每个MxN子块的运动矢量,每个子块的中心采样的运动矢量如下图所示,根据等式15计算,并取整到1/16精度,然后进行运动补偿。
H.266帧间预测:仿射运动预测

在运动补偿之后,每个子块的高精度运动矢量被取整,保留和标准运动矢量相同的精度。

JEM中的两种仿射运动模式

在JEM中,有两种仿射运动模式:AF_INTER和AF_MERGE。

AF_INTER

对于宽高都大于8的CU,可以使用AF_INTER。一个CU级别的仿射flag被传输来标识是否使用AF_INTER。AF_INTER中,候选列表中运动矢量对{(v0,v1)|v0={vA,vB,vc},v1={vD,vE}}通过使用如下图的邻近块构建。
H.266帧间预测:仿射运动预测
v0从A,B或C的运动矢量中选出,来自邻近块的运动矢量根据参考列表以及邻近块参考帧POC、当前CU参考帧POC和当前CU的POC之间的关系进行放缩。v1以相似的方法从邻近块D和E中进行选择。如果候选列表数小于2时,用复制AMVP候选组成运动矢量对进行填充。当候选列表大于2时,候选首先根据邻近运动矢量的连续性(一对候选中两个矢量的相似度)进行存储,只存储前两个候选。RD代价检测被用于决定选择那一对运动矢量对候选作为当前CU的控制点运动矢量预测(CPMVP)。比特流中传输一个索引表示CPMVP在候选列表中的位置。在当前仿射CU的CPMVP确定后,应用仿射运动估计,并找到控制点运动矢量(CPMV)。比特流传输CPMV和CPMVP的残差。

AF_MERGE

当一个CU使用AF_MERGE模式时,它首先从邻近重构块获取第一个使用仿射模式的编码块。候选块的选择顺序为左A->上B->右上C->左下D->左上E如下图a所示。
H.266帧间预测:仿射运动预测

为了确定当前CU是否以AF_MERGE模式编码,比特流中传输一个仿射flag,此时至少有一个邻近块以仿射模式编码。

总结

JEM中加入了两种仿射运动预测,可以对更多运动情形更准确的进行运动估计。仿射运动预测首先会根据左上和右上控制点求得左下控制点运动矢量,然后推导得到子块尺寸MxN,最后根据左上和右上控制点计算每个子块的运动矢量。

相关文章: