H.266/VVC技术学习48:自适应运动矢量精度(AMVR)

本篇博客的帧间常用术语
AMVR:自适应精度。
AMVP:高级运动矢量预测,通过周围块的MV构建列表得到MVP。
MVP:在AMVP中得到的预测的运动矢量。
MV:经过精确搜索得到的运动矢量。
MVD:运动矢量差,非merge模式中需要传的内容:MVD=MV-MVP。

1 简介

HEVC中,当在slice头信息发送不使用整数精度信号时,就以四分之一像素精度为单位用信号发送CU运动矢量差MVD。
VVC中,引入了CU级自适应运动矢量精度(AMVR)方案。 AMVR允许以不同的精度编码CU的MVD。根据当前CU的帧间模式可以如下自适应地选择当前CU的MVD:

1、正常 AMVP模式:四分之一像素精度、半像素精度、整像素精度、四像素精度。
2、Affine AMVP模式:十六分之一像素精度、四分之一亮度样本,整像素精度。

如果当前CU具有非零MVD分量,则CU发出MVD精度信号,指示用的是哪一个AMVR精度信号。如果所有MVD分量均为零(四个值都是0:即参考列表L0和参考列表L1的水平和垂直MVD均为零),则使用四分之一像素精度。

2 解码方式

对于正常AMVP模式且具有非零MVD的CU:
用信号通知第一个flag,以指示是否将四分之一像素精度用于CU:如果为0,则使用四分之一像素精度用于当前CU,结束。
否则,会发信号通知第二个flag,以指示是否使用了半亮度采样。如果为1,则使用半像素精度用于当前CU,半亮度采样位置使用6抽头插值滤波器,而非默认的8抽头插值滤波器。结束。
否则,用信号发送第三个flag,以指示MVD使用的是整像素精度还是四像素精度。

在当前CU为Affine AMVP的情况下:
用信号通知第一个flag,以指示是否将四分之一像素精度用于CU:如果为0,则使用四分之一像素精度用于当前CU,结束。
否则,使用第二个flag指示MVD是使用整像素精度还是1/16像素精度。

为了确保重建的MV具有预期的精度,CU的MVP将向0舍入为与MVD相同的精度。(也就是说,负的MVP四舍五入为正无穷大,正MVP四舍五入为负无穷大)。这一段没太理解???

3 编码过程

编码器使用RD比较确定当前CU的精度。为避免对每个MVD精度执行四次CU级RD检查,在VTM7.0中,仅有条件地调用除四分之一亮度样本外的MVD精度的RD检查。

对于正常AVMP模式:首先计算四分之一精度和整数精度的RD代价,然后将四分之一精度的RD成本与整像素RD成本进行比较,决定MVD精度是否有必要进一步检查四腔采样MVD精度的RD成本。
当四分之一精度的RD成本比整型明度样本MVD精度的RD成本小得多时,将跳过四精度的RD检查。如果整像素精度的RD成本明显大于先前测试的MVD精度的最佳RD成本,则跳过半亮度样本MVD精度的检查。

对于Affine AMVP模式:如果在检查Affine merge/skip模式,merge/skip模式,四分之一精度普通AMVP模式和四分之一精度Affine AMVP的RD成本后未选择Affine inter模式,则不检查1/16精度和整像素精度Affine inter模式。此外,在四分之一精度Affine inter模式下获得的Affine参数可以被用作1/16亮度采样和四分之一精度Affine inter模式下的起始搜索点。

4 运动存储

在VVC中,显式发出信号的运动矢量的最高精度为四分之一精度。在某些仿射模式间预测模式中,运动矢量以1/16亮度采样精度导出,运动补偿的预测以1/16采样精度执行。运动存储方面,所有运动矢量都以1/16像素精度存储。
对于TMVP和ATVMP使用的临时运动场存储,与HEVC中的16x16块大小相比,VVC运动以8x8块存储。

猜你喜欢

转载自blog.csdn.net/weixin_42979679/article/details/103213112