HEVC算法和体系结构:编码框架

简介: <p style="text-align:center"><br></p> <h1 style="text-align:center">编码框架</h1> <p style="text-align:center"><br></p> <p style="text-align:justify">2013年4月13日HEVC/H.265被ITU-T正式接受为国际标准。类似以往的国际标准,H


编码框架


2013年4月13日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比特的重构图像须占用较大的内存空间。此外,在进行帧间运动估计和补偿时,需要较多的内存访问带宽,这样会给内存受限的系统带来不便,解决的方法是引入参考帧压缩算法,来减小重构图像的数据量。



目录
相关文章
|
2月前
|
搜索推荐 前端开发 数据可视化
【优秀python web毕设案例】基于协同过滤算法的酒店推荐系统,django框架+bootstrap前端+echarts可视化,有后台有爬虫
本文介绍了一个基于Django框架、协同过滤算法、ECharts数据可视化以及Bootstrap前端技术的酒店推荐系统,该系统通过用户行为分析和推荐算法优化,提供个性化的酒店推荐和直观的数据展示,以提升用户体验。
105 1
|
2月前
|
搜索推荐 前端开发 算法
基于用户画像及协同过滤算法的音乐推荐系统,采用Django框架、bootstrap前端,MySQL数据库
本文介绍了一个基于用户画像和协同过滤算法的音乐推荐系统,使用Django框架、Bootstrap前端和MySQL数据库构建,旨在为用户提供个性化的音乐推荐服务,提高推荐准确性和用户满意度。
117 7
基于用户画像及协同过滤算法的音乐推荐系统,采用Django框架、bootstrap前端,MySQL数据库
|
2月前
|
测试技术 数据库
探索JSF单元测试秘籍!如何让您的应用更稳固、更高效?揭秘成功背后的测试之道!
【8月更文挑战第31天】在 JavaServer Faces(JSF)应用开发中,确保代码质量和可维护性至关重要。本文详细介绍了如何通过单元测试实现这一目标。首先,阐述了单元测试的重要性及其对应用稳定性的影响;其次,提出了提高 JSF 应用可测试性的设计建议,如避免直接访问外部资源和使用依赖注入;最后,通过一个具体的 `UserBean` 示例,展示了如何利用 JUnit 和 Mockito 框架编写有效的单元测试。通过这些方法,不仅能够确保代码质量,还能提高开发效率和降低维护成本。
44 0
|
2月前
|
缓存 算法 关系型数据库
BP-Wrapper:无锁竞争的替换算法系统框架
BP-Wrapper:无锁竞争的替换算法系统框架
29 2
|
2月前
|
算法 5G vr&ar
基于1bitDAC的MU-MIMO的非线性预编码算法matlab性能仿真
在现代无线通信中,1-bit DAC的非线性预编码技术应用于MU-MIMO系统,旨在降低成本与能耗。本文采用MATLAB 2022a版本,深入探讨此技术,并通过算法运行效果图展示性能。核心代码支持中文注释与操作指导。理论部分包括信号量化、符号最大化准则,并对比ZF、WF、MRT及ADMM等算法,揭示了在1-bit量化条件下如何优化预编码以提升系统性能。
|
2月前
|
算法
【Azure Developer】完成算法第4版书中,第一节基础编码中的数组函数 histogrm()
【Azure Developer】完成算法第4版书中,第一节基础编码中的数组函数 histogrm()
|
3月前
|
机器学习/深度学习 存储 算法
编码之舞:从算法到应用的探索之旅
在数字化时代的浪潮中,编程技术如同一种语言,连接着人类与机器。本文将带领读者踏上一场自数据结构基础至高级算法应用的探索旅程,通过实际案例分析,揭示算法在现代软件开发中的重要作用,并分享作者在编程实践中的心得体会,旨在为初学者和资深开发者提供有价值的参考与启示。
|
3月前
|
机器学习/深度学习 算法 计算机视觉
通过MATLAB分别对比二进制编码遗传优化算法和实数编码遗传优化算法
摘要: 使用MATLAB2022a对比了二进制编码与实数编码的遗传优化算法,关注最优适应度、平均适应度及运算效率。二进制编码适用于离散问题,解表示为二进制串;实数编码适用于连续问题,直接搜索连续空间。两种编码在初始化、适应度评估、选择、交叉和变异步骤类似,但实数编码可能需更复杂策略避免局部最优。选择编码方式取决于问题特性。
|
4月前
|
缓存 算法
基于机会网络编码(COPE)的卫星网络路由算法matlab仿真
**摘要:** 该程序实现了一个基于机会网络编码(COPE)的卫星网络路由算法,旨在提升无线网络的传输效率和吞吐量。在MATLAB2022a中测试,结果显示了不同数据流个数下的网络吞吐量。算法通过Dijkstra函数寻找路径,计算编码机会(Nab和Nx),并根据编码机会减少传输次数。当有编码机会时,中间节点执行编码和解码操作,优化传输路径。结果以图表形式展示,显示数据流与吞吐量的关系,并保存为`R0.mat`。COPE算法预测和利用编码机会,适应卫星网络的动态特性,提高数据传输的可靠性和效率。
|
4月前
|
算法 C++
【洛谷 P1090】[NOIP2004 提高组] 合并果子(贪心算法+哈夫曼编码+优先队列)
该编程题目要求设计算法,将不同种类的果子合并成一堆,使得消耗的体力最小。给定果子种类数`n`(1至10000)和每种果子的数量,需输出合并的最小体力值。使用优先队列(最小堆),每次取出两个数量最少的果子堆合并,并更新总体力消耗。样例输入为3种果子(1, 2, 9),输出最小体力耗费为15。提供的AC代码采用C++实现,通过优先队列优化合并顺序。
44 0