H.266/VVC相关技术学习笔记15:视频编码中帧间预测技术的基本原理

今天讲一下关于视频编码中帧间预测技术一些基本原理,然后在后续的博客中更新最新的VTM6.0版本中的现存的帧间预测技术。

首先帧间预测技术就是利用视频中邻近帧之间的时域相关性,使用之前已经预测编码好的重建图像作为参考帧,通过运动估计和运动补偿对当前的编码图像进行预测编码,从而去除视频中的时间冗余信息,大致如下图所示:Cur_Pic是通过运动矢量MV0和MV1指向的Ref_Pic0和Ref_Pic01去预测的。在这里插入图片描述
帧间预测编码流程如下图所示(用PPT画的,可能比较粗糙~),大致流程为,把当前原始帧与重建帧存储器输出的前一重建帧(也称参考帧)同时输入到运动估计模块,经搜索比较后得到运动矢量(MV)。将此运动矢量输入到运动补偿模块,用该MV“补偿”输入的重建参考帧,得到当前编码帧的预测帧。然后预测帧和当前原始帧的差值即为帧间预测误差。运动矢量也要传送到解码端。解码器利用反量化、反变换后得到的有损的残差值在和运动补偿后得到的预测帧相加就能得到当前的重建帧。
在这里插入图片描述

帧间预测分为单向预测(P帧)以及双向预测(B帧),顾名思义,单向就是当前帧只参考一个方向上的参考帧,双向则在前后两个方向上都有参考帧。

一、运动估计
运动估计是最H.264就已经存在的一种帧间预测技术,是帧间预测必不可少的一部分,该技术的核心就在于通过当前编码块在其参考帧中去搜索一个最匹配的参考块,然后计算出其运动矢量,一般在整个视频中第一个帧间预测帧肯定要用运动估计去搜索其MV,因此运动估计搜索出来的MV需要传到解码端,除了传MV以外,还需要传送帧间预测残差,参考帧索引。

二、MV的预测技术
虽然运动估计的帧间预测大大压缩了原始的视频数据量,但是仍然需要将运动矢量本身的数据量传送到解码端,如果对每个块的运动矢量都进行编码,那仍然需要花费相当数目的比特数,特别是在选择小尺寸的编码块时比特开销显著增加。但是有一个问题值得注意,就是一个物体的运动往往会覆盖多个图像块,所以空间相邻的块的MV就具有很强的相关性。因此,当在有了可以参考的参考帧以后,后续的B、P帧就不需要去参考帧中搜索MV,而可以根据当前空域相邻的一些已编码块的MV去预测当前块的MV,但是由于空域的覆盖范围有限,为了能够顾及当前块的中心位置以及右下角的位置,因此还需要时域相邻的块来预测当前的MV。
由此后续延伸出多种MV预测的技术,这里我们先大体上分为两类,AMVP(高级运动矢量预测)模式和Merge(融合)模式。这两个技术的核心就在于需要去构建一个MV的候选列表,通过空域相邻的块和时域相邻的块去按照一定的规则去构造该候选列表,目前的版本中,AMVP候选列表的长度为2,Merge候选列表的长度为6,但是构造方式都是一样的。

我们可以根据下图所示去构造候选列表:
①首先检查空域相邻的块是否有可用的MV,并检查冗余,检查顺序顺序为:A1——>B1——>B0——>A0——>B2。空域相邻最多选出4个候选。

② 再检查时域相邻的块,并检查冗余,检查顺序如下:BR——>CT。时域相邻最多选出1个候选。时域的候选具体可以参考TMVP技术:H.266/VVC相关技术学习笔记:VVC中TMVP技术(时域Merge列表的构建)

③如果空域时域检查完后,Merge列表仍没有填满5个(如果已经填满了5个,则不使用HMVP方法),则采用基于历史的参考空间候选技术(HMVP),同时也要检查冗余,该技术我后续会讲一下的。H.266/VVC相关技术学习笔记:帧间预测中的HMVP技术(基于历史的MV预测)

④当上述的三种填充方法填充完之后,如果填满刚好5个或者仍不足5个,则使用成对组合平均法去填充Merge列表,同时仍要检查冗余,但是成对组合平均法最多只能填充一个候选。该技术具体如下:
H.266/VVC相关技术学习笔记:VVC中成对平均候选技术(用于Merge列表的构建)

⑤如果上述4种方法都没能填满候选列表,则最后用零矢量(0,0)补满候选列表。

这里之所以选用固定的候选数量,是考虑到解码时候的并行处理,并且提高鲁棒性

在这里插入图片描述
好了,讲了半天还没有提到AMVP和Merge最大的区别在哪里,下面我来解释一下:

  1. 首先是Merge模式,之所以叫融合模式,就是将其相邻各个块的MV融合到一个列表中,然后根据率失真代价去获取其中最优的一个MV作为当前块的MV,当然这个预测得到的MV并不需要传送到解码端,而是只需要传送该选中的MV在Merge候选列表中的索引即可,然后在解码端通过该索引直接通过相邻块获取当前块的MV,最终通过运动补偿计算预测值。

  2. 其次是AMVP模式,这也称inter模式,该模式需要构造长度为2的MV候选列表,首先需要通过运动估计获取当前编码块最准确的原始MV,然后和候选列表中的MV相减得到MV差值(MVD),然后将该MVD连同候选索引传送到解码端,在解码端通过预测的MV以及MVD恢复出原始的MV(这里就比较类似帧内预测在解码端得到重建值的过程)。之所以AMVP候选长度只为2,有两方面的原因:
    ① 一方面,编码器由于要计算MVD,因此必须完成运动估计,而运动估计又是一项非常耗时的操作,因此较少的候选意味着较少的运动估计,可以降低复杂性。
    ②另一方面,在inter模式下需要传送MVD到解码端,因此较少的候选数量不会给编码效率带来太大的影响。

我们可以看出,AMVP需要向解码端传送帧间预测残差、MVD、候选索引、参考帧、帧间预测标志(标识单向还是双向)。而Merge模式仅仅需要传送残差、候选索引

除了上述两种主流模式外,还有一种编码效率最高、所需传送的信息最少的一种模式,称为Skip模式,该模式是一种特殊的Merge模式,是不需要传送残差的Merge模式,因此在CU模式判决中,首选必须先判断是否为帧间的Skip模式。

上面所讲的就是视频编码中帧间预测技术的一些最基础的原理,后续的博客我会更新当前最新的VVC中Merge模式的一些变种以及非Merge模式的帧间预测技术。请大家敬请期待,我会继续努力为大家带来满满的干货的~

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章