精华内容
下载资源
问答
  • 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. 如果最佳匹配点不是六边形中心点,则按照实际的最佳匹配点继续按大六边形模板搜索,直到找到某个最佳匹配点在大六边形模板的中心点,然后按小六边形模板搜索;
    展开全文
  • 2、帧间预测编码 2.1 运动估计(寻找最佳匹配块并找运动矢量) 运动估计是寻找当前编码的块在已编码的图像(参考帧)中的最佳对应块,并且计算出对应块的偏移(运动矢量)。 P为当前帧,Pr为参考帧,B为当前码块...

    1、帧内预测编码

    2、帧间预测编码

     

    2.1 运动估计(寻找最佳匹配块并找运动矢量)

    运动估计是寻找当前编码的块在已编码的图像(参考帧)中的最佳对应块,并且计算出对应块的偏移(运动矢量)。

    P为当前帧,Pr为参考帧,B为当前码块,Br是Pr中与B块相减残差最小的块,Br称为B的最佳匹配块。

    B*与B在图像中的坐标位置相同,Br坐标为(Xr,Yr),B*坐标为(Xr,Yr)。Br坐标减去B*的坐标就是运动矢量MV。

     

    由于全局搜索耗费时间太多,所以可考虑采用散步搜索法

    2.1.1 运动矢量

     

     

    2.2 运动补偿

     运动补偿是根据运动矢量和帧间预测方法,求得当前帧的估计值过程。其实说白了就是将运动矢量参数贴到参考帧上获取当前帧。另外运动补偿是一个过程

    转载于:https://www.cnblogs.com/qing1991/p/10085171.html

    展开全文
  • h.264的帧间预测编码

    2010-10-24 22:27:54
    h.264的帧间预测编码,包括各种方式的预测编码,给初学者好的范例
  • 帧间预测编码原理

    万次阅读 2012-08-22 10:52:46
    帧间预测编码是利用视频图像帧间的相关性,即时间相关性,来达到图像压缩的目的,广泛用于普通电视、会议电视、视频电话、高清晰度电视的压缩编码。 在图像传输技术中,活动图像特别是电视图像是关注的主要对象。...

    帧间预测编码是利用视频图像帧间的相关性,即时间相关性,来达到图像压缩的目的,广泛用于普通电视、会议电视、视频电话、高清晰度电视的压缩编码。

    在图像传输技术中,活动图像特别是电视图像是关注的主要对象。活动图像是由时间上以帧周期为间隔的连续图像帧组成的时间图像序列,它在时间上比在空间上具有更大的相关性。大多数电视图像相邻帧间细节变化是很小的,即视频图像帧间具有很强的相关性,利用帧所具有的相关性的特点进行帧间编码,可获得比帧内编码高得多的压缩比。对于静止图像或活动很慢的图像,可以少传一些帧,如隔帧传输,未传输的帧,利用接收端的帧存储器中前一帧的数据作为该帧数据,对视觉没有什么影响。因为人眼对图像中静止或活动慢的部分,要求有较高的空间分辨率,而对时间分辨率的要求可低些。这种方法叫帧重复方法,广泛应用于视频电话、视频会议系统中,其图像帧速率一般为1~15帧/秒。

    采用预测编码的方法消除序列图像在时间上的相关性,即不直接传送当前帧的像素值,而是传送x和其前一帧或后一帧的对应像素x'' 之间的差值,这称为帧间预测。当图像中存在着运动物体时,简单的预测不能收到好的效果,例如在图04-01-6中当前帧与前一帧的背景完全一样,只是小球平移了一个位置,如果简单地以第k-1帧像素值作为k帧的预测值,则在实线和虚线所示的圆内的预测误差都不为零。如果已经知道了小球运动的方向和速度,可以从小球在k-1帧的位置推算出它在k帧中的位置来,而背景图像(不考虑被遮挡的部分)仍以前一帧的背景代替,将这种考虑了小球位移的k-1帧图像作为k帧的预测值,就比简单的预测准确得多,从而可以达到更高的数据压缩比。这种预测方法称为具有运动补偿的帧间预测。

    帧间预测编码原理(转) - wpf - 小小e家人

    图 04-01-6 帧间预测与具有运动补偿的帧间预测

    具有运动补偿的帧间预测编码是视频压缩的关键技术之一,它包括以下几个步骤:首先,将图像分解成相对静止的背景和若干运动的物体,各个物体可能有不同的位移,但构成每个物体的所有像素的位移相同,通过运动估值得到每个物体的位移矢量;然后,利用位移矢量计算经运动补偿后的预测值;最后对预测误差进行量化、编码、传输,同时将位移矢量和图像分解方式等信息送到接收端。图04-01-7示出了具有运动补偿的帧间预测器的原理框图。

    帧间预测编码原理(转) - wpf - 小小e家人

    图04-01-7 具有运动补偿的帧间预测器功能框图

    在具有运动补偿的帧间预测编码系统中,对图像静止区和不同运动区的实时完善分解和运动矢量计算是较为复杂和困难的。在实际实现时经常采用的是像素递归法和块匹配法两种简化的办法。

    像素递归法的具体作法是,仍需通过某种较为简单的方法首先将图像分割成运动区和静止区。在静止区内像素的位移为零,不进行递归运算;对运动区内的像素,利用该像素左边或正上方像素的位移矢量D作为本像素的位移矢量,然后用前一帧对应位置上经位移D后的像素值作为当前帧中该像素的预测值。如果预测误差小于某一阈值,则认为该像素可预测,无需传送信息;如果预测误差大于该阈值,编码器则需传送量化后的预测误差、以及该像素的地址,收、发双方各自根据量化后的预测误差更新位移矢量。由此可见,像素递归法是对每一个像素根据预测误差递归地给出一个估计的位移矢量,因而不需要单独传送位移矢量给接收端。

    块匹配法是另一种更为简单的运动估值方法。它将图像划分为许多子块,并认为子块内所有像素的位移量是相同的,这意味着将每个子块视为一个“运动物体”。对于某一时间t,图像帧中的某一子块如果在另一时间t-t1的帧中可以找到若干与其十分相似的子块,则称其中最为相似的子块为匹配块,并认为该匹配块是时间t-t1的帧中相应子块位移的结果。位移矢量由两帧中相应子块的坐标决定。

    考虑到一定时间间隔内物体可能的运动速度、运动范围和匹配搜索所需的计算量,在匹配搜索时一般仅在一个有限范围内进行。假设在给定时间间隔内最大可能的水平和垂直位移为d h和d v个像素,则搜索范围SR为

       帧间预测编码原理(转) - wpf - 小小e家人

    其中M、N为子块的水平和垂直像素数。

    在块匹配方法中需要解决两个问题:一是确定判别两个子块匹配的准则;二是寻找计算量最少的匹配搜索算法。判断两个子块相似程度的准则可以利用两个块间归一化的二维互相关函数、两子块间亮度的均方差MSE或两子块间亮度差绝对值的均值MAD等。通过对不同判别准则的比较研究表明,各种判别准则对位移矢量的估值精度影响差别不是很大。由于MAD准则的计算不含有乘法和除法运算而成为最常使用的匹配判别准则。MAD准则定义如下:

    帧间预测编码原理(转) - wpf - 小小e家人

    其中Xk和Xk-1分别表示图像在第k帧和第k-1帧的像素值。当MAD最小时,表示两个子块匹配。

    对于匹配搜索算法,最简单和直接的方法就是全搜索方式,即将第k-1帧中的子块在整个搜索区内逐个像素移动,每移动一次计算一次判决函数。总的移动次数为 (2d h + 1)(2d v + 1)。当d h = d v = 6时,总的计算次数为169。显然,全搜索的运算量是相当大的。为了加快搜索过程,人们提出了许多不同的搜索方法,其中应用较广的有二维对数法、三步法、共轭方向法和正交搜索法。这几种方法都基于如下的假设:当偏离最小误差方向时,判决函数是单调上升的,搜索总沿着判决函数值减小的方向进行。上述几种方案所需的搜索步骤和计算点数略有差异,但基本思路是一致的。

    通过上面介绍的两种运动矢量估值方法可以看出,像素递归法对每一个像素给出一个估计的位移矢量,因而对较小面积物体的运动估值较为精确。但像素递归法在估值时需要进行叠代运算,从而存在着收敛速度和稳定性问题。块匹配法对同一子块内位移量不同的像素只能给出同一个位移估值,限制了对每一像素的估值精度。但对于面积较大的运动物体而言,采用块匹配法的预测要比采用像素递归法的预测效果好。另外,从软硬件实现角度看,块匹配算法相对简单,在实际活动图像压缩编码系统中得到较为普遍的应用。


    展开全文
  • 在对静止图像进行压缩时,能够像对视频编码中的帧间预测编码一样,输入两幅相似图像进行编码,以提高其压缩率。 这个如何实现呢?
  • 帧内、帧间预测编码效率比较

    千次阅读 2017-08-22 16:30:21
    在之前的各种文献中都看到过这样的结论:帧间预测编码增益要高于帧内预测。可是从来没看过详细解释,今天来总结一下。首先来看原理: 帧内预测——基于同一帧内已编码块预测,构造预测块,计算与当前块的残差,对...

    在之前的各种文献中都看到过这样的结论:帧间预测的编码效率要高于帧内预测。可是从来没看过详细解释,今天来总结一下。注意这里谈论的编码效率是整体而言的

    从理论入手

    首先来看原理:
    帧内预测——基于同一帧内已编码块预测,构造预测块,计算与当前块的残差,对残差、预测模式等信息进行编码。其主要去除的是空域冗余
    帧间预测——基于一个或多个已编码帧预测,构造预测块,计算与当前块的残差,对残差、预测模式、运动矢量残差、参考图像索引等信息进行编码。其主要去除的是时域冗余

    简单的来说,帧内预测可以看做空域预测,而帧间预测可以看做时域预测。比较帧内帧间的编码效率应该从空域和时域的冗余来考虑。

    在《H.265/HEVC——视频编码新标准及其扩展》一书中看到了比较详细的解释。

    一般而言,帧间预测编码效率比帧内预测更高,其原因在于视频的帧间相关性很强,信息的冗余度很高。例如,有统计结果表明,对内容变化不快的256级灰度视频序列,相邻帧之间的帧间差绝对值超过3的像素平均不到一帧像素的4%;对内容变化剧烈的256%级灰度视频序列,帧间差绝对值平均不到一帧像素的7.5%。

    可见,视频的时域冗余相当大,帧间预测可以获得相当高的编码效率。

    再来想象一下空域冗余的情况。对于平坦视频,空域相关性是十分强的,帧内预测可以获得很不错的编码效率。但并不是所有视频都会有很大的平坦区域,更多情况下视频纹理会比较复杂,平坦区域只是一部分,此时帧内预测效果就不是很理想了。

    因此整体而言,帧间预测的编码效率要高于帧内预测。

    我之前还产生过这样的疑惑:
    帧间预测还要编码运动矢量残差,在运动较多的视频中,运动矢量残差将占整体码流的很大一部分。那这时,是不是帧间预测编码效率就比帧内预测低呢?当然不是。

    运动矢量编码虽然增加了编码数据量,但是毕竟一个块才只有一个运动矢量残差,整体而言,还是块残差数据量更大一些。因此不能直接从这个方面考虑。

    从码流入手

    上面说的都是理论,其实最直观的还是从码流入手。
    下面是一个视频RA模式下的最终码流数据:

    SUMMARY --------------------------------------------------------
        Total Frames |   Bitrate     Y-PSNR    U-PSNR    V-PSNR    YUV-PSNR  
               97    a    9503.7328   43.5410   51.8656   51.3843   44.9325  
    
    I Slices--------------------------------------------------------
        Total Frames |   Bitrate     Y-PSNR    U-PSNR    V-PSNR    YUV-PSNR  
                4    i  150206.7600   46.2157   52.3800   52.0057   47.4596  
    
    P Slices--------------------------------------------------------
        Total Frames |   Bitrate     Y-PSNR    U-PSNR    V-PSNR    YUV-PSNR 
                0    p      -1.#IND   -1.#IND   -1.#IND   -1.#IND   -1.#IND
    
    
    B Slices--------------------------------------------------------
        Total Frames |   Bitrate     Y-PSNR    U-PSNR    V-PSNR    YUV-PSNR  
               93    b    3451.9897   43.4259   51.8435   51.3575   44.8509  
    
    RVM: 0.000
    Bytes written to file: 3841524 (9504.802 kbps)
    
     Total Time:     8340.854 sec.
    

    可以看到,I帧仅有4帧,但数据量相当大,而B帧有97帧,总数据量要小很多。I帧只是用帧内预测,而B帧既有帧内预测又有帧间预测,帧间预测的编码效率是显而易见的。

    展开全文
  • “纸上得来终觉浅,绝知此事要躬行”,只有自己按照标准文档以代码的形式操作一遍,才能对视频压缩编码标准的思想和方法有足够深刻的理解和体会! 链接地址:H.264/AVC视频编解码技术详解 GitHub代码地址:...
  • 某一帧图像在解码完成后,可能会被保存于解码图像缓存中,用于后续图像帧间预测的参考帧。在解码图像缓存中,用于P帧或B帧帧间编码的参考帧图像保存为一个或两个参考帧列表,列表中参考帧的顺序可
  • 帧间预测是指利用视频时间域的相关性,使用邻近已编码图像像素预测当前图像的像素,以达到去除视频时域冗余信息的目的。由于视频序列通常包括较强的时域相关性,因此预测残差通常是“平坦的”,即很多残差值接近于...
  • if( picNumLXNoWrap > CurrPicNum ) picNumLX = picNumLXNoWrap − MaxPicNum else picNumLX = picNumLXNoWrap
  • “纸上得来终觉浅,绝知此事要躬行”,只有自己按照标准文档以代码的形式操作一遍,才能对视频压缩编码标准的思想和方法有足够深刻的理解和体会! 链接地址:H.264/AVC视频编解码技术详解 GitHub代码地址:...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 672
精华内容 268
关键字:

帧间预测编码