🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
# 预测编码之帧间预测(Inter-Picture Prediction)       帧间预测是指利用视频时间域相关性,使用临近已编码图像像素预测当前图像的像素,以达到有效去除视频时域冗余的目的。由于视频序列通常包括较强的时域相关性,因此预测残差值接近于0,将残差信号作为后续模块的输入进行变换、量化、扫描及熵编码,可实现对视频信号的高效压缩。 ### 一、帧间预测编码原理       目前主要的视频编码标准帧间预测部分都采用了基于块的运动补偿技术,如下图所示,其基本原理为:当前图像的每个像素块在之前已编码图像中寻找一个最佳匹配块,该过程称为运动估计ME(Motion Estimation)。其中用于预测的图像称为参考图像,参考块到当前像素块的位移称为运动向量MV(Motion Vector),当前像素块与参考块的差值称为预测残差(Prediction Residual)。将残差信号作为后续模块的输入进行变换、量化、扫描及熵编码,可实现对视频信号的高效压缩。根据运动矢量MV,将前一帧(或前几帧、后几帧)的运动位移块图像做相应的位移得到当前帧当前块的运动预测估计值,这样就可以得到当前帧的帧间预测帧,这一过程称为运动补偿MC(Motion Compensation)。       需要注意的是:运动估计得到的运动矢量不只用于运动补偿,而且还被传送至解码器中,解码器根据运动矢量经过运动补偿可以得到和编码端完全相同的预测图像,从而实现正确图像解码。 ![](https://box.kancloud.cn/2016-07-05_577af7b35a1da.jpg)       其实,帧内预测和帧间预测有很多类似的地方,只不过帧内预测所采用的参考像素来源于当前帧已编码的像素值,而帧间预测的参考像素来源于已编码的前一帧(或前几帧、后几帧)。类似于帧间预测中编码器需要将运动矢量MV传给解码端,解码端根据运动矢量可以获取和编码端完全相同的预测块;在帧内编码模式下,编码器需要把实际采用的帧内预测模式信息传给解码器,解码端可以根据这个预测模式信息获得与编码器完全相同的帧内预测块。由此可见,运动矢量和帧内预测模式有着完全相同的重要性,它们都在宏块头中用特定的语法元素表示。 ### 二、帧间预测编码的关键技术       在帧间预测编码过程中,最重要的操作就是运动估计、MV预测以及多参考帧和加权预测,下面对它们一一进行分析。 ### 1、运动估计       所谓运动估计ME就是指提取当前图像运动信息的过程。在运动估计中,常见的运动表示法主要包括:基于像素的运动表示法、基于区域的运动表示法和基于块的运动表示法。 (1)、基于像素的运动表示法:直接为每个像素指定一个运动向量。此法普遍适用,但是需要估计出大量的未知量,而且其解通常不能反映场景中物体真实的运动情况,此外,该方法需要为每一个像素附加传送一个MV,数据量很高。 (2)、基于区域的运动表示法:把一幅图像分为多个区域,使得每个区域恰好表征了一个完整的运动物体。此法默认每个区域中的像素具有相同的运动形式,适用于包含多个运动物体的场景,然而,运动物体的形状往往是不规则的,因此区域划分需要大量的信息来表征,而且准确的划分方式需要大量的计算才能确定,因而基于区域的表示法在实际中较少使用。 (3)、基于块的运动表示法:将图像分成不同大小的像素块,只要块大小合适,则各个块的运动形式可以看成是统一的,同时每个块的运动参数可以独立地进行估计。此法兼顾了运动估计精度和复杂度,在二者之间进行了一个折中,因此该方法是视频编码国际标准中的核心技术。       基于块的运动估计方法有三个核心问题需要特别注意。一是运动估计的准则;二是搜索算法;三是亚像素精度运动估计。 #### 1.1、运动估计准则       运动估计的目的是为当前块在参考图像中寻找一个最佳匹配块,因此需要一个准则来判定两个块的匹配程度。常用的匹配准则主要有最小均方误差MSE(Mean Square Error)、最小平均绝对误差MAD(Mean Absolute Difference)和最大匹配像素数MPC(Matching-Pixel Count)等。       为了简化计算,一般用绝对误差和SAD(Sum of Absolute Difference)来代替MAD。此外,最小变换域绝对误差和SATD(Sum of Absolute Transformed Difference)也是一种性能优异的匹配准则。 #### 1.2、搜索算法       在某些应用环境下,视频编码传输对实时性要求较高,而运动估计的运算复杂度通常较高,因此高性能、低复杂度的运动搜索算法显得尤为重要。       常用的搜索算法有:全搜索算法、二维对数搜索算法、三步搜索算法等。全搜索算法是指对搜索窗内所有可能的位置计算两个块的匹配误差,所得的最小匹配误差对应的MV一定是全局最优的MV。       然而,全搜索算法复杂度极高,无法满足实时编码。除全搜索算法外,其余算法统称为快速搜索算法,快速搜索算法具有速度快的优点,但是其搜索过程容易落入局部最优点,从而无法找到全局最优点。为了避免这一现象的发生,需要在搜索算法中的每一个步骤尽量搜索更多的点,相关的算法有JM中的UMHexagonS算法以及HM中的TZSearch算法。 #### 1.3、亚像素精度运动估计       由于自然界物体运动具有连续性,因此相邻两幅图像之间的运动不一定以整像素为基本单位,而有可能以半像素、1/4像素甚至是1/8像素为单位。此时若仅仅使用整像素精度运动估计会出现匹配不准确的问题,导致运动补偿残差幅度较大,影响编码效率。       为了解决上述问题,应将运动估计的精度提升到亚像素级别,这可以通过对参考图像像素点进行插值来实现。1/4像素精度相比于1/2像素精度时的编码效率有明显地提高,但是1/8像素精度相比于1/4像素精度时的编码效率除了高码率情况以外并没有明显地提升且1/8像素精度运动估计更为复杂。因此现有标准H.264以及HEVC都使用了1/4像素精度进行运动估计。 ### 2、MV预测技术       在大多数图像和视频中,一个运动物体可能会覆盖多个运动补偿块,因此空间域相邻块的运动向量具有较强的相关性。若使用相邻已编码块对当前块MV进行预测,将二者差值进行编码,则会大幅度节省编码MV所需的比特数。同时,由于物体运动具有连续性,因此相邻图像同一位置的MV也具有一定的相关性。在H.264中就使用了空域和时域两种MV预测方式。      在HEVC中,为了充分利用空域和时域相邻块的MV对当前块的MV进行预测以便节省MV的编码比特数,HEVC在MV的预测方面提出了两种新技术:Merge技术和AMVP(Advanced Motion Vector Prediction)技术。      Merge技术和AMVP技术都使用了空域和时域MV预测的思想,通过建立候选MV列表,选取性能最优的一个作为当前PU的预测MV,二者的区别主要表现在以下两个方面。 (1)、Merge可以看出是一种编码模式,在该模式下,当前PU的MV直接由空域或时域上临近的PU预测得到,不存在MVD;而AMVP可以看成一种MV预测技术,编码器只需要对实际MV与预测MV的差值进行编码,因此是存在MVD的; (2)、二者候选MV列表长度不同,构建候选MV列表的方式也有区别。 #### 2.1、Merge技术       Merge模式会为当前PU建立一个MV候选列表,列表中存在5个候选MV及其对应的参考图像。通过遍历这5个候选MV,并进行率失真代价的计算,最终选取率失真代价最小的一个作为该Merge模式的最优MV。若边解码端依照相同的方式建立该候选列表,则编码器只需要传输最优MV在候选列表中的索引即可,这样大幅度节省了运动信息的编码比特数。Merge模式建立的MV候选列表中包含了空域和时域两种情形,而对于B Slice则包含组合列表的方式。 #### 2.2、AMVP(Advanced Motion Vector Prediction)技术       AMVP利用空域、时域上运动矢量的相关性,为当前PU建立了候选预测MV列表。编码器从中选出最优的预测MV,并对MV进行差分编码;解码端通过建立相同的列表,仅需要运动矢量残差(MVD)与预测MV在该列表中的序号即可算出当前PU的MV。       类似于Merge模式,AMVP候选MV列表也包含空域和时域两种情形,不同的是AMVP列表长度仅为2。 ### 3、多参考图像及加权预测       对于某些场景,如物体周期性变化等,多参考帧可以大幅提高预测精度。早期的视频编码标准只支持单个参考图像,H.263+开始支持多参考图像预测技术,而H.264最多支持15个参考图像,随着参考数目的增加,编码性能也随之提高,但是提高的速度日益缓慢,因此为了权衡编码效率和编码时间,一般采用4~6个参考图像。      此外,H.264还使用了加权预测技术。加权预测表示预测像素可以用一个(适用于P Slice情形)或两个(适用于B Slice)参考图像中的像素通过与加权系数相乘得出。HEVC沿用了H.264中的加权预测技术并做了进一步的发展。