帧间预测是利用视频时域的相关性,使用邻近已编码图像像素预测当前图像的像素,以达到有效去除视频时域冗余的目的。由于视频序列通常包括较强的时域相关性,因此预测残差通常是“平坦的”,即很多残差值接近于“0”。将残差信号作为后续模块的输入进行变换、量化、扫描及熵编码,可实现对视频信号的高效压缩。
帧间预测包含两块内容:
1.运动估计:为当前图像的每个像素块在之前已编码图像中寻找一个最佳匹配块。
2.运动补偿:根据运动矢量和帧间预测方法,求得当前帧的估计值。
1.运动估计
运动估计(ME)就是指提取当前图像运动信息的过程。
基于像素的运动表示法
由于在图像中准确分割出运动物体的背景是很困难的,目前大多数运动估计算法都是基于像素值进行的。这类方法中,最直接的方法是为每个像素指定一个运动 向量,称为基于像素的运动表示法。该方法普遍适用,但是它需要估计出大量的未知量,而且其解通常并不能反映场景中物体真实的运动情况。此外,该方法需要为每一个像素附加传送一个MV,数据量很高。
基于区域的运动表示法
对于包含多个运动物体的场景,更适用的方法是把一幅图像分为多个区域,使得每个区域恰好表征了一个完整的运动物体,这称为基于区域的运动表示法,每个区域中的像素具有相同的运动形式。然而,由于运动物体的形状往往不规则,因此区域护划分需要大量的信息来表征,而且准确的划分方式需要大量的计算才能确定,因而基于区域的表示法在实际中较少使用。
基于块的运动表示法
为了降低基于区域的运动表示法的复杂度,可以讲图像分为不同大小的像素块,只要块大小选择合适,则各个块的运动形式可以看成是统一的,同时每个块的运动参数可以独立地进行估计,这就是常用的基于块的运动表示法。这种方法兼顾了运动估计精度和复杂度,在二者之间进行了一个较好的这种,因此该方法是视频编码国际标准的核心技术。
1.1 运动估计准则
常用的匹配准则有MSE(Mean square error),MAD(mean absolutie difference )和SAD(Matching-Pixel Count)等。为了简化计算,一般用SAD(Sum of absolute difference)来代替MAD。因为SAD不含乘除法,且便于硬件实现,因而使用最为广泛。SAD准则仅考虑了残差的大小,未考虑编码运动信息所需的比特数。在运动估计过程中使用了拉格朗日率失真优化的方法来选择MV,编码器为每个运动失真计算拉格朗日待机。
J = SAD(x,y)+λ (motion)* R(motion)
1.2搜索算法
常用的搜索算法有:全搜索算法,二维对数搜索算法,三步搜索算法等。H.265/HEVC官方测试编码器给出了两种搜索算法:一种是全搜索算法;另一种是TZSearch算法。
全搜索算法:对搜索框内所有可能的未知计算两个块的匹配误差,所得的最小匹配误差对应的MV一定为全局最优的MV。然而,全搜索算法复杂度极高,无法满足实时编码。
TZSearch算法:
TZSearch算法中的菱形搜索模板1.确定起始的搜索点:AMVP技术来确定其实搜索点,AMVP会给出若干个候选预测MV,编码器从中选择失真代价最小的作为预测MV,并用其所指向的位置作为起始搜索点。
2.搜索: 以步长1开始,在搜索范围内进行搜索,其中步长以2的整数次幂的形式题赠,选出率失真代价最小的点作为该步骤的搜索结果。
3.做二点搜索:若步骤2中得到的最优点对应的步长为1,则需要在该点周围做两点搜索,其主要目的是补充搜索最优点周围尚未搜索的点。
4.在远距离的点做一定范围的全局搜索:若步骤2得到的最优点对应的步长大于某个阈值,则以该最优点为中心,在一定范围内做全搜索(搜索范围内的所有点),选择率失真代价最小的最为该步骤的最优点。
5.重复:以步骤4得到的最优点为新的起始搜索点,重复步骤2~4,细化搜索。当相邻两次细化搜索得到的最优点一致时停止细化搜索。此时搜索时间比较结果。
2.亚像素精度运动估计
在实际场景中,由于物体运动的距离并不一定是像素的整数倍,因此需要将运动估计的精度提升到亚像素级别。H.265/HEVC沿用了上一代标准使用的1/4像素精度运动估计,并进一步发展了其亚像素差值算法。相比于H.264/AVC中的6抽头滤波器(用于半像素精度)以及两点内插(用于1/4像素精度)方法,H.265/HEVC使用了更多的邻近像素点进行亚像素精度插值。
1.亮度分量插值算法
亮度插值示意图中不同颜色框出来的表示不同像素位置的点。Ao,o和Do,o为1/4像素点;Bo,o和Ho,o为半像素点;Co,o和No,o为3/4像素点。H.265/HEVC标准规定,亮度分量半像素位置的值由基于离散余弦变换的8抽头滤波器生成,1/4和3/4像素位置的值由基于离散余弦变换的7抽头滤波器生成。
亚像素插值的过程,分为两步骤:
1.对整像素所在的行或列进行插值。
2.对剩余亚像素位置进行插值,对于不在整像素行或列位置的像素。
具体的做法可以参考: HEVC 帧间预测技术总结
亮度插值滤波器抽头系数 亮度插值示意图2.色度分量插值算法
由于亮度分量运动估计达到了1/4像素精度,因此色度分量运动搜索需要达到1/8像素精度,因此色度分量运动搜索需要达到1/8精度(对于YCbCr 4:2:0而言)。色度分量亚像素差值如下图(只是简单表示了一下)黑色填充的区域为整像素点,红框内的其余的点都为亚像素点。标准规定色度亚像素插值使用基于离散预先变换的4抽头滤波器。
色度分量亚像素插值方法与亮度分量类似,也是先对整像素所在的行或列进行插值,再利用其结果对其余位置进行插值。
亚像素位置 | 抽头系数 |
---|---|
1/8 | {-2, 58, 10, -2} |
2/8 | {-4, 54, 16, -2} |
3/8 | {-6, 46, 28, -4} |
4/8 | {-4, 36, 28, -4} |
5/8 | {-4, 28, 46, -6} |
6/8 | {-2, 16, 54, -4} |
7/8 | {-2, 10, 58, -2} |
3.MV预测技术
补充知识:在HEVC的针尖预测编码中,每一个帧间预测单元PU都含有一组运动参数:运动矢量残差、参考帧索引和帧间预测标记等。运动矢量差(MVD)用于表示当前编码PU的运动矢量和参考帧中最匹配PU的MV之间的差值。
HEVC定义了三种帧间预测模式:帧间模式(Inter mode)、跳过模式(Skip mode)和合并模式(Merge mode)。为提高运动矢量预测和编码的压缩效率,对这三种模式都采用了运动矢量竞争(MVC)机制,从所给的包含诸多空域和时域运动候选的候选列表中选择一个最佳的运动候选。
空域上相邻块的MV具有较强的相关性;同时,MV在时域上也具有一定的相关性。若利用空域或者时域上相邻块的MV对当前块的MV进行预测,仅对预测残差进行编码,则能够大量节省MV的编码比特数。H.265/HEVC在MV的预测方面提出了两种新的技术——Merge技术和AMVP技术。
Merge和AMVP技术都使用了空域和时域MV预测的思想,通过建立候选MV列表,选取性能最优的一个作为当前PU的预测MV。
二者的区别主要表现在以下两个方面:
1.Merge可以看成一种编码模式,在该模式下,当前PU的MV直接有空域(或时域)上邻近的PU预测得到,不存在MVD;而AMVP可以看成一种MV预测技术,编码器只需要对实际MV与预测MV的差值进行编码,因此是存在MVD的。
2.二者候选MV列表长度不同,构建候选MV列表的方式也有所区别。
3.1 Merge模式
Merge模式会为当前PU建立一个MV候选列表,列表中存在5个候选MV(及其对应的参考图像)。通过遍历5个候选MV,并进行率失真代价计算,最终选取率失真代价最小的一个作为该Merge模式的最优MV。若编/解码端依照相同的方式建立该候选表,则编码器只需要传输最优MV在候选列表中索引即可,这样大幅节省了运动信息的编码比特数。
Merge模式建立的MV候选列表中包含了空域和时域两种情形;而对于BSlice,还包含组合列表的方式。
(1)空域候选列表的建立
空域最多提供4个候选MV,即最多使用图中5个候选块中的4个候选块的运动信息,列表按照A1-B1-B0-A0-(B2)的顺序建立,其中B2为替补,当A1,B1,B0,A0中只有一个或多个不存在时,需要使用B2的运动信息。 矩形划分方式空域候选列表的建立
为了防止虚化(指什么),对于N2N,nL2N和nR2N模式的第二个PU的候选位置A1是不可用的,这种情况下的选取顺序为B1->B0->A0->B2。同理,对于2NN,2NnU和2NnD模式第二个PU的候选位置B1是不可用的,这种情况下的选取顺序是A1->B0->A0->B2。HEVC视频编码框架
(2)时域候选列表的建立
利用当前PU在邻近已编码图像中对应位置PU(同位PU:和当前帧中当前块处于相同的空间位置)的运动信息。与空域情况不同,时域候选列表不能直接使用候选块的运动信息,而需要根据参考图像的位置关系做相应的比例伸缩调整。
cur_PU表示当前PU,col_PU表示同位PU,td和tb分别表示当前图像cur_pic、同位图像col_pic与二者参考图像cur_ref、col_ref之间的距离,则当前PU的时域候选MV为:curMV = (td/tb)*colMV
(3)组合列表的建立
对于B Slice中的PU而言,由于存在两个MV,因此其MV候选列表也需要提供两个预测MV。H.265/HEVC标准将MV候选列表中的前4个候选MV进行两两组合,产生了用于BSlice组合列表。
3.2 AMVP模式(Inter 模式)
高级运动向量预测(Advanced Motion Vector Prediction, AMVP)利用空余、时域上运动向量的相关性,为当前PU建立了候选预测MV列表。编码器从中选出最优的预测MV,并对MV进行差分编码;解码端通过建立相同的列表,仅需要运动向量残差(MVD)与预测MV在该列表中的序号即可计算出当前PU的MV。
类似于Merge模式,AMVP候选MV列表也包含空域和时域两种情形,不同的是AMVP列表长度仅为2。
AMVP候选列表构建流程中空域的5个位置和merge模式下空域的5个位置完全相同,但最终选择的是两个最优位置,其中一个来自上边块,另一个来自左边块。而时域运动矢量的选取是利用两个不同预测方向的时域相邻预测单元的运动矢量作为测量值,并选取最优的一个作为时域运动矢量。当时域和空域候选子集选取完成后,首先去除重复的运动矢量,其次检查运动矢量的总数是否为2,若大于2则保留前两个即去除索引值大于1的,若小于2则添加零运动矢量。
空域运动矢量最多有2个预测运动矢量,是从空域候选列表的建立图中5个位置中选取的。预测运动矢量选取顺序为:
1.左相邻块:A0->A1->缩放的A0->缩放的A1。
2.上相邻块:B0->B1->B2->缩放的B0->缩放的B1->缩放的B2。
左候选子集和上候选子集均有四种处理预测运动矢量的方式,且可以划分为两类:运动矢量不缩放情形和运动矢量缩放情形。而且总是先处理不缩放情形,再处理缩放情形。对于两种情形的规定如下:
1.不需要缩放的情形:
(1)使用同一个参考列表,同一个参考图像索引。
(2)使用不同参考列表,同一个参考图像索引。
2.需要缩放的情形:
(1)同一个参考列表,不同参考图像索引。
(2)不同参考列表,不同参考图像索引。
因此,具有相同图像参考索引的不需要进行缩放操作,其他情况要进行缩放操作。时域运动矢量候选的选取方式与merge模式的时域候选方式相同,且对于空域缩放过程和时域缩放过程相同。
网友评论