H.266/VVC 的帧间预测技术
到目前为止,H.266/VVC沿用了HEVC中的运动估计,运动矢量预测和运动补偿技术。但在运动矢量预测的技术中,H.266/VVC 进行了一些修改,主要包括 Merge运动矢量候选列表长度,构造过程,检查邻块的范围等。同时新增了一些新的预测技术,例如仿射变换技术,自适应运动矢量精度技术等。仿射变换技术打破了H.265/HEVC中对CU 的运动信息的限制,由原来一个 CU只能有一个运动信息变为了一个CU可以拥有多个运动信息,这样在相同质量的情况下,大大减少了编码所需比特数;自适应运动矢量技术适应了目前图像分辨率跨度范围较大这一特征,让编码器灵活地进行选择使用哪一种分辨率的运动矢量,这样在图像分辨率不同的情况下,可以将编码使用的比特数进行优化,提升编码效率。以下将作具体介绍:
(1)Merge 模式
H.266/VVC 中 Merge模式发生了一些变化,主要体现在候选列表构造的长度,构造的过程,邻块检查的范围等。在候选列表的长度上,由于新增加了几种检查邻块的方式,故列表长度由原来的5增加到现在的 6;在列表的构造过程中,首先还是优先检查当前编码块的各个邻块,接着检查时域候选的有效性,该过程与 H.265/HEVC保持一致。
如果列表没有被填满,则新增一种填充候选的方法–基于历史的运动矢量预测,即 HMVP技术。该方法维护并随时更新一个HMVP 列表,当解码完或者编码完一个块后,将该块的运动信息作为一个新的HMVP候选添加到HMVP 列表的末尾,添加的规则为队列的添加规则,即先进先出(First Input First Output,FIFO)。在构造好HMVP列表后,将HMVP 候选从列表中由后往前的顺序添加到 Merge候选列表中。HMVP技术不仅可以应用于Merge候选列表的构造,同样也适用于 AMVP候选列表的构造。
添加完HMVP候选后,将列表中前4个候选MV,两两进行平均值的过程,再将求均值后有效的MV添加进Merge 候选列表中,具体的顺序为(MV0,MV1)→(MV0,MV2)→(MV1,MV2)→(MV0,MV3)→(MV1,MV3)→(MV2,MV3)。如果依然没有填满候选列表,则使用 0 运动矢量填满。
当候选列表构造好后,编码器就要对候选列表中的每一个候选进行率失真代价的计算,以得到一个性能最优的候选 MV。在 H.266/VVC中,除了计算代表普通Merge模式的候选MV的率失真代价,还添加了新的技术,例如MMVD 技术,帧内帧间多假设预测模式。这些技术分别计算出一个最优MV代表当前模式,然后对这些模式再进行率失真代价的计算,最终决定出一个最优的Merge模式和最优的MV候选。
(2)仿射变换技术
在H.265/HEVC中,运动补偿预测的过程仅仅只适用于平移运动模型,然而在自然界中,存在各种各样的运动,例如放大、缩小,旋转,各种视角下的运动和各种不规则运动。当这些运动应用平移运动模型的运动补偿过程时,就会造成预测值不够准确,最终导致编码块的残差较大,增加了编码比特数。在H.266/VVC中,使用了基于子块的仿射变换技术(Affine Mode)来解决这一问题。如下图所示,当前编码块的仿射运动场由两个控制点的运动矢量(四参数模型)或者三个控制点的运动矢量(六参数模型)来表示。
对于上图中四参数模型,在编码块中的(x, y) 采样点处的运动矢量使用如下公式推导:
对于上图中六参数模型,在编码块中的(x, y) 采样点处的运动矢量使用如下公式推导:
以上公式中, ( m