子CU级别的运动矢量预测 Sub-CU based motion vector prediction
JEM中的QTBT,使得每个CU对每个预测方向可以最多拥有一个运动参数集。两个亚CU级别的MV预测方法ATMVP,STMVP加入了编码器,通过划分一个大CU为多个子CU,并且得到所有子CU运动信息来进行性能提升。
- Alternative temporal motion vector prediction(ATMVP) 可选时域运动矢量预测:允许每个CU从并置的参考图像的多个小于当前CU大小的块中,得到多个运动信息集合。
ATMVP通过从比当前CU小的块中,获取多个运动信息的集合改善了时域运动矢量预测TMVP,其中包括运动矢量和参考索引。如图,子CU为NxN块(N默认为4)。
ATMVP具体为两个步骤。
a、识别一个参考图像中的时域矢量对应块。参考图像被称为运动源图像:参考图像和对应块由当前CU的空间相邻块的运动信息确定。为了避免相邻块的重复扫描过程,使用当前CU的merge候选列表中的第一个候选。将第一个可用的运动矢量及其相关参考索引设置为运动源图像的时间向量和索引。在ATMVP中,与TMVP相比,可以更准确地识别对应的块,其中对应的块(并置块)总是位于相对于当前CU的右下或中心位置。
b、将当前CU划分为子CU,获取每个子CU对应的MV以及参考索引:通过运动源图像中的时间向量,将当前CU的时间矢量添加到当前CU的坐标中的方式,来识别子CU的对应块。对于每个子CU,其对应块的运动信息(覆盖中心样本的最小运动网格)用于导出子CU的运动信息。在识别对应的NxN块的运动信息之后,将其转换成当前的子CU的运动矢量和参考索引,与HEVC的TMVP相同,其中运动缩放和其他过程适用。
在JEM7.0中,此部分对应的主要函数为getInterMergeCandidates()函数中调用的:
TComDataCU::getInterMergeSubPUTmvpCandidate()
-
Spatial-temporal motion vector prediction(STMVP) 空域-时域运动矢量预测:子CU的运动矢量是通过时域MV预测和空域相邻MV二者递归得到的。如图,8x8的CU包含4个子CU,A~D,相邻的4个子块为a~d。
A的运动获取始于对两个空域相邻块的识别。第一个相邻块是A上的c,如果c不可获取或者是intra编码的,确认A上别的NxN的块(由c开始,左至右)。第二个相邻块是A的左侧b,如果b不可获取或者是intra编码,确认左侧其余块(b开始,上至下)。从每个列表相邻块获取的运动信息,会依据给定列表的第一个参考帧进行缩放。随后,通过A的TMVP获取D的运动信息并进行缩放。最后,完成运动信息的检索和缩放之后,每个参考列表分别对其所有可用的运动矢量(最多3个)求取平均值。这个平均的运动矢量被分配为当前子CU的运动矢量。
STMVP模式作为附加的merge候选,不需要多余的语法元素。如果序列参数集SPS表明ATMVP以及STMVP均可用,那么最多可以有7个merge候选。在STMVP加入merge候选列表前,需要一个减除过程。如果至少一个子CU的运动信息与这个子CU用其余merge候选或ATMVP获取的运动信息不同,STMVP模式加入列表。
为了给子CU的运动预测保存更精确的运动场,参考帧的运动补偿是禁用的。
在JEM7.0中,此部分对应的主要函数为getInterMergeCandidates()函数中调用的:
TComDataCU::getInterMergeSubPURecursiveCandidate()
- 子CU运动预测模式的信号传输
子CU模式被作为附加merge候选,并且不需要额外的语法元素来对模式进行传输。每个CU的merge候选列表中加入两个候选来表示ATMVP模式和STMVP模式。如果序列参数集指示使用ATMVP和STMVP,则最多可用7个merge候选。附加merge候选的编码逻辑与HM中的merge候选相同,即对于P、B slice中的每个CU,需要两个额外的merge候选的RD check操作。
JEM中,merge索引的所有bin都由CABAC进行上下文编码。在HEVC中,只有第一个bin是上下文编码的,其余的是上下文旁路编码的。