AVS3中引入了解码端运动矢量修正(DMVR,Decoder side Motion Vector Refinement)技术,AVS3中的DMVR技术和G.266/VVC类似,它可以在解码端生成运动参数从而减少传输运动参数的码率开销。它的基本思想是将skip/direct模式生成的前后向mv作为初始mv,然后使用双向匹配修正初始mv。修正过程又分为整像素搜索和分像素搜索两个部分。
DMVR
avs3中DMVR只能用于双向预测且为skip或direct模式,它首先获取skip/direct的前向mv0和后向mv1,然后将mv0和mv1调整到整像素精度。在双向预测中根据mv0和mv1分别从L0和L1的参考帧中获取预测块,但是需要拷贝的预测块尺寸为(W+7)*(H+7)作为搜索区域,其中W和H分别是块的宽和高。搜索区域等于或略大于硬件MC模块原有需要的缓冲区的大小(MC需要的额外像素数为滤波器阶数8),可复用硬件MC模块原有缓冲区。
将当前预测单元的亮度图像块划分为不重叠且位置相邻的16x16的子块, 其中子块的宽度subW和高度subH通过下式计算:
subW = W<16 ? W : 16
subH = H<16 ? H : 16
所有子块的初始mv均为mv0和mv1。对于每个子块,以初始mv0和mv1所对应的位置为中心,开始寻找周围[-2,2]范围内21个位置中前向和后向预测块之间SAD最小的位置。21个搜索位置如图1所示(蓝色位置为中心位置)。
mv0' = mv0 + mv_offset
mv1' = mv1 - mv_offset
图1 DMVR整数搜索点
只有图2中黄色三角形所在的整数点为最优点时,才进行亚像素估计。亚像素位置的计算使用整数位置最优位置、其左侧、其右侧、其上方、其下方共五处的模板匹配失真值,估计整数位置最优位置附近的二次失真平面,计算得到失真平面中失真最小的位置作为亚像素位置。使用其左侧、其右侧和中间像素估计水平亚像素位置,使用其上方、其下方和中间像素估计垂直亚像素位置:
水平亚像素位置 = (sad_left - sad_right)*精度N/((sad_right+sad_left-2*sad_mid)*2)
垂直亚像素位置 = (sad_btm - sad_top)*精度N/((sad_top+sad_btm-2*sad_mid)*2)
其中精度N在最高1/4时为4,在最高1/16时为16。
图2 最优整数搜索点
如果最优MV非零,对于原有缓冲区外扩2行像素。接着对于每个子块,利用整数和亚像素相对位置,利用原有8抽头滤波器进行MC操作,取得预测块。DMVR中更新后的MV不需存储,当前块的MV仍为未更新的MV。
DMVR技术使用在skip/direct编码块上,对于从空域或时域临近块直接获得skip/direct运动矢量进行精细化改良来提高预测精度。在当前块满足以下条件时才能使用DMVR:
-
当前块为双向预测块;
-
当前块为跳过模式SKIP或者是直接模式DIRECT模式;
-
当前块不使用仿射模式AFFINE;
-
当前块不使用仿射模式UMVE;
-
当前块所在的帧在时间顺序上位于两个预测所在参考帧之间;
-
当前块所在的帧在时间顺序上位于两个预测所在参考帧与当前参考帧时域距离相同;
-
当前块宽度和高度大于等于8时;