H265框架编码流程(一)
一、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框架编码流程(一)相关推荐
- H265框架编码流程(一),网易Android面试必问
帧间预测的主要功能是去除时间相关性,通过将已编码的图像作为当前帧的参考图像,来获取各个块的运动信息,从而去除时间冗余,提高压缩效率. 为了提升帧间预测性能,HEVC引入了一些新的技术,包括运动信息融合 ...
- X264编码流程详解(转)
http://blog.csdn.net/xingyu19871124/article/details/7671634 对H.264编码标准一直停留在理解原理的基础上,对于一个实际投入使用的编码器是如 ...
- 华为9.0以上系统如何没root激活XPOSED框架的流程
在大多运行室的引流或者业务操作中,理论上需要使用安卓的高端技术XPOSED框架,最近我们运行室买来了一批新的华为9.0以上系统,理论上都是基于7.0以上系统版本,理论上不能够获取Root的su权限,即 ...
- 华为9.0系统机器一键激活xposed框架的流程
对于喜欢钻研手机的小伙伴而言,经常会使用到Xposed框架及其种类繁多功能彪悍的模块,对于5.0以下的系统版本,只要手机能获得Root权限,安装和激活Xposed框架是非常简易的,但随着系统版本的不断 ...
- 多解决些问题,少谈些框架和流程
大概我刚刚毕业那会,是常常喜欢在群里和网友谈论框架的,尤其是游戏服务器的框架设计,比如网关啦,逻辑服务器啦,地图服务器啦,登陆服务器啦等等,巴拉巴拉一大堆:我那会大概是刚刚接触游戏开发,刚刚明白了一条 ...
- 学习笔记(一)(x264编码流程)
学习笔记(一)(x264编码流程) 作者 张士辉 11月 2, 2007 <script type=text/javascript></script> <script s ...
- React功能界面的组件化编码流程
功能界面的组件化编码流程(通用) 1.拆分组件: 拆分界面,抽取组件 2.实现静态组件: 使用组件实现静态页面效果 3.实现动态组件 3.1 动态显示初始化数据 3.1.1 数据类型 3.1.2 数据 ...
- ssh框架配置文件流程_通过配置文件和安排增强您的工作流程
ssh框架配置文件流程 by Marcus Wood 由马库斯·伍德(Marcus Wood) 通过配置文件和安排增强您的工作流程 (Supercharge your workflow with pr ...
- OpenCart框架运行流程介绍opencart资料链接
opencart 主要文件夹结构和文件说明 opencart 单入口文件简单分析 opencart中文使用手册 opencart 模块开发详解 OpenCart源码目录结构详解 opencart中的l ...
最新文章
- linux系统下文件命令详解
- Redis第二集:Linux下安装Redis和测试,包含命令代码和问题处理办法,超详细版
- 【学习笔记】深入理解js原型和闭包(5)——instanceof
- beta阶段140字评论
- Fiori 出试(WEBIDE平台)day1
- 《穿靴子的猫》蓝光720P 1080P高清中英双字 下载
- 为今天的光纤检测选择光纤示波器
- dmg镜像 os vm 安装mac_dmg制作笔记:个性化自己的Mac软件安装包
- Helix Streaming Server 简单配置
- javaEE插件安装
- java获取不到ipv6的网卡
- xml 标签带有号php,php截取字符串并保留完整xml标签的函数代码
- IplImage 应用解读
- 数学分析对计算机有帮助吗,计算机辅助数学分析教学的好处
- js删除某个节点之后的所有节点
- Norgen提取试剂盒丨血浆/血清循环和核外RNA提取试剂盒
- 2021-05-03
- [ZZ]浅谈中国B2C珍珑棋局
- windows无法启动 bcd linux efi,bcdedit 无法打开启动配置数据存储的终极解决办法
- PB的Graph图形控件
热门文章
- 《图像处理实例》 之 寻找山脊线
- Android--Handler的使用方法:在子线程中更新界面
- 浅谈ASP.NET客户端回调
- IT也要健康:帮助你保持健康的几个重要因素
- cisco交换机端口“假死”现象
- Pytext简介:facebook的基于PyTorch的NLP框架
- 安装 SQL Server Compact Edition 及 与PC 数据同步的部署
- c++11新特性的使用---可变模板参数、type_traits、function综合使用
- wpf ui框架_替代Silverlight:微软面向Web开发者推出Blazor新框架
- java 导出密钥_java-如何从密钥库中导出.key和.crt