高级运动矢量表达(Ultimate Motion Vector Expression,UMVE)
针对skip/direct模式,提出了一种运动向量偏移补偿方法,称为终极运动向量表达式(UMVE)。
AVS中的UMVE:对skip和direct模式中导出的运动矢量进行偏移,进一步细化skip/direct模式的MV,以便更好地进行预测。运动矢量的具体偏移信息由编码器决定并在码流中传输给解码器,UMVE技术需要传输的运动矢量的信息包括:skip/direct模式中的MV_index、MV偏移方向、MV偏移距离以及MV的预测方向
简单的理解就是,对得到的MV进一步修改,目的取得更好更准的MV。
算法实现
1. 获取2个base_mv
(1)首先从空域F左下 -> G右上 -> C邻居右上-> A左上 -> D邻居左上 按顺序获取2个mv(注意重复的mv不取)。如下图
(2) 空域不足2个的话从时域获取1个时域mv。
(3) 还不足2个的话就填充0向量作为base_mv
2. 根据2个base_mv计算5个步长,4个方向,即2*5*4=40个mv。如下图,即很简单的在四个方向对MV的(x,y)进行加减5个步长
3. RDO过程,这里的cost计算方式可以自己选择。计算40个MV所对应的cost,选择最优的cost跟前面编码得到的最优cost比较
4. 如果umve模式的cost最优,则保存信息到熵编码(base_idx,step_idx,dir_idx,skip_flag,umve_flag)
附:1.大佬文章中给出的该算法的性能
2. 空域MV的存储
LCU为单位
top_mv保留一图像行的mv,left_mv保留一LCU列的mv,top_left_mv保留左上角一个mv,top_left_mv_save左上角mv的中间保存,map_mv保存当前LCU中所有的mv。
LCU边界的CU块使用缓存的mv,LCU内部的CU块使用map_mv中当前LCU已经编码的CU块的mv。