HEVC算法和体系结构:预测编码之帧间预测

预测编码之帧间预测(Inter-Picture Prediction)

帧间预测是指利用视频时间域相关性,使用临近已编码图像像素预测当前图像的像素,以达到有效去除视频时域冗余的目的。由于视频序列通常包括较强的时域相关性,因此预测残差值接近于0,将残差信号作为后续模块的输入进行变换、量化、扫描及熵编码,可实现对视频信号的高效压缩。

一、帧间预测编码原理

目前主要的视频编码标准帧间预测部分都采用了基于块的运动补偿技术,如下图所示,其基本原理为:当前图像的每个像素块在之前已编码图像中寻找一个最佳匹配块,该过程称为运动估计ME(Motion Estimation)。其中用于预测的图像称为参考图像,参考块到当前像素块的位移称为运动向量MV(Motion Vector),当前像素块与参考块的差值称为预测残差(Prediction Residual)。将残差信号作为后续模块的输入进行变换、量化、扫描及熵编码,可实现对视频信号的高效压缩。根据运动矢量MV,将前一帧(或前几帧、后几帧)的运动位移块图像做相应的位移得到当前帧当前块的运动预测估计值,这样就可以得到当前帧的帧间预测帧,这一过程称为运动补偿MC(Motion Compensation)。

需要注意的是:运动估计得到的运动矢量不只用于运动补偿,而且还被传送至解码器中,解码器根据运动矢量经过运动补偿可以得到和编码端完全相同的预测图像,从而实现正确图像解码。

其实,帧内预测和帧间预测有很多类似的地方,只不过帧内预测所采用的参考像素来源于当前帧已编码的像素值,而帧间预测的参考像素来源于已编码的前一帧(或前几帧、后几帧)。类似于帧间预测中编码器需要将运动矢量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中的加权预测技术并做了进一步的发展。

时间: 2024-08-28 23:34:30

HEVC算法和体系结构:预测编码之帧间预测的相关文章

HEVC算法和体系结构:预测编码之帧内预测

预测编码之帧内预测(Intra-Picture Prediction) 预测编码(Prediction Coding)是视频编码的核心技术之一,指利用已编码的一个或几个样本值,根据某种模型或方法,对当前的样本值进行预测,并对样本真实值和预测值之间的差值进行编码.视频编码器对预测后的残差而不是原始像素值进行变换.量化.熵编码,由此大幅度提高编码效率. 对于视频信号来说,一帧图像内临近像素之间有着较强的空间相关性,即空域冗余:相邻图像之间也有很强的相关性,即时域冗余.去除空域冗余和时域冗余的技术分别

【HEVC帧间预测论文】P1.1 基于运动特征的HEVC快速帧间预测算法

基于运动特征的 HEVC 快速帧间预测算法/Fast Inter-Frame Prediction Algorithm for HEVC Based on Motion Features <HEVC标准介绍.HEVC帧间预测论文笔记>系列博客,目录见:http://www.cnblogs.com/DwyaneTalk/p/5711333.html 上海大学学报(自然科学版)第19卷第3期. 利用当前深度CU与时域对应位置已编码CU的亮度像素值的差值平方和均值来判断当前CU的运动特征.属于A类算

H.264学习笔记3——帧间预测

帧间预测主要包括运动估计(运动搜索方法.运动估计准则.亚像素插值和运动矢量估计)和运动补偿. 对于H.264,是对16x16的亮度块和8x8的色度块进行帧间预测编码. A.树状结构分块 H.264的宏块,对于16x16的亮度宏块,可以分成16x16.16x8.8x16和8x8的子块进行帧间预测.对于8x8的块(亚宏块,亮度和色度),往下又可以分成8x8.8x4.4x8.4x4的子块.在运动估计中,每一种分割都需要尝试,并计算出运动搜索结果的代价,选择最小代价的分割方式进行预测编码. B.运动估计

HM编码器代码阅读(14)——帧间预测之二predInterSearch(inter模式)

predInterSearch主要的工作是ME(运动估计)和MC(运动补偿). 函数中有一个bTestNormalMC变量,它表示是否进行正常的MC过程,正常的MC过程就是进行ME再进行MC. 正常的MC流程是,遍历所有的参考帧,进行ME(运动估计:xEstimateMvPredAMVP和xMotionEstimation),然后记录AVP或者MV的信息,进行MC(运动补偿,目的是选出最优的参数),然后更新最优的参数,遍历完所有的参考帧之后,就选出了最优的参数了:然后循环结束,接着进行正式的MC

帧间预测--运动补偿

运动补偿 原理 百科上说"运动补偿是通过先前的局部图像来预测.补偿当前的局部图像,它是减少帧序列冗余信息的有效方法",通过前面的运动估计我们得到了MV(运动向量),大部分情况下MV是亚像素精度的,MV的作用就是定位参考块在参考帧中的位置,但是亚像素的MV定位出来的位置是没有像素点的(亚像素就是指该位置在两个像素之间),换句话说非整像素精度的MV定位出来的地方没有像素点(即没有像素块),那么我们需要使用现有的像素点去构造亚像素点,这样通过MV找到位置才有参考块.运动补偿实际干的就是这么回

x264源代码简单分析:宏块分析(Analysis)部分-帧间宏块(Inter)

本文记录x264的 x264_slice_write()函数中调用的x264_macroblock_analyse()的源代码.x264_macroblock_analyse()对应着x264中的分析模块.分析模块主要完成了下面2个方面的功能: (1)对于帧内宏块,分析帧内预测模式(2)对于帧间宏块,进行运动估计,分析帧间预测模式 上一篇文章记录了帧内宏块预测模式的分析,本文继续记录帧间宏块预测模式的分析. 函数调用关系图 宏块分析(Analysis)部分的源代码在整个x264中的位置如下图所示

【HEVC】2、HM-16.7编码一个CU(帧内部分) 2.帧内预测各种模式实现

HEVC中一共定义了35中帧内编码预测模式,编号分别以0-34定义.其中模式0定义为平面模式(INTRA_PLANAR),模式1定义为均值模式(INTRA_DC),模式2~34定义为角度预测模式(INTRA_ANGULAR2~INTRA_ANGULAR34),分别代表了不同的角度. 最简单的Intra_DC模式,DC模式适用于大面积平摊区域,当前预测值可由其左侧和上方(不包含左上角,左下方和右上方)参考像素的平均值得到.该模式同角度预测模式实现在同一个函数Void TComPrediction:

OpenCV运动目标检测——帧间差,混合高斯模型方法

一.简单的帧间差方法 帧差法是在连续的图像序列中两个或三个相邻帧间采用基于像素的时间差分并且闽值化来提取图像中的运动区域. 代码: int _tmain(int argc, _TCHAR* argv[]) { VideoCapture capture("bike.avi"); if(!capture.isOpened()) return -1; double rate = capture.get(CV_CAP_PROP_FPS); int delay = 1000/rate; Mat

PTA数据结构与算法题目集(中文) 7-35 城市间紧急救援 (25 分)

PTA数据结构与算法题目集(中文)  7-35 城市间紧急救援 (25 分) 作为一个城市的应急救援队伍的负责人,你有一张特殊的全国地图.在地图上显示有多个分散的城市和一些连接城市的快速道路.每个城市的救援队数量和每一条连接两个城市的快速道路长度都标在地图上.当其他城市有紧急求助电话给你的时候,你的任务是带领你的救援队尽快赶往事发地,同时,一路上召集尽可能多的救援队. 输入格式: 输入第一行给出4个正整数N.M.S.D,其中N(2)是城市的个数,顺便假设城市的编号为0 ~ (:M是快速道路的条数