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 v x , m v y ) \left( mv_x,mv_y \right) (mvx,mvy)表示 ( x , y ) \left( x,y \right) (x,y)处的运动矢量, ( m v 0 x , m v 0 y ) \left( mv_{0x},mv_{0y} \right) (mv0x,mv0y)表示上图中左上角点处的运动矢量, ( m v 1 x , m v 1 y ) \left( mv_{1x},mv_{1y} \right) (mv1x,mv1y)表示上图中右上角点处的运动矢量, ( m v 2 x , m v 2 y ) \left( mv_{2x},mv_{2y} \right) (mv2x,mv2y)表示上图中左下角点处的运动矢量。W 和 H 分别为当前CU的宽高。
这样就能够得到当前编码块的每个采样点处的运动矢量,但实际应用中,为了简化计算,通常使用基于块的运动矢量,如下图所示。对于亮度块,以 4*4 像素的子块为单位进行运动矢量的获取,然后对当前 CU 以子块为单位进行运动补偿得到预测值,计算率失真代价值与当前最优编码模式进行比较。
(3)自适应运动矢量精度
在 H.266/VVC 中,MVD 可以使用三种精度分辨率进行编码,分别为 1/4 亮度像素精度,整数亮度像素精度,4 倍整数亮度像素精度。而在 H.265/HEVC 中,仅仅使用 1/4 亮度像素精度和整数亮度像素精度。现在,编码器可以在三种精度中进行自由选择,并决定处一个性能最优的精度进行最终编码,使用一个标识符进行标记。这样可以在不同的图像中,自由地选择性能最佳的精度方式。
更多关于视频编码的知识和资源,更精致的文章排版,欢迎关注博主微信公众号,一起交流、学习、进步!!!