一、HEVC编码模块名词解释

2013年HEVC/H.265被ITU-T正式接受为国际标准。HEVC仍旧采用“预测+变换”的混合编码框架,如下图所示,包括变换、量化、熵编码、帧内预测、帧间预测以及环路滤波等模块。在HEVC中,几乎每个模块都引入了新的编码技术。

主要介绍HEVC编码框架,从整体结构出发介绍HEVC各个模块的大致功能以及相应的特色编码技术。

HEVC的编码框架主要包括变换、量化、熵编码、帧内预测、帧间预测以及环路滤波等模块。下面依次对各个模块做简单介绍。

1.帧内预测

帧内预测的主要功能是去除图像的空间相关性,通过编码后的重构信息块来预测当前像素块以去除空间冗余信息,提高图像的压缩效率。

在H.264/AVC中,基于4x4大小的编码块采用9种预测模式,而基于16x16大小的编码块采用4种预测模式。

在HEVC中,为了更准确地反映纹理特性,降低预测误差,提出了更为精确的帧内预测技术。对于亮度信号,HEVC提供了35种帧内预测模式,包括33种角度预测以及DC预测模式和Planar预测模式。增加的预测模式可以更好地匹配视频中复杂的纹理,得到更好的预测效果,更加有效地去除空间冗余。

2.帧间预测

帧间预测的主要功能是去除时间相关性,通过将已编码的图像作为当前帧的参考图像,来获取各个块的运动信息,从而去除时间冗余,提高压缩效率。

为了提升帧间预测性能,HEVC引入了一些新的技术,包括运动信息融合技术(Merge)、先进的运动矢量预测技术(Advanced Motion Vector Predictor,AMVP)和基于Merge的Skip模式。

运动信息融合技术(Merge):利用空域相关性和时域相关性来减少相邻块之间的运动参数冗余,具体来说就是取其相邻PU的运动参数作为当前PU的运动参数。

先进的运动矢量预测技术(Advanced Motion Vector Predictor,AMVP):AMVP技术的作用与Merge技术类似,也是利用空域相关性和时域相关性来减少运动参数的冗余。AMVP技术得到的运动矢量一方面为运动估计提供搜索起点,另一方面作为预测运动矢量使用。

基于Merge的Skip模式:后续重点介绍。。。

在HEVC中,帧间预测可以采用单向和双向的参考图像来进行预测,包括类似H.264/AVC中的分层B帧的预测结构。

3.变化量化

通过对残差数据进行变换量化以去除频域相关性,对数据进行有损压缩。变换编码将图像从时域信号变换至频域,将能量集中至低频区域。量化模块可以减小图像编码的动态范围。

RQT(Residual Quad-tree Transform)技术是一种基于四叉树结构的自适应变换技术,它为最优TU模式选择提供了很高的灵活性。大块的TU模式能够将能量更好地集中,小块的TU模式能够保存更多的图像细节。根据当前CU内残差特性,自适应选择变换块大小,可以在能量集中和细节保留两者做最优的折中,与传统的固定块大小的变换相比,RQT对编码效率贡献更大。

变换编码和量化模块从原理上属于两个相互独立的过程,但是在HEVC中,两个过程相互结合,减少了计算的复杂度。

4.环路滤波

在HEVC中,环路滤波模块主要包括去块滤波器(DBF)和样点自适应补偿滤波(SAO)。DBF的主要作用是去方块效应,而SAO的主要作用是去除振铃效应。这部分的具体分析在《HEVC算法和体系结构:环路滤波技术》中已有详细介绍。

5.熵编码

熵编码模块将编码控制数据、量化变换系数、帧内预测数据、运动数据、滤波器控制数据编码为二进制进行存储和传输。熵编码模块的输出数据即是原始视频压缩后的码流。
在HEVC中,采用了基于上下文的自适应二进制算术编码(CABAC)进行熵编码,引入了并行处理架构,在速度、压缩率和内存占用等方面均得到了大幅度改善。

接下来介绍HEVC的两个容易被忽略的新技术:ACS和IBDI。

6.ACS技术

ACS(Adaptive Coefficient Scanning)包括三类:对角扫描、水平扫描和垂直扫描。ACS技术是基于4x4块单元进行的,将一个TU划分为多个4x4块单元,每个4x4块单元内部以及各个4x4块单元之间都按照相同的扫描顺序进行扫描。

对于帧内预测区域的4x4和8x8尺寸的TU,根据所采用的帧内预测方向来选择扫描方法:当预测方向接近水平方向时采用垂直扫描;当预测方向接近于垂直方向时就选用水平扫描,对于其他预测方向使用对角扫描。

对于帧间预测区域,无论TU尺寸多大都采用对角扫描方式。

7.IBDI技术
IBDI(Internal Bit Depth Increase)技术是指在编码器的输入端将未压缩图像像素深度由P比特增加到Q比特(Q>P),在解码器的输出端又将解压缩图像像素深度从Q比特恢复至P比特。

IBDI技术提高了编码器的编码精度,降低了帧内/帧间预测误差。但由于要建立参考队列,像素深度为Q比特的重构图像须占用较大的内存空间。此外,在进行帧间运动估计和补偿时,需要较多的内存访问带宽,这样会给内存受限的系统带来不便,解决的方法是引入参考帧压缩算法,来减小重构图像的数据量。

二、帧内、帧间编码流程

1、HEVC混和编码架框
网上的HEVC框架图出自Overview of the High Efficiency Video Coding  (HEVC) Standard,如下图所示。但是这张图初看起来非常复杂,而网上也没有解释得比较详细的文章,因此本文的目的就是来详细分析这张图,即分析HEVC编码过程中大致流程。

首先第一个问题:何为混合编码?我理解的是对同一帧数据使用帧内编码和帧间编码多个编码策略,那么上图综合了两种编码策略,自然看起来十分复杂,下面将分别分析帧内编码和帧间编码,用化繁为简的方式进行讨论。

2、帧内编码
这里把帧内编码部分分离出来,视频第一帧的编码过程也只采用帧内编码,并忽略其他辅助因素的干扰,绘制以下框架图。

黑色线条部分不论是帧内/帧间都一样,蓝色线条是帧内编码走的路径。编码步骤如下:

1.图像首先被分割为块状区域;
2.数据进行帧内估算(编码器),进行帧内编码;
3.进行帧内预测(反编码),注意,此时帧内预测得到数据与分块原图像帧应有些许偏差;
4.分块原图像帧减去帧内预测结果,得到帧内残差信号;
5.残差信号经过线性变换,变换后的系数再经过缩放、量化;
6.将处理后的残差信号系数经过反处理,得到残差信号,注意与原残差存在偏差;
7.将残差信号加上帧内预测信号,可得到分块预测图像帧;
8.最终通过环路滤波和自适应补偿,去除“分块效应”,得到未经分块的图像帧;
9.帧内编码信号和残差信号系数一起进行熵编码后输出。

3、帧间编码
大部分图像帧需要进行帧间编码过程,帧间编码框架图如下图所示。

同样,绿色线条为帧间编码专属过程,编码过程如下:

1.分块图像帧数据输入运动估算模块(编码器),再结合上一步帧内预测获得的上/下一幅图像帧数据,进行帧间编码;
2.对帧间编码数据进行运动补偿(帧间预测,解码器),注意,解码得到的图像帧与原图像块数据存在残差;
3.分块原图像帧减去帧间预测结果,得到帧内残差信号;
4.残差信号经过线性变换,变换后的系数再经过缩放、量化;
5.将处理后的残差信号系数经过反处理,得到残差信号,注意与原残差存在偏差;
6.将残差信号加上帧间预测信号,可得到分块预测图像帧;
7.最终通过环路滤波和自适应补偿,去除“分块效应”,得到未经分块的图像帧;
8.帧间编码信号和残差信号系数一起进行熵编码后输出。

4、混合编码
第2节和第3节分别说明了帧内编码和帧间编码涉及模块,主要过程已经分析完毕,但注意到图2、3和图1之间仍有较大差异,接下来就将全局考量,并说明剩余部分的作用,重绘混合编码框架如下图所示。

图中红色内容是前面的图省略的,省略的模块有两部分,包括编码控制模块和滤波控制模块,其中编码控制模块对框架内的编码和量化过程进行控制,因为编码和量化过程可以使用多种不同的策略,滤波控制模块也是必须的。熵编码输入数据很多,必要的图像帧和熵编码一同输出,因为帧间编码时需要参考其他图像帧。

H265框架编码流程(一)相关推荐

  1. H265框架编码流程(一),网易Android面试必问

    帧间预测的主要功能是去除时间相关性,通过将已编码的图像作为当前帧的参考图像,来获取各个块的运动信息,从而去除时间冗余,提高压缩效率. 为了提升帧间预测性能,HEVC引入了一些新的技术,包括运动信息融合 ...

  2. X264编码流程详解(转)

    http://blog.csdn.net/xingyu19871124/article/details/7671634 对H.264编码标准一直停留在理解原理的基础上,对于一个实际投入使用的编码器是如 ...

  3. 华为9.0以上系统如何没root激活XPOSED框架的流程

    在大多运行室的引流或者业务操作中,理论上需要使用安卓的高端技术XPOSED框架,最近我们运行室买来了一批新的华为9.0以上系统,理论上都是基于7.0以上系统版本,理论上不能够获取Root的su权限,即 ...

  4. 华为9.0系统机器一键激活xposed框架的流程

    对于喜欢钻研手机的小伙伴而言,经常会使用到Xposed框架及其种类繁多功能彪悍的模块,对于5.0以下的系统版本,只要手机能获得Root权限,安装和激活Xposed框架是非常简易的,但随着系统版本的不断 ...

  5. 多解决些问题,少谈些框架和流程

    大概我刚刚毕业那会,是常常喜欢在群里和网友谈论框架的,尤其是游戏服务器的框架设计,比如网关啦,逻辑服务器啦,地图服务器啦,登陆服务器啦等等,巴拉巴拉一大堆:我那会大概是刚刚接触游戏开发,刚刚明白了一条 ...

  6. 学习笔记(一)(x264编码流程)

    学习笔记(一)(x264编码流程) 作者 张士辉 11月 2, 2007 <script type=text/javascript></script> <script s ...

  7. React功能界面的组件化编码流程

    功能界面的组件化编码流程(通用) 1.拆分组件: 拆分界面,抽取组件 2.实现静态组件: 使用组件实现静态页面效果 3.实现动态组件 3.1 动态显示初始化数据 3.1.1 数据类型 3.1.2 数据 ...

  8. ssh框架配置文件流程_通过配置文件和安排增强您的工作流程

    ssh框架配置文件流程 by Marcus Wood 由马库斯·伍德(Marcus Wood) 通过配置文件和安排增强您的工作流程 (Supercharge your workflow with pr ...

  9. OpenCart框架运行流程介绍opencart资料链接

    opencart 主要文件夹结构和文件说明 opencart 单入口文件简单分析 opencart中文使用手册 opencart 模块开发详解 OpenCart源码目录结构详解 opencart中的l ...

最新文章

  1. linux系统下文件命令详解
  2. Redis第二集:Linux下安装Redis和测试,包含命令代码和问题处理办法,超详细版
  3. 【学习笔记】深入理解js原型和闭包(5)——instanceof
  4. beta阶段140字评论
  5. Fiori 出试(WEBIDE平台)day1
  6. 《穿靴子的猫》蓝光720P 1080P高清中英双字 下载
  7. 为今天的光纤检测选择光纤示波器
  8. dmg镜像 os vm 安装mac_dmg制作笔记:个性化自己的Mac软件安装包
  9. Helix Streaming Server 简单配置
  10. javaEE插件安装
  11. java获取不到ipv6的网卡
  12. xml 标签带有号php,php截取字符串并保留完整xml标签的函数代码
  13. IplImage 应用解读
  14. 数学分析对计算机有帮助吗,计算机辅助数学分析教学的好处
  15. js删除某个节点之后的所有节点
  16. Norgen提取试剂盒丨血浆/血清循环和核外RNA提取试剂盒
  17. 2021-05-03
  18. [ZZ]浅谈中国B2C珍珑棋局
  19. windows无法启动 bcd linux efi,bcdedit 无法打开启动配置数据存储的终极解决办法
  20. PB的Graph图形控件

热门文章

  1. 《图像处理实例》 之 寻找山脊线
  2. Android--Handler的使用方法:在子线程中更新界面
  3. 浅谈ASP.NET客户端回调
  4. IT也要健康:帮助你保持健康的几个重要因素
  5. cisco交换机端口“假死”现象
  6. Pytext简介:facebook的基于PyTorch的NLP框架
  7. 安装 SQL Server Compact Edition 及 与PC 数据同步的部署
  8. c++11新特性的使用---可变模板参数、type_traits、function综合使用
  9. wpf ui框架_替代Silverlight:微软面向Web开发者推出Blazor新框架
  10. java 导出密钥_java-如何从密钥库中导出.key和.crt