一、帧间预测基本原理

主要原理是为当前图像的每个像素块在之前已编码图像中寻找一个最佳匹配块,该过程称为运动估计( Motion Estimation,ME)。其中用于预测的图像称为参考图(Reference Frame),参考块到当前像素块的位移称为运动向量(Motion Vector, MV),当前像素块与参考块的差值称为预测残差( Prediction Residual )。

二、原理展开

如果说按照每个像素去参考帧上面去找一个最匹配的像素,然后传输像素到参考像素的位移信息,那么编码处理的数据将非常大。在HEVC中处理是将图像划分成一个一个块,这些块就称为pu块。然后基于块去找匹配块,每个块传输一个块的位移信息。 块怎么划分的?块是基于一定的准则进行,这个准则就是在编出来的码流大小和编码误差取到一个平衡点。

  • 怎么提高帧间预测的精度

  1. 1 CU块划分成PU

为了尽量提高运动补偿的精度,HEVC帧间预测的编码块 支持更多的预测块划分模式。基于不同的划分模式 ,每个 CU 可以经过不同的划分,得到多个 PU。不同大小块的组合 使得编码器可以根据视频内容自适应地选择块大小,例如对于多细节运动区域以及两个具有不同运动形式的不规则物体的边界处可以使用小块,而静止区域或大面积共同运动区域可以使用较大的块。

  1. 2、亚像素插值

在实际场景中,由于物体运动的距离并不一定是像素的整数倍,因此需要将运动估计的精度提升到亚像素级别。H.265/HEVC沿用了,上一代标准H.264/AVC所使用的1/4 像素精度运动估计,并进一步发展了其亚像素插值算法。相比于H.264/AVC中的6抽头滤波器(用于半像素精度)以及两点内插(用于1/4像素精度)方法,H.265/HEVC使用了更多的邻近像素点进行亚像素精度插值。 为实现 1/K 像 素精度估计,必须将这些分数像素点的值近似内插出来,即对参考帧的行方向和列 方向进行 K 倍内插。如 K=2,须在 1/2 像素处进行插值,在插值后的图像中进行搜 索,称为半像素精度估计。

  • 怎么去减少帧间预测的数据量

从前面的基本原理知道,帧间模块生成的码流数据包括两个部分 一个是预测残差一个运动向量mv。残差由后面的变化 量化过程去减少数据量。

mv则需要其他技术来减少数据量。hevc利用Merge 和AMVP 技术,利用时域或空域的mv来预测当前mv。 merge 不需要传输mv的残差(mvd),AMVP 需要传输(mvd)。

总的来说虽然运动估计的帧间预测大大压缩了原始视频的数据量,但仍然需要将运动矢 量本身的数据传送到解码器,若对每个块的运动矢量都进行编码,那么编码也极其 复杂。视频图像中的物体往往会覆盖多个块,基于运动的一致性,邻近块之间应该 存在着很强的相关性。利用此相关性在先前已编码的邻近块的运动矢量进行预测, 此时,只需将当前运动矢量和预测运动矢量之间的差值传输到解码器,就可以有效 地压缩运动矢量的编码比特数。

运动矢量的预测方式有两种:空域预测和时域预测。

  • 空域预测方式

空域候选从与当前PU相邻的5个PU中,挑选最多4个PU的运动信息添加到候选列表中,如图所示的A0、A1、B0、B1和B2。但并非所有的空域相邻PU都可得,当相应的候选不可用,不被添加到候选列表中。加入候选列表的顺序为A1、B1、B0、A0和

B2。

  • 时域预测方式

记当前预测单元为Cur_PU,参考帧列表中距离当前帧最近的一个参考帧为Col_Pic,其中“同一位置”上的预测块为Col PU, Col_PU的参考帧为Col_Ref. tb分别表示当前图像cur_ pic、同位图像col_ pic 与二者参考图像cur_ ref、col_ ref 之间的距离。则当前PU的时域候选MV可由下式计算:

curMV =(td/tb)*colMV

其中colMV为“同一位置”PU的MV。

同一位置”的选择如下图所示,首先选择C3,若Co不可用则选择H。

  • 1、merge技术

merge顾名思义 就是融合,就是本来应该是每个pu一个mv,现在因为pu之间的相关性,使得空域或者时域上面多个pu用的都是同一个mv了。多个pu就相当于融合一个pu了。

Merge 模式下,HEVC 在时间域、空间域预测得到运动矢量,比特流中不含有任何运动信息,解码端对当前编码块进行时间域及空间域的预测形成一个候选列表,由编码器选择其中最优的一个作为当前块的运动参数并编码其索引值。另一个不同点是,MERGE模式侧重于将当前块与周边已编码的预测块进行融合,形成运动参数一致的不规则区域,从而改进四叉树分解中固定的方块划分的缺点。

融合的目标候选块有两类:空间上相邻的已编码块和时间上相邻的已编码块。在空间相邻块中最多可以从5个不同位置上选择其中的4个;在时间相邻块中最多可以从2个中选择一个。在候选块的选择过程中要去除其中运动参数重复的候选块,同时还要去除其中使得与当前预测块融合后形成一个等同于2N x 2N的预测块的候选块。当候选块的个数不超过设定的最大值时,由已有的候选块的运动参数产生新的运动参数或者用0进行填补。

  • 2、AMVP技术

对于AMVP模式的帧间预测模式,运动向量的预测器同样也是从几个候选值中选取。在对运动向量进行差分编码时,需要传输所选最优候选预测器的索引值以及运动向量的预测残差。AMVP模式空域候选值与MERGE模式中空域候选值的位置一样,不同的是,AMVP模式从{A0,A1}和{B0,B1, B2}中分别按顺序选择第一个可用的加入到候选预测器列表中。AMVP模式候选预测器的个数固定为2个,当以上选择的候选预测器少于2个时,则加入时域上相邻块的运动向量,选择的方法与MERGE模式相同。最后,若候选预测器的个数仍然小于2,则用值为0的运动向量填补。对于空间相邻块得到的运动向量预测器,根据其参考帧与当前参考帧的不同做相应的缩放。实际的运动向量需要通过运动估计得到,将预测器的数量减少到2可以降低运动估计的复杂度。同时,因为在AMVP模式中还需要编码运动向量的预测残差,所以减少预测器的数量不会给编码效率带来太大影响。

  • AMVP怎么得到MVD

依周边预测的MV(MVP)为起点 搜索出来失真最小的 点 计算到最佳mv。最佳mv - mvp。

HEVC帧间预测原理相关推荐

  1. 【HEVC帧间预测论文】P1.2 An Efficient Inter Mode Decision Approach for H.264 Video Codin

    参考:An Efficient Inter Mode Decision Approach for H.264 Video Coding <HEVC标准介绍.HEVC帧间预测论文笔记>系列博 ...

  2. HEVC帧间预测流程梳理

    HEVC帧间预测流程 前言:最近在琢磨hevc理论知识,看着那本书绕过去绕过来咋也没把流程想通,去找了师兄说耽误他一分钟,结果叭叭叭了六小时哈哈哈哈. 最后还是感谢师兄给我解答问题,我写这篇文章主要是 ...

  3. HEVC代码学习:帧间预测——MVP过程中MV的获取、传递及存储

    作为一个视频编码小白,最近开始着手啃HEVC帧间预测的代码,想用博客记录一下自己的学习过程,也想与大家分享.交流一下. HEVC代码的学习主要是参考两位大神岳麓吹雪.NB_vol_1的博客以及HM参考 ...

  4. HEVC代码学习——帧间预测:预测MV获取(xEstimateMvPredAMVP、fillMVPCand)

    HEVC帧间预测在AMVP模式下是依靠xEstimateMvPredAMVP函数获取预测MV(MVP)的. 这部分内容的学习还可以参考这两篇博客: HEVC代码学习15:AMVP相关函数 HM编码器代 ...

  5. 【H2645】帧间预测

    1.帧间预测原理 先看下图,对比前后两帧图像,只有圆的位置发生变化,因此我们可以根据前一帧图像以及圆移动的信息,合成后一帧图像.这样少编码一帧图像,大大压缩了数据. 实际情况如下图,比对前后两帧,背景 ...

  6. Overview of HEVC之5 帧间预测

    预测块(PB)的划分:与帧内预测的CB相比, HEVC为帧间预测的CB提供了更多的PB划分形状: PART_2N×2N的划分模式表示CB不划分:PART_2N×N的划分模式表示CB水平划分成两个相等尺 ...

  7. HEVC参考软件HM源码分析--帧间预测(1)--xCompressCU

    本文首先对HM中帧间预测的基本流程作简要介绍,接着对代码中关键变量的用途作出说明,最后以源代码+注释的形式进行具体分析. 备注:这位大神的博客对楼主帮助很大,解决了我的不少疑惑,最后才能顺利写下这篇博 ...

  8. 【Codecs系列】HEVC标准(五):帧间预测技术及x265实现分析

    DATE: 2021.12.27 文章目录 1.帧间关键技术 1.1.Merge/Skip 1.2.AMVP 1.2.1 Inter模式下的AMVP技术 1.2.2 Merge模式下的AMVP技术 1 ...

  9. HEVC标准(draft)翻译--帧间预测1

    参考文档JCTVC-B205_draft007.doc /*由于直接从word文档拷贝,各标题序号有误,所有标号为1.1....的应为6.3.....*/ 1.1                帧间预 ...

最新文章

  1. jquery 监听的案例
  2. 组合部分标签向量并累加成完整向量
  3. 有用的sql(mysql)
  4. 商品评价 - 信息脱敏
  5. 重构手法——提炼函数、搬移函数、以多态取代条件表达式
  6. python3字典相关方法
  7. datatable 动态显示/隐藏列
  8. c语言长度宏定义运算符,C语言在宏定义中使用语句表达式和预处理器运算符
  9. PyTorch发布一周年:盘点社区和工程大事件,后来者居上态势已显?
  10. 半个月自学入行软件测试,也许你就是下一个测试总监
  11. php如何修改xml中的数据,php如何修改xml内容
  12. php 农历日历,php下实现农历日历的代码_php实例
  13. 最近很多面试都是考研凉凉的,心塞!
  14. plsql保持长连接_知乎千万级高性能长连接网关是如何搭建的
  15. 【DotNet 技能系列】VS工具快捷键及常用技巧
  16. 2. PHP 编译安装
  17. 数学建模-模糊数学模型
  18. Macintosh30周年回顾视频 ---转自36kr
  19. 虚拟互动展会沉浸式体验方案设计优势
  20. db2实例和数据库关系

热门文章

  1. 测试行业3年经验,从大厂裸辞后,面试阿里、字节全都一面挂,被面试官说我的水平还不如应届生
  2. php 微信token验证失败,php下微信token验证失败怎么办?
  3. vue中将水印加在页面的某一部分
  4. css li修改小圆点的颜色
  5. 面试的时候怎样自我介绍更有效果?
  6. (十一)java.io.File学习进阶及separator、pathSeparator分隔符简介
  7. 机器学习复习:线性回归1
  8. discuz默认显示用户昵称
  9. 赵小楼《天道》《遥远的救世主》深度解析(47)为什么要给韩楚风的司机小赵点赞?芮小丹是怎么做到“反客为主、打破阶层”的?
  10. 发扑克牌java程序_Java实现简易扑克牌游戏