精华内容
下载资源
问答
  • 【视频编解码-06】预测编码详解-帧间预测
    2021-02-27 17:31:25

    什么是帧间预测?

    编码相邻帧的时候,使用已经编码的帧与预测值的差值编码的方式,减少相邻帧图像数据相似的部分。
    帧间预测主要包括运动估计(运动搜索方法、运动估计准则、亚像素插值和运动矢量估计)和运动补偿。
    对于H.264,是对16x16的亮度块和8x8的色度块进行帧间预测编码。

    消除运动图像时间冗余的技术;

    帧间预测技术的发展?

    帧间预测技术发展经历了条件更新、3D-DPCM、基于像素的运动补偿技术,最终确定为基于块的运动补偿方案。

    帧间预测主要详细步骤是什么?

    1. 运动估计,因为是基于块的预测,那么首先需要找到块的位置,运动估计就是为当前图像的每个像素块在之前已编码的图像找到最最匹配的像素块;
    2. 运动补偿,根据帧间预测的计算方法以及运动矢量,也即当匹配快到当前快的运动情况,计算得到当前帧的估计;

    运动估计

    1. 基于像素的运动表示
      视频画面的运动,是每一个像素按照一定轨迹运动而造成的效果。视频中的运动物体,前后帧每一个像素都有一个运动轨迹。这个轨迹的数学表示方式就是向量,也称为运动矢量。这种基于像素的运动估计,普遍适用,但是数据量大。但是也能提供精确的运动估计,光流技术就是基于像素的运动估计技术之一;

    2. 基于区域的运动表
      对于包含多个运动物体的场景,将每帧图像划分为多个区域,是的每个区域恰好标识一个运动物体。适用性小,因为于东物体规则复杂,需要大量信息来表征一块区域;

    3. 基于块的运动表示
      基于区域的标识太过于复杂,于是采用规则的像素块,每一个像素块可以视为运动的最小单元,其中的像素运动看成是统一的,这种方式兼顾了复杂度和计算精度,该方法是视频编码标准的核心技术;

    理解:

    以上三种方式,方法相同,只是选取的对象粒度不同,从像素、块到区域的根本的思想还是判断前后两针数据相同画面的运动轨迹。

    运动估计包括:运动搜索方法、运动估计准则、亚像素插值和运动矢量估计。

    确定了使用基于块的运动估计方法,接下来就要讨论,基于块的运动估计的详细步骤,其中关键要解决的问题就是,如何从已经编码的帧数据中找出与当前帧的块最匹配的像素块;方法是使用当前帧的像素块,去已编码的帧中逐搜索匹配。

    运动搜索方法

    1. 全局搜索:最简单的将所有可能进行搜索比较,总是能找到搜索范围内的最佳匹配块,但是效率太低。
    2. 快搜索算法:每种算法的过程各不相同,主要通过尽量避开不太可能是最佳匹配块的位置,从而提升搜索效率。过程就是:
    3. 确定搜索起始点;
    4. 判断该点有没有达到最佳匹配块的要求和能不能进一步继续搜索。
    5. 按照搜索规则,以起始点周围点为新的起始点进行递归搜索。
      常见的快速搜索算法有:三步法、二维对数法、交叉法、菱形法等。
      利用运动矢量的中心偏置分布特性的三步搜索法、新三步搜索法、四步搜索法、梯度下降算法、钻石型算法、六边形搜索算法;利用运动矢量时空性相关性算法、非对称十字多边形搜索算法、基于时空预测的快速算法、图像增强预测区域搜索算法。

    搜索方法有多种,目标是找的快,找的准。

    运动估计的准则

    一句话概括,就是找到的预测块要与当前快的残差最小,这样就使得需要编码的数据量最少。
    运动估计就是在搜索范围内寻找最佳估计块,使得预测块与当前块的残差数据尽量小,这样就保证编码的代价尽量小。对于MxN的像素快,s(x,y)表示当前像素值,z(x,y)表示备选预测像素值,x=1……M,y=1……N。则有下面的运动估计准则:

    1. SAD(sum of absolute difference):绝对误差。MAE:平均绝对差值
        SAD = sum(|s(x,y)-z(x,y)|)    MAE = (1/MN)*SAD
    2. SATD
    3. SSD(sum of squared difference):差值的平方和。MSE:平均平方误差
        SSD = sum((s(x,y)-z(x,y)^2))    MSE = (1/MN)*SSD
       可以选择上面的估计标准,计算出的值越小,说明编码代价越小。

    H.264编码是以GOP分组处理,每个GOP的编码结构有III……、IPP……、IBB……P和分层B帧结构。其中第一种一般不使用,编码效率太低;第二种是属于H.264的基本档次。第三、四种属于主要档次和扩展档次。其中第三种(普通B帧)会产生较大的编码延时。

    亚像素插值

    在实际场景中,由于物体运动的距离并不一定是像素的整数倍,因此需要将运动估计的精度提升到亚像素级别。H.265/HEVC沿用了上一代标准使用的1/4像素精度运动估计,并进一步发展了其亚像素差值算法。相比于H.264/AVC中的6抽头滤波器(用于半像素精度)以及两点内插(用于1/4像素精度)方法,H.265/HEVC使用了更多的邻近像素点进行亚像素精度插值。
    像素插值分为亮度(Y分量)和色度(UV分量)插值。

    更多相关内容
  • 1、内预测与帧间预测编码的区别 内编码: 不依赖参考图像,可以独立解码,因而可以作为一个GOP的起点和随机接入点,即IDR 输出的码率相对较高,即压缩率较低 内编码为了确保可独立解码这一最关键的特性,...

    一、视频的时间冗余

    1、帧内预测与帧间预测编码的区别

    • 帧内编码:
      • 不依赖参考图像,可以独立解码,因而可以作为一个GOP的起点和随机接入点,即IDR帧
      • 输出的码率相对较高,即压缩率较低
      • 帧内编码为了确保可独立解码这一最关键的特性,只利用了图像的空间冗余进行压缩,无法充分利用视频信息前后帧之间的关联
    • 帧间编码:
      • 帧间编码所利用的是视频的时间冗余,主要编码运动(运动矢量)和纹理(预测残差)信息
      • 压缩率较高
      • 通常在视频信息中,每一帧所包含的物体对象与其前后帧之间存在运动关系,这种物体的运动关系即构成帧与帧之间的时间冗余。由于帧与帧之间物体的运动相关性大于一帧内部相邻像素之间的相关性,尤其对于时间相近的图像之间,时间冗余比空间冗余更加明显。
    • 图像之间物体的运动关系可由下图表示:
      在这里插入图片描述

    二、块结构的运动估计

    • H.264:块结构的混合编码
    • 帧间编码一一个宏块为最小执行单位
    • 可分为几个模块:
      • 预测编码(包括运动估计/运动补偿过程)
      • 变换/量化编码
      • 熵编码
      • 参考帧管理
    • 帧间编码中的变换、量化编码:类似帧内编码
    • 预测编码:
      • **基于块的运动估计(Motion Estimation, ME):**通过当前的像素块,然后在参考帧中查找与当前要编码像素块最匹配的参考块;
      • **运动补偿(Motion Compensation, MC):**同运动估计是对应的,主要存在于解码的环路中,根绝解码得到的残差然后通过运动矢量查找到相应的参考块,然后参考块和残差还原出解码后的重建像素块
        在这里插入图片描述为了给后续的帧内预测提供参考帧,还需要内部解码的环路过程,使用运动补偿还原出重建的像素块

    三、运动矢量

    运动估计,有时也称作运动搜索,即在相应参考帧中搜索当前像素块的对应参考像素块,使最终的编码代价最小。为了实现这个目标,相比帧内编码所定义的16×16和8×8两种宏块划分方式,帧间编码定义了更多、更复杂的方法。

    1、运动估计宏块划分

    • 一个宏块将按帧间编码进行编码时,按照预定义的方法进行分割
    • 针对帧间预测,H.264定义了4种宏块分割和4种子宏块分割方式:
      • 宏块分割:16 * 16、16 * 8、8 * 16、8 *8
      • 子宏块分割:8 * 8、8 * 4、4 * 8、4 * 4
    • 当某个宏块配置为8 * 8形式时,每个8 * 8宏块将按照子宏块的分割方法来进一步分割;当某个宏块配置为16 * 16、16 * 8、8 * 16就不再按照子宏块分割了
    • 帧间预测的宏块分割如下图所示:
      在这里插入图片描述

    2、运动矢量

    • 在一个帧间编码宏块中,每一个分割后的子块都会进行相应的运动搜索,在参考帧中查找对应的相同尺寸的像素块作为参考
    • 运动矢量(Motion Vector, MV): 当前像素块在当前帧中的位置同参考块在参考帧总的位置之间的相对位置代表了像素块中的物体在两帧之间的运动轨迹。这个相对位置以两个坐标值组成的矢量(MV_x, MV_y)表示
    • 一个宏块最多可能包含16个MV(因为最多可能为16个4 * 4的像素块)
      在这里插入图片描述
      在上图中某个像素块在参考帧和当前帧中不存在运动关系,因此运动矢量为(0,0)。
      在这里插入图片描述
      参考帧相对于当前帧向下偏移了20,向右偏移了5,因此运动矢量为(20,5)。

    四、运动矢量预测

    • 一个帧内宏块最多可分割为16个子块
    • 每个子块都按照完整的运动信息编码效率较低
    • 运动矢量预测:提升运动信息的编码效率
    • 计算运动矢量的方法:
      • 运动矢量预测:MVP,由相邻像素块信息计算得到
      • 运动矢量残差:MVD,由码流中的语法匀速解析得到

    1、运动矢量预测的计算方法

    当前块同相邻块之间的相互关系可由下图表示:
    在这里插入图片描述
    其中,当前块的MVP由A、B和C块的MV取中间值计算得到。如果像素块C不存在,那么以像素块D取而代之。如果当前宏块采用了SKIP模式编码(即码流中不传递相应的数据),则按照16×16模式宏块的方法计算MVP。(见标准文档8.4.1.3节)‘

    2、亚像素插值

    • 亚像素插值的目的:提升运动搜索的匹配精度
    • H.264相对于前期标准进一步提升了ME(运动估计)精度
    • 在H.264中,亮度分量的MV最高可达1/4像素精度,色度分量的MV最高可达1/8像素精度。无论1/2、1/4或1/8像素位置上的像素值在图像中都是不存在的,只是作为在运动估计过程中的一个临时值存在。
    • 非整数像素:根据相邻像素值计算得到的,理论上存在于实际像素之间的一个中间值
    • 计算方法:当前相邻的几个像素计算加权均值

    2.1亚像素

    大小字母表述的就是图像中实际存在的整数像素,其余的表示通过计算得到的亚像素点,至于这些亚像素点是怎么计算的呢,根据不同的情况进行不同的分析

    • 1/2像素精度的亚像素可由下图表示:
      在这里插入图片描述
      1/4像素精度的亚像素可由下图表示:
      在这里插入图片描述
      1/8像素精度的亚像素可由下图表示:
      在这里插入图片描述

    2.2亚像素的计算方法

    由上图可知,亚像素精度就是根据相邻像素值计算得到的,理论上存在于实际像素之间的一个中间值。其计算方法是由当前相邻的几个像素计算加权均值的方式得到,具体的计算方法定义在标准文档的8.4.2.2.1节中。亮度信息的插值如下图:
    在这里插入图片描述
    对于水平和垂直方向的半像素点b和h:

    b = (( E − 5*F + 20*G + 20*H − 5*I + J) + 16) >> 5; 四舍五入
    h = (( A − 5*C + 20*G + 20*M − 5*R + T) + 16) >> 5;
    

    对于四个像素的中间点j,其计算方法与b和h类似,只是用于计算加权均值的像素变为了同方向上的6个半像素点:

    j = (( cc − 5*dd + 20*h1 + 20*m1 − 5*ee + ff) + 512) >> 10;或
    j = (( aa − 5*bb + 20*b1 + 20*s1 − 5*gg + hh) + 512) >> 10;
    

    对于1/4像素位置的值,其计算方法更为简单,即取其相邻的整像素或半像素的值取平均即可:

    n=(h+M+1)>>2
    

    五、运动搜索快速算法

    完全的运动搜索过程是一种极为耗时的操作,其主要原因有:

    1. 运动搜索过程需要覆盖搜索区中的每个像素和亚像素;
    2. 运动搜索需要在多个参考帧中进行;

    为了解决这个问题,研究人员提出了多种运动搜索的优化算法,旨在降低运动搜索的总运算量。其中比较常见的有:

    1. 三步搜索法;
    2. 菱形搜索法;
    3. 六边形搜索法;

    5.1三步搜索法

    三步搜索法对比全搜索只有约1/10的计算量,而算法性能基本一致。三步搜索法如图所示:
    在这里插入图片描述
    三步搜索法运行过程:
    4. 从搜索窗口中心开始,以4为步长搜索8个点+中心点共9个点,以SAD最小的原则选择一个最佳匹配点;
    5. 以步骤1得到的最佳匹配点为中心点,以2为步长继续搜索相似的9个点,得到第二个最佳匹配点;
    6. 从第二个最佳匹配点开始,以1为步长重复上述步骤,得到最终的运动搜索匹配点;

    5.2菱形搜索法

    菱形搜索法使用大菱形和小菱形两种模板,大菱形包含9个点,小菱形包含5个点,如下图所示:
    在这里插入图片描述
    菱形搜索法执行步骤:
    7. 从搜索窗口中心开始,按照大菱形模板搜索9个点,检查菱形中心点是否是大菱形中的最佳匹配点;
    8. 如果最佳匹配点是菱形的中心点,则进一步按照小菱形模板进行搜索;
    9. 如果最佳匹配点不是菱形中心点,则按照实际的最佳匹配点继续按大菱形模板搜索,直到找到某个最佳匹配点在大菱形模板的中心点,然后按小菱形模板搜索;

    5.3六边形搜索法

    六边形搜索的原理同菱形搜索法类似,区别在于其大模板采用的模板为7个点的六边形形状,而小六边形模板的形状同菱形模板相同,如下图所示:
    在这里插入图片描述
    六边形搜索执行步骤:

    1. 从搜索窗口中心开始,按照大六边形模板搜索9个点,检查菱形中心点是否是大六边形中的最佳匹配点;
    2. 如果最佳匹配点是六边形的中心点,则进一步按照小六边形模板搜索;
    3. 如果最佳匹配点不是六边形中心点,则按照实际的最佳匹配点继续按大六边形模板搜索,直到找到某个最佳匹配点在大六边形模板的中心点,然后按小六边形模板搜索;
    展开全文
  • 帧间预测的几种特殊模式: P_Skip: 即COPY模式,在该模式下无运动矢量残差,无像素预测残差。重建时以MVP作为实际运动矢量,以预测像素块作为重建; B_Skip:同P_Skip类似的是该模式下同样无运动矢量残差,无像素...
    • 帧间预测的几种特殊模式:
      • P_Skip: 即COPY模式,在该模式下无运动矢量残差,无像素预测残差。重建时以MVP作为实际运动矢量,以预测像素块作为重建;
      • B_Skip:同P_Skip类似的是该模式下同样无运动矢量残差,无像素预测残差。重建时,以Direct模式获取双向MV,以预测像素块作为重建;
      • B_Direct:B_Direct模式分为B_Direct_8x8和B_Direct_16x16,分别表示整个宏块和一个子块按照B_Direct模式编码。该模式下,无运动矢量残差,有像素预测残差。重建时,以Direct模式获取双向MV,以预测像素块加上预测残差像素块作为重建;

    Direct预测模式

    Direct预测模式定义在标准文档的8.4.1.2节。主要执行步骤如下:

    • 计算共置运动矢量(co-located motion vector)、参考帧索引等信息;
    • 如果direct_spatial_mv_pred_flag为1,表示采用空间Direct模式;
    • 如果direct_spatial_mv_pred_flag为0,表示采用时间Direct模式;

    计算共置运动矢量和参考帧索引等信息

    1. 首先获取共置图像(colPic),对于帧编码的视频,colPic即参考帧列表List1的首帧RefPicList1[0]。
    2. 然后计算luma4x4BlkIdx的值;计算方法根据direct_8x8_inference_flag的取值不同:
      1. 如果direct_8x8_inference_flag为0,luma4x4BlkIdx的计算方法为 (4 * mbPartIdx + subMbPartIdx);
      2. 否则,luma4x4BlkIdx的计算方法为 (5 * mbPartIdx);
    3. luma4x4BlkIdx计算完成后,根据4×4子块逆扫描顺序将luma4x4BlkIdx转换为子块坐标(xCol, yCol);
    4. 根据表8-8的定义,计算共置宏块地址mbAddrCol、子块坐标yM和mv映射系数vertMvScale;从表中可知,对于帧编码视频,其mbAddrCol值等于当前宏块地址CurrMbAddr,子块坐标的yM等于步骤3中计算得到的yCol,mv映射系数vertMvScale为One_To_One。
    5. 设mbTypeCol和subMbTypeCol分别为共置宏块及其内部对应子块的类型,mbPartIdxCol和subMbPartIdxCol分别为共置宏块及其内部对应子块的内部划分索引值。根据子块坐标(xCol, yM)、mbTypeCol(如果共置宏块是8x8分割,则还有subMbTypeCol的数据),得到mbPartIdxCol和subMbPartIdxCol;
    6. 计算mvCol和refIdxCol。根据共置宏块的类型判断:
      1. 如果共置宏块是帧内编码宏块,则mvCol设为(0,0),refIdxCol设为-1;
      2. 如果共置宏块不是帧内编码宏块,则要判断共置宏块的predFlagL0Col和predFlagL1Col值;如果predFlagL0Col为1,则取共置宏块或其中的目标子块的MvL0作为mvCol,取RefIdxL0作为refIdxCol;
      3. 如果predFlagL0Col为0而predFlagL1Col为1,则取MvL1作为mvCol,取RefIdxL1作为refIdxCol;

    空间Direct预测模式

    空间Direct模式适用于B_Skip和B_Direct的运动矢量预测过程。该过程传入的数据包括mbPartIdx和subMbPartIdx,输出的数据结果有:

    • 两个方向的参考帧索引refIdxL0, refIdxL1;
    • 两个方向的运动矢量mvL0和mvL1;
    • 运动矢量计数subMvCnt;
    • 两个方向的预测方向标识位predFlagL0和predFlagL1;

    首先计算两个方向的参考帧索引refIdxL0, refIdxL1。其主要步骤为:

    1. 获取当前8x8子块的分割类型currSubMbType;
    2. 计算当前子块的三个相邻块(左、上、右上)的三对参考帧索引(refIdxL0N和refIdxL1N);
    3. refIdxL0, refIdxL1分别为三个相邻块对应方向参考帧索引的最小正值,如果都不存在则都设为0,并将一个特定的标识位directZeroPredictionFlag设为1;
      第二步为调用3.1中的方法计算mvCol和refIdxCol;

    第三步为计算colZeroFlag。如果下列条件全部符合,则colZeroFlag为1,否则colZeroFlag为0:

    • RefPicList1[0]为用于短期参考;
    • refIdxCol值为0;
    • 以1/4像素为单位,mvCol的两个分量都在-1到1之间;

    最后,计算预测mv的值。如果下列条件符合其中之一,预测mv的两个分量全部为0;否则,按照运动矢量预测的方式通过相邻像素块的运动信息预测mv的值:

    • 标识位directZeroPredictionFlag的值为1;
    • refIdxLx的值为负值;
    • refIdxLx的值为0,且colZeroFlag为1;

    两个方向的预测方向标识位predFlagL0和predFlagL1分别代表两个方向的refIdx是否为非负值,subMvCnt的值表示两个标识位有几个为真。

    时间Direct预测模式

    与空间Direct模式类似,时间Direct模式同样适用于B_Skip和B_Direct的运动矢量预测过程。其输入输出的数据也与之一致。

    首先调用3.1中的方法计算mvCol和refIdxCol;

    在获取到了refIdxCol后,按照标准的说明,调用MapColToList0()获取到新的refIdxL0。实际上对于帧编码视频,MapColToList0()的作用就是从List0中找到第一个包含refIdxCol的参考帧,并将其索引值返回给refIdxL0。此外,refIdxL1的值被设为0。

    下一步操作是计算currPicOrField和两个参考帧pic0以及pic1。对于帧编码视频,pic0设为RefPicList0[refIdxL0],pic1设为RefPicList1[0];currPicOrField为当前的图像对象。

    最后计算两个预测mv的值。如果refIdxL0代表的是一个长期参考帧,或者pic1和pic2的poc相等,则两个预测mv的计算方式为:

    • mvL0 = mvCol;
    • mvL1 = 0;

    否则,如果pic1和pic2的poc不相等,且refIdxL0代表的是一个短期参考帧,则mvL0和mvL1都是mvCol经过变换之后的缩放值,其缩放系数由当前帧、pic0和pic1的POC计算决定。计算方法如下图所示:

    其时间与mv的关系可由下图表示:

    展开全文
  • “纸上得来终觉浅,绝知此事要躬行”,只有自己按照标准文档以代码的形式操作一遍,才能对视频压缩编码标准的思想和方法有足够深刻的理解和体会! 链接地址:H.264/AVC视频编解码技术详解 GitHub代码地址:...

    《H.264/AVC视频编解码技术详解》视频教程已经在“CSDN学院”上线,视频中详述了H.264的背景、标准协议和实现,并通过一个实战工程的形式对H.264的标准进行解析和实现,欢迎观看!

    “纸上得来终觉浅,绝知此事要躬行”,只有自己按照标准文档以代码的形式操作一遍,才能对视频压缩编码标准的思想和方法有足够深刻的理解和体会!

    链接地址:H.264/AVC视频编解码技术详解

    GitHub代码地址:点击这里

    一、视频的时间冗余

    在本系列博文的第三篇中,我们初步了解了H.264视频编码技术的基本结构和框架:

    在H.264中,预测编码与变换/量化编码、熵编码并列的重要组成部分,对编解码器的性能具有重大影响。预测编码主要包括两部分:帧内预测和帧间预测。在前面的博文中我们讨论了帧内预测编码的基本原理和实现方法:

    帧内编码的图像其最主要特点是可以不依赖参考图像,可以独立解码,因而可以作为一个GOP的起点和随机接入点,即IDR帧;然而另一方面,按照帧内编码输出的码率相对较高,即压缩率较低。究其原因在于,帧内编码为了确保可独立解码这一最关键的特性,只利用了图像的空间冗余进行压缩,无法充分利用视频信息前后帧之间的关联。

    与帧内编码不同,帧间编码所利用的是视频的时间冗余。通常在视频信息中,每一帧所包含的物体对象与其前后帧之间存在运动关系,这种物体的运动关系即构成帧与帧之间的时间冗余。由于帧与帧之间物体的运动相关性大于一帧内部相邻像素之间的相关性,尤其对于时间相近的图像之间,时间冗余比空间冗余更加明显。

    图像之间物体的运动关系可由下图表示:

    二、块结构的运动估计和运动补偿

    在H.264中,压缩时间冗余并非通过前帧和后帧之间求取整帧差分这种低效率的方法。H.264是一种基于块结构的混合编码标准,因此帧间编码也以像素块的形式实现。同帧内编码类似,帧间编码同样以一个宏块(Macroblock, MB)作为最小单位进行。

    在H.264的整体流程中,帧间编码可分为几个步骤执行:

    • 预测编码(包括运动估计/运动补偿过程);
    • 变换/量化编码;
    • 熵编码;
    • 参考帧管理;

    其中,变换/量化编码和熵编码采用了与帧内编码相同或相似的方案。而预测编码采用了基于块的运动估计(Motion Estimation, ME)和运动补偿(Motion Compensation, MC)的方法,此方法与帧内预测对应,亦称为帧间预测(Inter-Frame Prediction/Inter Prediction)。在H.264框架中表示如下图所示:

    在这里插入图片描述

    三、运动估计

    运动估计,有时也称作运动搜索,即在相应参考帧中搜索当前像素块的对应参考像素块,使最终的编码代价最小。为了实现这个目标,相比帧内编码所定义的16×16和8×8两种宏块划分方式,帧间编码定义了更多、更复杂的方法。

    3.1 运动估计宏块划分

    当一个宏块将按帧间编码进行编码时,该宏块将按照某种预定义的方法进行分割。针对帧间预测,H.264定义了4种宏块分割和4种子宏块分割方式:

    • 宏块分割:16×16、16×8、8×16、8×8;
    • 子宏块分割:8×8、8×4、4×8、4×3;

    帧间预测的宏块分割如下图所示:

    在这里插入图片描述

    当某个宏块配置为8×8形式时,每个8×8宏块将按照子宏块的分割方法来进行进一步分割。

    3.2 运动矢量

    在一个帧间编码宏块中,每一个分割后的子块都会进行相应的运动搜索,在参考帧中查找对应的相同尺寸的像素块作为参考。当前像素块在当前帧中的位置同参考块在参考帧总的位置之间的相对位置代表了像素块中的物体在两帧之间的运动轨迹。这个相对位置以两个坐标值组成的矢量(MV_x, MV_y)表示,称为运动矢量(Motion Vector, MV)。一个宏块最多可能包含16个MV。一个运动矢量的例子可由下图表示:

    在这里插入图片描述
    在上图中某个像素块在参考帧和当前帧中不存在运动关系,因此运动矢量为(0,0)。

    在这里插入图片描述

    运动矢量预测

    对于一个帧间编码宏块,最多可以分割成16个4×4像素大小的子块来进行运动估计。每一个子块都按照实际的运动矢量进行编码和传输需要较多的比特数。为了提升编码的效率,H.264中定义了运动矢量预测的方法。每一个子块的运动矢量MV由计算得到的预测矢量MVP运动矢量残差MVD得到。其中,MVD从码流中相应的语法元素解析得到,MVP由相邻像素块的信息计算得到。

    由于相邻的宏块或者子块通常具有相似的运动关系和空间相关性,因此MVP的值由相邻像素块的MV值计算得到。当前块同相邻块之间的相互关系可由下图表示:

    在这里插入图片描述

    其中,当前块的MVP由A、B和C块的MV取中间值计算得到。如果像素块C不存在,那么以像素块D取而代之。如果当前宏块采用了SKIP模式编码(即码流中不传递相应的数据),则按照16×16模式宏块的方法计算MVP。

    运动矢量亚像素差值

    为了进一步提升运动估计的精度,提升视频压缩的比率,在比H.264更早的视频压缩标准中就引入了亚像素精度的运动矢量,在H.264中又得到了进一步的继承和发展。在H.264中,亮度分量的MV最高可达1/4像素精度,色度分量的MV最高可达1/8像素精度。无论1/2、1/4或1/8像素位置上的像素值在图像中都是不存在的,只是作为在运动估计过程中的一个临时值存在。

    其中,1/2像素精度的亚像素可由下图表示:

    在这里插入图片描述

    1/4像素精度的亚像素可由下图表示:

    在这里插入图片描述

    1/8像素精度的亚像素可由下图表示:

    在这里插入图片描述

    由上图可知,亚像素精度就是根据相邻像素值计算得到的,理论上存在于实际像素之间的一个中间值。其计算方法是由当前相邻的几个像素计算加权均值的方式得到,具体的计算方法定义在标准文档的8.4.2.2.1节中。亮度信息的插值如下图:

    在这里插入图片描述

    在上图中,大写字母A~U表示的是图像中实际存在的整数像素点,其他字母表示的是差值计算得到的亚像素点。对于水平和垂直方向的半像素点b和h,其计算方法为相邻6个像素的加权均值,计算方法为:

    b = (( E − 5*F + 20*G + 20*H − 5*I + J) + 16) >> 5;
    h = (( A − 5*C + 20*G + 20*M − 5*R + T) + 16) >> 5;
    

    对于四个像素的中间点j,其计算方法与b和h类似,只是用于计算加权均值的像素变为了同方向上的6个半像素点:

    j = (( cc − 5*dd + 20*h1 + 20*m1 − 5*ee + ff) + 512) >> 10;或
    j = (( aa − 5*bb + 20*b1 + 20*s1 − 5*gg + hh) + 512) >> 10;
    

    上式中的cc等像素点的计算方法类似b或h等半像素点的计算方法中的加权求和方法,已(1, -5, 20, 20, -5, 1)为权值求和。

    对于1/4像素位置的值,其计算方法更为简单,即取其相邻的整像素或半像素的值取平均即可。

    四、运动搜索快速算法

    完全的运动搜索过程是一种极为耗时的操作,其主要原因有:

    1. 运动搜索过程需要覆盖搜索区中的每个像素和亚像素;
    2. 运动搜索需要在多个参考帧中进行;

    为了解决这个问题,研究人员提出了多种运动搜索的优化算法,旨在降低运动搜索的总运算量。其中比较常见的有:

    • 三步搜索法;
    • 菱形搜索法;
    • 六边形搜索法;

    4.1 三步搜索法

    三步搜索法对比全搜索只有约1/10的计算量,而算法性能基本一致。三步搜索法如图所示:

    在这里插入图片描述

    三步搜索法运行过程:

    1. 从搜索窗口中心开始,以4为步长搜索8个点+中心点共9个点,以SAD最小的原则选择一个最佳匹配点;
    2. 以步骤1得到的最佳匹配点为中心点,以2为步长继续搜索相似的9个点,得到第二个最佳匹配点;
    3. 从第二个最佳匹配点开始,以1为步长重复上述步骤,得到最终的运动搜索匹配点;

    4.2 菱形搜索法

    菱形搜索法使用大菱形和小菱形两种模板,大菱形包含9个点,小菱形包含5个点,如下图所示:

    在这里插入图片描述

    菱形搜索法执行步骤:

    1. 从搜索窗口中心开始,按照大菱形模板搜索9个点,检查菱形中心点是否是大菱形中的最佳匹配点;
    2. 如果最佳匹配点是菱形的中心点,则进一步按照小菱形模板进行搜索;
    3. 如果最佳匹配点不是菱形中心点,则按照实际的最佳匹配点继续按大菱形模板搜索,直到找到某个最佳匹配点在大菱形模板的中心点,然后按小菱形模板搜索;

    4.3 六边形搜索法

    六边形搜索的原理同菱形搜索法类似,区别在于其大模板采用的模板为7个点的六边形形状,而小六边形模板的形状同菱形模板相同,如下图所示:

    在这里插入图片描述

    六边形搜索执行步骤:

    1. 从搜索窗口中心开始,按照大六边形模板搜索9个点,检查菱形中心点是否是大六边形中的最佳匹配点;
    2. 如果最佳匹配点是六边形的中心点,则进一步按照小六边形模板搜索;
    3. 如果最佳匹配点不是六边形中心点,则按照实际的最佳匹配点继续按大六边形模板搜索,直到找到某个最佳匹配点在大六边形模板的中心点,然后按小六边形模板搜索;
    展开全文
  • H.265/HEVC学习笔记:帧间预测编码

    千次阅读 2020-11-21 10:58:00
    帧间预测是指利用视频时间域的相关性,使用邻近已编码图像像素预测当前图像的像素,以达到去除视频时域冗余信息的目的。由于视频序列通常包括较强的时域相关性,因此预测残差通常是“平坦的”,即很多残差值接近于...
  • 为降低高效视频编码(HEVC)中预测编码复杂度和编码耗时,提出一种基于预测单元(PUs)尺寸的HEVC内预测模式快速选择的改进算法。对最大尺寸PUs利用统计概率分层构建进入粗选择模式(RMD)过程的模式列表,对其他尺寸...
  • 预测编码帧间预测(Inter-Picture Prediction)    帧间预测是指利用视频时间域相关性,使用临近已编码图像像素预测当前图像的像素,以达到有效去除视频时域冗余的目的。由于视频序列通常包括较强的时域...
  • H.264预测编码帧间预测

    千次阅读 2016-04-08 17:53:00
    预测编码是视频压缩中最基本的编码工具,常见的预测编码帧间预测和内预测。 视频编码中,主要的冗余信息是时间冗余,其次是空间冗余,视频编码通过帧间预测消除时间冗余,通过内预测消除空间冗余。接下来...
  • “纸上得来终觉浅,绝知此事要躬行”,只有自己按照标准文档以代码的形式操作一遍,才能对视频压缩编码标准的思想和方法有足够深刻的理解和体会! 链接地址:H.264/AVC视频编解码技术详解 GitHub代码地址:...
  • H.266/VVC帧间预测总结

    千次阅读 2021-08-16 21:26:13
    目前,主流视频编码标准中采用的基于块的帧间编码方式,基本原理是通过运动估计(Motion Estimate)从相邻参考重建中寻找和当前块差别最小的参考块,将其重建值作为当前块的预测块。其中参考块到当前块的位移称为...
  • HM学习(一):梳理编码过程 在HEVC中,预测的过程大致可以分为三步,首先是参考像素的填充,参考像素的平滑滤波,利用参考像素值求出预测块像素的预测值 将HM工程在VS中打开后可以看到9个主要的工程,...
  • 预测编码是指利用视频空间域的相关性,使用当前图像已编码的像素预测当前像素,然后将预测残差(当前像素真实值与预测值之间的差值)作为后续编码模块的输入,进行下一步编码处理。在解码端解码时使用同样的...
  • 帧间预测是利用视频时间域的相关性,使用邻近已编码图像像素预测当前图像的像素,以达到有效去除视频时域冗余的目的。 目前主要的视频编码标准帧间预测部分都采用了基于块的运动补偿技术,其基本原理是为当前图像的...
  • 【三】 VVC理论知识之帧间预测(1)

    千次阅读 2020-05-05 14:54:46
    帧间预测(1)
  • 针对监控视频多噪点以及存在大量静止背景的特点,以AVS视频编码标准为基础,提出了一种结合降采样视频预处理技术和及早停止准则的快速帧间预测模式选择算法。实验结果表明,该算法在保持视频主观质量相当的条件下,...
  • “纸上得来终觉浅,绝知此事要躬行”,只有自己按照标准文档以代码的形式操作一遍,才能对视频压缩编码标准的思想和方法有足够深刻的理解和体会!链接地址:H.264/AVC视频编解码技术详解GitHub代码地址:点击这里
  • AVC/H264-帧间预测

    2021-06-04 13:37:21
    帧间预测是H264标准中的一种基于时间冗余的压缩方法。因为视频流相邻存在时间相关性,相邻的视频内容差异不大,因此可以通过前后相邻的数据预测当前宏块内容,从而达到压缩数据目的。 帧间预测处理的基本单元...
  • 帧间预测编码原理

    2013-02-19 15:10:45
    帧间预测编码是利用视频图像帧间的相关性,即时间相关性,来达到图像压缩的目的,广泛用于普通电视、会议电视、视频电话、高清晰度电视的压缩编码。 在图像传输技术中,活动图像特别是电视图像是关注的主要对象。...
  • 2、帧间预测编码 2.1 运动估计(寻找最佳匹配块并找运动矢量) 运动估计是寻找当前编码的块在已编码的图像(参考)中的最佳对应块,并且计算出对应块的偏移(运动矢量)。 P为当前,Pr为参考,B为当前码块...
  • 预测编码
  • H.264预测模式的快速选择算法,程飞,,H.264视频压缩编码标准比先前的H.261和H.263标准有更好的编码效果。这主要归功于H.264标准中在编码过程中采用的大量复杂的编码压缩方法�
  • “纸上得来终觉浅,绝知此事要躬行”,只有自己按照标准文档以代码的形式操作一遍,才能对视频压缩编码标准的思想和方法有足够深刻的理解和体会! 链接地址:H.264/AVC视频编解码技术详解 GitHub代码地址:...
  • 【H2645】帧间预测

    2020-07-30 23:33:50
    1、帧间预测原理 先看下图,对比前后两图像,只有圆的位置发生变化,因此我们可以根据前一...在H.264中将这一过程叫做运动估计,它是将16x16的亮度宏块,分成16x16、16x8、8x16和8x8的子块进行帧间预测。对于8x8的块
  • 预测过程 HEVC: 在当前块内的像素被映射到参考像素之后,用最邻近的两个参考像素通过线性插值来生成预测像素值。 VVC: 对于靠近水平和垂直方向的方向预测,采用4-tap Cubic 插值滤波器来更好的保留图像的边缘...
  • 在滤波过程中,边界强度(Bs)的计算量是最大的,几乎达到整个滤波过程的90%,为了简化Bs的计算复杂度,在分析了H.264的去块滤波原理之后,提出了一种基于片类型和帧间预测的H.264去块滤波优化算法。通过实验表明,...
  • 由于最新的视频编码标准HEVC(high efficiency video coding)应用四叉树的递归结构进行编码单元的划分,使得帧间预测过程极为复杂,编码的时间效率比较低下。针对HEVC帧间预测过程,提出了一种基于纹理信息和稳定区域...
  • 首先帧间预测技术就是利用视频中邻近之间的时域相关性,使用之前已经预测编码好的重建图像作为参考,通过运动估计和运动补偿对当前的编码图像进行预测编码,从而去除视频中的时间冗余信息,大致如下图所示:Cur_...
  • H.265/HEVC预测编码

    万次阅读 多人点赞 2019-05-24 20:24:22
    前面说过,不论是图像还是视频在空域上都存在很强的相关性,也就是说对于某个像素它的像素值和其邻近的像素的像素值会很接近,利用这点来进行预测编码可以去除空域相关性压缩图像或视频体积。 内预测流程大致如下...
  • 预测编码分为内编码和帧间编码;本文主要简单介绍帧间编码的原理流程 1.帧间预测编码原理 帧间预测是利用图像与图像之间的相关性,也就是 视频时间域的相关性,通过已编码像素预测当前块的像素,有助于去除...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 17,822
精华内容 7,128
热门标签
关键字:

帧间预测编码过程