HMVP技术(基于历史的MV预测)也是帧间的一个小分支技术,但是贯穿于整个Merge技术中,我们知道在构造Merge候选列表的时候有多种构造方法,以便在列表长度不足的时候用备选的方法填充进新的候选,比如空域相邻候选,时域相邻候选,零矢量候选等等。HMVP也是一种构造候选MV的方式。
HMVP技术就是构造一个长度为6的HMVP列表,里面存储的就是已经编码的块的运动信息(MV之类的),具体的HMVP列表的更新示意图如下图所示,按照先进先出的原则,将前一个已经编码块的运动信息放入HMVP列表中去,后一个编码块的运动信息后放入HMVP列表中。因此HMVP列表中最后一个放入的是当前编码块的最近的前一个已经编码的块的运动信息。
因此,随着不断编码的进程,每一个当前正在编码的CU都有其对应的HMVP列表,将该HMVP列表作为构造Merge列表的一种备选列表,如果在空域和时域选完以后,Merge列表仍没有填充满,就用HMVP列表进行补充, 如图所示,填充的顺序是从HMVP列表的末尾从后向前补充到Merge列表中去。
这里补充一下,在当前的VTM6.0版本中,为了统一空域和时域Merge候选保持一致,在HMVP列表中新添加进了BCW系数(双向预测权重),关于双向预测权重我在这里简单介绍一下,当我们在双向预测的时候,当前块最终的预测值是通过对前向MV补偿出的预测值和后向MV补偿出的预测值按照一定的权值进行加权,如下图所示,
加权的具体公式为:P_bi-pred=((8-w)P_0+wP_1+4)≫3
前向和后向的权重都总共有五种,具体的权重值如下表所示:
最后来解释一下为什么要给HMVP列表中也要加入BCW,是因为在之前的版本中,BCW系数只存在于空域候选和时域候选中,而在HMVP列表中却没有,这样可能会导致最终的Merge列表不能保持一致,因此VTM6.0中建议也给HMVP列表中存储BCW系数。