首页 HEVC视频编码标准结构和复杂度分析

HEVC视频编码标准结构和复杂度分析

举报
开通vip

HEVC视频编码标准结构和复杂度分析HEVC视频编码标准结构和复杂度分析摘要HEVC(HighEfficiencyVideoCoding)是由ITU-T的视频专家组(VCEG)和ISO/IEC的运动专家组(MPEG)联合推出的下一代新视频压缩计划,目标在H.264/AVCHighProfile的基础上进一步升高压缩编码效率。新方案支持分辨率为1080P高清视频,超高清视频,将广泛应用于高清电视,家庭影院,数字电视广播,移动流媒体等。本次毕业设计的目的是通过视频测试序列测试HEVC编码程序,理清HEVC的编码模块结构,然后分析各个编码模块的复杂度以及它...

HEVC视频编码标准结构和复杂度分析
HEVC视频编码标准结构和复杂度 分析 定性数据统计分析pdf销售业绩分析模板建筑结构震害分析销售进度分析表京东商城竞争战略分析 摘要HEVC(HighEfficiencyVideoCoding)是由ITU-T的视频专家组(VCEG)和ISO/IEC的运动专家组(MPEG)联合推出的下一代新视频压缩计划,目标在H.264/AVCHighProfile的基础上进一步升高压缩编码效率。新 方案 气瓶 现场处置方案 .pdf气瓶 现场处置方案 .doc见习基地管理方案.doc关于群访事件的化解方案建筑工地扬尘治理专项方案下载 支持分辨率为1080P高清视频,超高清视频,将广泛应用于高清电视,家庭影院,数字电视广播,移动流媒体等。本次毕业设计的目的是通过视频测试序列测试HEVC编码程序,理清HEVC的编码模块结构,然后分析各个编码模块的复杂度以及它在总编码时间中的比重。HEVC使用混合编码框架,传承H.264/AVC。但是HEVC相对于H.264来说,编码单元的大小从H.264/AVC的16×16增加到了64×64,这样的操作对高分辨率视频压缩的是非常有利的。为了使得预测的更为准确无误,将块划分为三个等级:编码单元(CU),预测单元(PU)和变换单元(TU),大大提高了压缩效率。通过测试视频序列,大致的可以得到H.265/AVC各个编码模块的复杂度及其在总时间中的比重。关键词:HEVC;H.265/AVC;H.264/AVC;HM;编码结构;复杂度ABSTRACTHEVC(HighEfficiencyVideoCoding)isavideocompressionschemeproposedbyISO/IEC MovingPictureExpertsGroup(MPEG)andtheITU-TVideoCodingExpertsGroup(VCEG).HEVCaimstosubstantiallyimprovecodingefficiencycomparedtoH.264/AVCHighProfile.ThenewschemesupportsdisplayresolutionsfromWQVGAupto1080pandUltraHD,andwillbeadoptedoverabroadvarietyofapplicationssuchasHDTV、hometheater、broadcastingandMobilestreamingmedia,etc.ThepurposeofgraduationdesignisthroughavideotestsequencetotestedcodingproceduresofHEVC,sortouttheencodingmodulestructureofHEVCandthenanalyzethecomplexityofthevariousencodingmoduleanditsproportionofthetotalencodingtime.HEVCisstillbelongtoH.264hybridcodingframework.ButcomparedwithH.264,thesizeoftheencodingunitisincreasingfrom16×16to64×64,anditisconduciveto high-resolutionvideocompression.Andtheblockisdividedintothreelevels:theencodingunit(CU),thepredictionunit(PU)andatransformation unit(TU),whichmakesforecastingmoreaccurateandsignificantlyimprovesthecompressionefficiency.Bytestingvideosequences,wecangenerallygettheproportionofthecomplexityofeachH.265/AVCencodingmoduleinthetotaltime.Keywords:HEVC;H.265/AVC;H.264/AVC;complexity1绪论1.1课题背景随着网络通信技术的不断进步和终端处理性能的不断提升,越来越多的多媒体服务的需求不断增长。电子邮件、语音等通话方式已经不能满足人们的需求,取而代之的是视频通信,它以其直观、明了并且可靠等一系列优点,迅速成为新的热点需求之一。据调查统计,目前互联网流量中的90%都是视频数据,哪怕在移动互联网当中,视频数据也超过50%。此外,由于不断改进视频质量,包括从2D视频到立体视频转换和时间和空间分辨率质量的提高,导致了图像数据的需求量的增加。但是通信网络的带宽有限,这就要求我们将视频压缩后再进行传输。因此,随着视频压缩技术越来越成熟,视频压缩技术的要求也越来越高。如果一味的考虑质量压缩而不在乎质量,那么压缩比上去了但是解压之后的质量严重失真,明显不成立;如果一味的追求质量而压缩比太小,那么就会占用很大的传输带宽,也不合适。因此,目前的视频压缩技术成为多媒体技术中最热门的研究领域。1.2课题意义HEVC存在的意义就是在有限带宽的情况下,传输更高质量的网络视频。在人们一直追求高数据量传输的同时,良好的压缩性能是前者的保证。以视频网站为例,运营最大的支出成本就是宽带成本。一旦采用新型视频压缩标准以后,视频的带宽成本将大幅降低,动画片的带宽成本将降至现有成本的1/3,普通影视作品将降至现有成本的一半。电影、动画片等视频经HEVC视频压缩服务后,手机用户观看在线视频不仅流量耗费大大减少,且下载速度会更快,画质基本不会受到影响,即使在线观看也会更流畅,不会老是卡机。良好的压缩性能就意味着要增加计算复杂度,压缩效率的提高,就势必会增加计算复杂度。所以,保证编码的性能,降低复杂度是我们研究的重点。1.3视频编码的发展历程在过去三十年中,视频压缩技术,体现在一系列国际视频编码标准中。20世纪90年代初,第一代视频编码标准H.261/MPEG-1宣布成立,目标是为了给ISDN(综合业务数字网)上会议电视和可视电话应用中的视频编码技术起一个范例[]。混合编码的形式第一次使用,运动补偿预测编码+DCT变换编码结构是第一次使用,编码方案的视频编码标准在对几代人的影响非常深刻。1994年,经由ITU-T视频专家组(VCEG)以及MPEG专家合伙努力,第二代标准MPEG-2问世。它的出现使数字电视和数字电视存储(例如DVD)市场非常火爆,使当时盛行的录音带转向光碟。MPEG-2首次提出了"等级”的说法,为了来满足各种图像分辨率的实际需求。在运动估计和DCT变换编码算法,“帧”和“场”操作是分开进行的。除了支持SNR分级还支持时空分级等多种可分级编码模式,具有很强的实用性。进入21世纪,广播和视频的迅速发展,特别是大量的高清视频的使用,并运用到卫星,互联网等领域中,使得第二代标准也显得不那么够用。所以,为了可以将压缩的效率再次提高,VCEG和MPEG共同成立了JVT(联合视频团队)。2003年,JVT颁布了第三代视频压缩技术即高级视频压缩(H.264/AVC),并在2004年,2007年2009年分别进行了一些扩展。根据"经验规则”,H.264/AVC能提高相归于之前第二代视频编码效率的50%,也就是说传输一样的容量的信息,只需要第二代视频编码标准信道容量的一半。正是因为这样,H.264/AVC可以在低码率中应用,例如移动设备(手机)的视频传输以及互联网上的视频传输。H.264/AVC在原有混合编码的框架下引入了新的编码形式,比如更多的宏块分割模式、1/4像素精度的运动补偿、空域的帧内预测、支持多参考帧的帧间预测,另外还有去块效应滤波、熵编码和整数的离散余弦变换等技术,这些都极大提高了编码效率[]。现在H.264/AVC已经在各个领域得到非常广泛的应用,除了一些特殊的领域外,H.264/AVC已经代替原有的压缩方式,而且推动了HDTV的流行。但是随着处理能力和存储容量价格的降低,以及编码视频数据的多元化和编码技术的进步,对压缩效率又提出了新的要求。为了应对高清视频,3D视频和移动无线等的需求,第三代高效视频编码HEVC(HighEfficiencyVideoCoding)也就应运而生了。2005年以后,ITU-T(国际电信联盟电信标准化局)的VCEG(视频编码专家组)在H264/AVC的前提下,已经着手了视频技术的开发,包括压缩和新一代视频压缩编码标准的提高,这个标准是H.265或H.NGVC(下一代视频编码),是基于H.264JM(联合模型)的参考软件"KTA”(主要技术领域)的测试平台建立起来的。同时,ISO/IECMPEG(运动图像专家组)在2007开始了类似的工作,高效视频编码标准的研究(即,高性能的视频编码,HEVC),在VCEG的KTA平台上进行试验、研究和验证。试验和考证用时四年左右,到2010年,VCEG和MPEG成立了一个工作组(JCT.VC),共同研究新的视频编码标准,并正式称之为HEVC。1.4文本结构第一章是绪论,主要对毕业设计的背景,以及视频编码发展的意义做一个介绍,以及本文的结构简介。第二章第二章主要介绍HEVC视频编码标准结构。引言主要讲了HEVC标准结构包括哪些部分。第二小节是粗略的介绍了帧内预测模块和35种帧内预测方式。第三小节是介绍了离散余弦和正弦变换,率失真优化的量化和HEVC的3种扫描方式。第四小节是介绍了熵编码的自适应算术编码和波前并行处理两种方式。第五小节主要讲了帧间预测模块以及帧间预测中对运动参数编码的Inter,Skip和Merge这3种模式。第六小节是对环路滤波中的去方块滤波和样值自适应偏移有个详细的描述。第三章主要讲解了HEVC视频编码标准结构的复杂度分析。引言是对本章的一个开头。第二小节是对HEVC计算复杂度的分析。第三小节是描述怎么通过率失真函数来分析复杂度。第四章讲述VS2010软件平台的搭建以及相关的设置,HM函数的调用框架,怎么调试HM,怎么通过HM函数来求出HEVC的各个编码模块的运行时间,并且对他们进行统计,列表,分析。第五章是对本次毕业设计的总结和展望,分析本次毕业设计做得不够好的地方以及对未来HEVC技术的展望。第六章是致谢本次毕业设计对我有帮助的人,以及引用论文的作者。2 HEVC视频编码标准结构2.1引言HEVC,作为全新被公认的一种视频编码标准,其所采用的混合视频编码框架还是之前H.264/AVC使用的。但是压缩的程度更加厉害,效率更高,更有利于高分辨率的视频压缩。HEVC视频编码框架,包括帧内预测,帧间预测,运动估计和补偿,正交变换,量化,熵编码模块,环路滤波器。2.2 帧内预测HEVC的帧内预测是通过基于块的帧内预测模式来消除图像的空间相关性,其精确度却比H.264/AVC高出很多,灵敏更多。每一个亮度分量的HEVC的帧内预测编码工具可以提供多达35种预测模型,包括平面模式和DC模式。PU的大小决定了预测模式的总数,如下图2.1所示:图2.1不同的PU值所对应的帧内预测模式数33种可能的预测方向和35种帧内预测模式的对应关系如下图2.2所示:图2.233种帧内预测方向和帧内预测模式的对应关系通过帧内预测,得到残差,改变单元的大小依据PU的大小可以从32×32划分到4×4。变换单元可以根据PU的大小来自由定义的方式比用能量压缩的方式有更加良好的预测性能。虽然这些可以划分成更小的PU块来实现,但因为每个PU块都有特定的帧内模式的编码,它会增加成本。伴随着帧内预测模式数量的增多,选取一个良好的组合来协调帧内预测模式以及变换深度,需要同时考虑性能和编码器复杂度的增加。在能获取良好的编码性能的同时,要尽可能把编码器的复杂度降低一点,来提高它的使用性能[]。每一种帧内预测模式,都是基于这种复杂的递归结构,编码器必需经历全部的CU、PU和TU的集合,才可以通过RDO率失真优化的过程来挑选最合适的组合,从35种预测模式中来选取一个最佳的模式,而这又将是一个非常消耗时间的过程。所以为了把编码器的计算复杂度往下降,HEVC的参考模型应用了快速帧内预测算法。其核心思想是通过对这些35种帧内预测模式使用哈达玛变换(HSAD)计算出N(N=8、8、3、3、3分别对应4×4、8×8、16×16、32×32、64×64)种率失真代价最小的预测模式,这个过程是粗选择(RMD)过程,然后8个模式全部都联系周边CU的相关性,之后选择最可能的预测模式(MPM)过程,在8种中选择3种作为最优的模式,最后再对这3种最优的模式做RDO,确定最佳的预测模式。HEVC的参考模型经过上述的优化过程,可使编码器的帧内预测模式的复杂度减小很多。2.3 变换和量化2.3.1离散余弦和正弦变换HEVC的变换运算和H.264/AVC相似,也是整数变换,通过对预测残差进行近似DCT处理。HEVC在一个CU中进行整数变换时,可以将CU块依照编码树的结构从32×32一直划分至4×4的小块。比如,一个16×16的CU块可以使用一个16×16的变换单元(TU)来进行变换,却也能够使用4个8×8的变换单元(TU)来变换。其中任意一个8×8的变换单元(TU)还可以进一步分为4个4×4的变换单元(TU)。但是和H.264/AVC的变换顺序有点不同,变换过程中,先进行列运算,而后进行行运算。而H.264/AVC是先进行行运算,后进行列运算。HEVC整数变换的基矢量的能量是一样的,不需调整或补偿,另外对DCT的近似性要优于H.264/AVC。另外HEVC还支持4×4的离散正弦变换(DST),只用于4×4大小块的帧内预测残差的编码。在帧内预测块之内,那些类似预测参考像素的像素,如左上边界的那些靠近像素的像素将获得比那些距离参考像素很远的像素预测得更准确,预测误差也略小,而那些远离边界的像素的预测残差就会略大。DST对这种编码残差效果相对较好。这是由于不同的DST基函数在开始的地方相对小,但往后就会逐渐变大,这个走势和块内残差预测变化的走势基本相同,所以DST效果好。但是DCT基函数却在起始处比较大,而往后逐步衰减。所以选择DST。2.3.2率失真优化的量化HEVC的量化原理和H.264/AVC相似,是在整数DCT变换时一起完成量化过程的。量化处理的实质就是用量化步长去除以变换系数,这样就得到了变换系数更为简单的表示。压缩编码产生失真的主要来源是量化,因此量化环节的关键问题是选择适当的量化步长,使失真以及码率两者之间达到良好的平衡。在HEVC中,量化参数(QP)来标记的量化步长,共52个等级(0~51),每个QP和实际的量化步长相对应。较大值的QP将意味着量化更粗,会产生的码率也较低,当然失真也会更大。由于HEVC采用了率失真优化的量化(RDOQ)技术,所以可以在给定码率的条件下通过选择最优的量化参数从而使重建图像的失真达到最小值。量化操作实质是在变换单元TU中分别对亮度分量和色度分量进行量化。在变换单元TU中,全部的变换系数都是依照指定的量化参数(QP),一同进行量化和反量化的。HEVC的RDOQ能够比H.264/AVC提高二十分之一左右(亮度)的编码效率,那当然,带来的负面影响就是增加了计算复杂度。2.3.3HEVC的扫描方式在HEVC中,把TU中量化后的系数经过特定的形式扫描,构成一维数据,之后再进行熵编码,系数是把4×4的"系数区”当作一个单位来进行扫描的[]。一个大的TU块可分成若干个4×4的系数组。如果TU是帧内预测的模式,那么就可利用垂直、对平和对角三种扫描方式。如图2.3所示。扫描方式是按照帧内预测的方向来决定的,垂直扫描方式适用于水平方向的预测或接近水平方向的预测;相反,水平的扫描方式则适用于垂直方向的预测或者接近垂直方向的预测;那么其它方向都用对角方式来进行扫描。图2.33种扫描方式如果TU是帧内预测模式,那么只能选用对角的方式进行扫描。但是在帧间预测块中,由于矩形变换的使用,所以扫描方式也要改变,就如下图2.4所示。在进行对角扫描时,系数组也是按照某一种扫描顺序进行的,但是必须在之前系数组被扫描完毕才能扫描当前的系数组。图2.4帧间编码扫描方式2.4熵编码2.4.1自适应算术编码在进行变换和量化后输入视频,熵编码量化、扫描的变换系数(不丢失任何信息的编码),目的是进一步压缩信息。常见的熵编码方式有简单的变长编码和效率较高的算术编码这两大类。如果我们将编码方式以及编码的内容这两者联系起来,那就可以获得效率更高的编码方式,基于上下文的变长编码(CAVLC)以及基于上下文自适应的二进算术编码(CABAC)[]。这两种熵编码的方式都是很高效率的,没有损坏的,特别是在高比特率的时候,此时量化参数(QP)比较小,变换系数在码流之中占了很大一部分。只是计算量比常规的变长编码和算术编码要大。HEVC只采用H.264/AVC非常相似的CABAC算术熵编码。2.4.2波前并行处理因为对于高清、超高清视频编码计算量巨大,所以在HEVC中提供了基于片以及条的便于并行编解码的机制。但是这样又会造成编码效率的下降,由于条和片是独立进行预测的,所以这样就没办法使用预测的相关性。统计熵编码时,都要从头开始。为了处理这个问题,HEVC提出一种波前并行处理(WPP)的熵编码方式。这种方式可以不需要打破预测的连贯性,这样的话就可以尽量的利用上下文的信息。在波前并行处理时,假如目前的CTU上的两块CTU被处理完毕了,则需立即使用一个新的并行进程(大多是一个新的进程)来处理新的一行CTU,这个过程如下图2.5所示。波前并行处理要求两块CTU,是因为帧间预测、运动矢量预测是要求提供CTU上边和右上边的CTU的数据信息。并行熵编码初始化从当前行上两完整编码CTU获取信息的参数,所以你可以在新的线程中使用上下文信息。图2.54个线程的WPP处理示意图2.5帧间预测HEVC和H.264的帧间预测基本类似,利用相邻的帧图像之间的相关性,把之前已经完成编码的帧当成参考帧,传送当前编码PU的运动矢量,经过运动估计以及运动补偿对目前图像进行预测,来去除视频序列中的时间冗余[]。但HEVC对于H.264来说,也改进了很大一部分。HEVC帧间预测模式,加入了一种新的预测模式-MERGE模式。如下图2.6所示,当前PU会从四周块中按照A1、A0、B1、B0和B2的顺序依次挑选出候选MV(运动估计),然后通过计算出率失真代价,再挑选出最小的MV把它当做当前PU的MV,之后传输相应的运动参数,然后利用周围PU的信息,这样就可大大减少运动估计的计算复杂度。MERGE模式可以应用到所述帧间编码的PU中的任何一个。在任何PU帧间编码中,编码器可以使用显式传输的运动参数或合并的运动技术。图2.6运动合并的候选块和空间运动矢量候选示意图在帧间预测中,对于每个深度的CU来说,遍历帧间预测的全部模式,计算最小的RD代价,进而确定帧间编码模式。编码流程图如下图2.7所示,具体步骤如下:1.如果是MRG模式,则计算Merge2N×2N模式的率失真代价,否则就计算AMVPSkip模式的率失真代价;2.计算SIZE_2N×N、SIZE_N×2N模式的率失真代价,如果目前CU深度为最大的深度,则计算SIZE_N×N模式的率失真代价;3.如果支持非对称分割,计算全部SIZE_2N×nU、SIZE_2N×nD、SIZE_nL×2N、SIZE_nR×2N模式的率失真代价;4.计算帧内模式的率失真代价; 5.根据率失真代价,相互对比之后选择率失真代价最小的模式,把它当做帧间预测方式,存取结果作为目前CU的编码结果[]。图2.7帧间编码流程图2.6环路滤波环路滤波(LoopFiltering)处在重建的运动补偿预测参考帧之前,在编码器预测环路的反量化/反变换单元之后。所以,环路滤波应该属于预测环路的一部分,归属于环内处理,并不是环外的后处理。环路滤波的目标便是去除编码过程中的预测、变换以及量化等环节所引入的失真。原因是滤波是在预测环路之内运行的,这样就减少了失真,存储后就可以为运动补偿预测供应了很高质量的参考帧。HEVC除了应用类似于264/AVC环路滤波器(DBF),还增加了新的自适应采样偏移操作。其中去方块滤波用于消除块效应,而像素自适应偏移则用于消除量化噪声。2.6.1去方块滤波方块效应是因为采取了图像分块压缩的方法所形成的一种图像失真,在边界上这种失真很明显。为了去除这类失真,提升重建视频的客观和主观质量,H.264/AVC在方块的边缘实施去方块滤波。HEVC也采用类似于环路滤波器来降低CU单元,PU单元与TU单元边缘的块效应。HEVC为了降低复杂性,促进简化硬件设计以及并行处理,所以不对4×4的块进行边界滤波,并且对边界只定义了3个强度等级(0、1和2)。只对滤波边界周边的像素进行处理,省掉了处理非边界处的像素。在滤波之前,对于每一个边界都需要判决:是否需要实施去方块滤波?如果需要的话,还要判决究竟是对边界进行强滤波还是对边界进行弱滤波。判决是由跨越边界像素的梯度值以及由此块的量化参数QP得出的门限值来共同决定的。HEVC对有滤波需求的各类界限一同实施去方块滤波,首先对图像的全部水平边界实行垂直方向滤波,然后再对全部的垂直边界实行水平方向滤波[]。2.6.2样值自适应偏移HEVC的一项新的编码工具是自动适应偏移采样值,对所述图像的每个像素要重建的滤波处理。它基于像素的灰度值亦或是边缘的性质,将像素分成各种不同的类型,依据不同的类型,为每个像素值都配备一个简单的偏移量,以便减少失真的目的,它可以提高压缩率,降低码流[]。采用SAO后,码流可以减小2%至6%,如此编解码器的复杂度只需增加约2%。加偏移量有两种形式,带偏移(BO)和边缘偏移(EO)两种方式。编码器对图像的不同区域施加BO方式或EO方式的偏移,此外也于码流中给出对应标识。在BO模式中,像素值按0到最大值被等分为32个间隔,也叫"带(bands)”,例如,对8比特来说,因为最大值等于二的八次方也就是255,所以此时的带的宽度即256/32=8,所以均等分之后的每一个带所含有的像素值都基本相近。如果某一个CTB的亮度值分散在4个相邻的带中间,这说明这个CTU块原本就是一个相对平坦的图像区域,这种情况需要警惕人为失真的出现,因此有必要施加一定的偏移量(可正可负),从而使像素值处于一个集中的范围内。当然,这个偏移量也是要作为带偏移传输到解码端。EO方式对所处理的像素采用三像素结构进行分类。在该像素所在边(一维)的一侧,把该像素作为中心,之后再加上最相近的2个像素,形成135°、垂直、水平和45°这四种“3像素结构”,如下图2.8所示。按照3像素值分布情况的不同,可以把该像素分成峰值像素(如果它的像素值大于相邻的2个像素),谷值像素(如果它的像素值小于相邻的2个像素),边缘像素(如果它的像素值等于任意一个相邻像素)和其它像素(如果不符合前3种情况),共4类。对4类不同情况的像素所加的偏移量也不同。图2.8三像素模式示意图3 HEVC编码标准结构复杂度分析3.1引言HEVC的总体编码框架还是按照空域和时域预测的混合编码框架来进行的,但是相对于传统的视频编码算法,为了提高编码效率采用了很多,包括更加灵活的块划分模式、先进的运动矢量预测算法与运动合并模式、35种帧内预测模式、基于DCT的分像素插值滤波器、像素自适应补偿滤波器与环路滤波器等等[]。一种新的编码技术的应用一方面提高了压缩效率,另一方面,也增加了编解码的运算复杂度,尤其对编码器,在率失真优化过程,就有更多的编码选项需要进行优化[]。3.2HEVC的计算复杂度分析HEVC在提高压缩效率之后,却也增加了编解码器的计算复杂度。在设计编码器的时候,我们要为了简单,最好计算复杂度不高,这样的设计就比较省力。但是压缩效率提高之后,我们就需要保证在压缩效率不降低的同时,使复杂度也不至于很高。JCT-VC(视频编码联合协作小组)在制定HEVC的标准过程中,也通过各种方式来减少各个编码技术所带来的计算复杂度的增加。在环路滤波的方面,把最小的滤波块划分为8×8,这种划分方式大大的减少了滤波像素的数量。为了利于并行化的进行,可以把水平滤波和垂直滤波分开;在变换和量化的方面,数据位宽被限制在16位的范围内,然后设计变换系数,又减少了运算复杂度,完成8×8的块反变换需要158个指令周期,16×16块反变换需要861个指令周期,32×32块反变换需要4696个指令周期;在熵编码方面,为了能够让用于编码语法元素以及残差系数的模型大大减少,我们只使用CABAC的方法。在H.264/AVC中,模型数量为299个,但是在HEVC中仅仅只有154个模型。在高层语法方面,HEVC还使用了并行编码机制,主要有3种方式,条带并行(图块分为条状),片层并行(图块分为片状)和波形并行(图块按线程来分)。在条带并行法中,其中的每一个条带都可以独立进行编码和解码,按照顺序扫描方式进行条带之间的分割,高层语法控制条带边缘的环路滤波,这样的话这种条带划分方式就对误码有较强的鲁棒性;在片层并行方法中,把编码图像分割成大小一致的图像片,和条带并行法一样,每个图像片也可以独立进行编码和解码;在波形并行法中,每一个线程只管理一行编码单元的编码抑或是解码,但是必须在前一行两个编码单元之后,下一行编码单元的处理才能进行。在开始每行编码单元编码时,必须重新对CABAC进行初始化,其余的流程与正常编码完全一样。因为这种波形并行的方法对压缩效率损失是最少的,所以也是最好的。3.3率失真函数来分析复杂度HEVC应用率失真优化方式来决定了LCU最终四叉树结构的分割形式,这样的方式可以在视频质量有保证的条件下获得最小的码率。它的率失真代价函数为:其中:d代表当前CU的深度值,表示当前CU经过各种PU预测以及模式选择后进行编码所需的比特数,是拉格朗日算子。(SumofSquareError,SSE)表示原始图像和重建图像两块之间的误差平方和,如下式所示:其中是原始图像块的像素值,是重建图像块的像素值。如下图3.1所示,在HM中,LCU的四叉树划分有如下的流程:第一步对CU进行分割,直到LCU停止划分,那么尺寸大小为64×64的CU(depth=0)就开始了对该CU进行预测编码的操作,与此同时,这个CU块也要进行多种PU预测以及相应的模式选择,才可以得到其率失真代价J(CUo)[]。之后,继续进行划分操作,将这个CU块分割为4个子CU,那么每一个分割出来的子CU的尺寸就是32×32,深度值为1。与上面一样,也可以得到每个子CU的率失真代价J(CUo)(i=0,1,2,3)。继续进行分割,将32×32的CU块分割到4个16×16的子CU,深度值depth=2。以此类推,直到子CU的尺寸变成了8×8的时候,也就是深度值为3的时候,就不再继续划分了。接着,CU块的裁剪过程从深度值为3的CU块开始。如果16×16的CU块的率失真代价大于它所划分出来的4个8×8大小的子CU块的率失真代价之和,则选择16×16的CU类型进行裁剪过程;否则,选择8×8的CU类型。以此类推,直到深度值为0的CU。这样上述操作之后,当前LCU的分割和裁剪过程才算正式完成。图3.1HM中CU分割和裁剪过程示意图根据上述分析,为了确定一个LCU的分割方式,我们需要对CU进行多次分割和裁剪,总计需要进行CU尺寸选择的率失真代价计算85次(1+4+16+64=85),另外需要对每一个CU进行各种的PU预测以及模式选择的率失真代价的计算,这样的话使得编码计算复杂度变得非常大。4HEVC编码结构复杂度分析的实现4.1引言这章主要讲诉软件VS2010操作平台的搭建,HEVC测试程序(HM)的调试以及怎么通过VS2010来对HEVC编码结构的各个模块进行复杂度分析。也就是通过HM10.0程序来求出HEVC总的编码时间和各个模块的编码时间,然后求出各个编码模块占总时间的百分比。4.2VS2010平台的搭建首先安装VS2010,然后通过SVN软件下载HM-10.1-dev,安装SVN后在电脑D盘建立一个文件夹取名hevc_svn,右键点击该文件夹,选择SVCCheckout,完成后打开该文件夹hevc_svn可以看到里面的内容如下图4.1所示:图4.1hevc_svn文件夹内容获得了代码之后我们就可以配置和编译该程序,使用VC2010作为HM代码编译器,将该文件夹copy到VC2010安装目录下,之后运行程序,对编码器配置参数。点击右边导航栏中的TAppEncoder,右键选择属性,出现如下框图4.2所示:图4.2TAppEncoder属性内容我们使用Release模式编译,这样运行速度会快一些。之后为Release模式配置参数,在最上面配置下拉栏中选择Release,在左边配置属性栏中选择常规选项,在右边输出目录点击向下的箭头,选择浏览,为编译输出文件指定目录,..\..\bin\vc10\Win32\Debug,即hevc_svn文件夹bin\vc10\Win32\Debug目录。点击配置属性中的调试,在右边命令参数中输入-c"encoder_lowdelay_P_main.cfg"-c“SlideEditing_1280x720_30.cfg”,即”-c加配置文件”的格式,这里的设置不是固定的,使用的是什么配置文件,就填写什么配置文件。在工作目录中选择与输出目录路径相同,就是..\..\bin\vc10\Win32\Debug。点击最上面的配置管理器,如下图4.3所示,全部设置为Release模式,之后关闭对话框。图4.3配置管理器设置为Release准备配置文件和编码图像文件,将hevc_svn\cfg目录下的编码器性能配置文件encoder_lowdelay_P_main.cfg和位于hevc_svn\cfg\per-sequence目录下的输入图像配置文件SlideEditing_1280x720_30.cfg都拷贝到编解码器的输出文件目录hevc_svn\bin\vc10\Win32\Debug中去,然后将编码图像文件也拷贝到这个目录中来,如SlideEditing_1280x720_30.yuv。然后改正图像配置文件中的参数,将InputFile改为要编码的文件,这里为SlideEditing_1280x720_30.yuv输入图像深度InputBitDepth,一般为默认值8不变;帧率FrameRate默认为60,这里保持默认;帧跳FrameSkip默认为0,保持不变;图像宽度SourceWidth,需要根据输入图像宽度确定,如1080p图像为1920;图像高度SourceHeight,需要根据输入图像宽度确定,如1080p图像为1080;编码的帧framestobeencoded,这里设置为2帧,然后保存,关闭配置文件。这个配置文件名要与编码器 工程 路基工程安全技术交底工程项目施工成本控制工程量增项单年度零星工程技术标正投影法基本原理 配置中设置的名字保持相同,不然运行时会找不到配置文件,可以将实际文件名改成与参数设置中相同,也可以将参数设置中改为与实际文件名相同。一般是参数设置中改为与实际文件名相同。图4.4图像配置文件中的参数4.3HM函数架构HM代码是HEVC的官方标准测试模型,我们可以利用它来对HEVC测试序列做各种分析。一个完整的HM方案,共包含了7个工程:1.TAppCommon2.TAppDecoder3.TAppEncoder4.TLibCommon5..TLibDecoder6.TLibEncoder7.TLibVideoIO而本次要研究的HEVC编码结构的函数都在TAppEncoder和TLibEncoder之中。HM整个函数的调用函数树如下图4.5所示:图4.5HM函数的调用函数树HM整个函数的调用结构框图如下图4.6所示:4.6HM函数调用结构框图由上图知道在主函数中调用create函数,但是这个函数是一个空函数,里面没有任何的命令,所以不进行操作。Encode整个函数的核心,在这个函数内部进行实际的编码工作,调用m_cTEncTop的encode。函数对每个GOP都调用compressGOP。GOP的定义在这里比较模糊。在这里GOP不需要从Islice开始,可以随自己规定,这样的话对GOP的概念就比较弱化了。GOP划分成slice,可以按raster顺序来划分也可按tile的划分形式,调用compressSlice来挑选出每一个slice最优的参数,然后进行实际的熵编码工作,用encodeSlice函数。在Slice的层面,继续划分成一样大小的LCU,之后对每一个CU用compressCU进行compress的工作;用encodeCU进行encode的工作。Slice是基于光栅扫描顺序来扫描一帧当中CTU的序列。一帧能够由多个Slice组成,由于Slice内的像素的预测不能在Slice的边界进行,所以每一个Slice可以单独解码。每一个Slice能够依照编码形式划分为I/P/BSlice。这个结构的主要目的就是为了在传输中丢失数据后实现重新同步。每一个Slice允许包含的最大位数一般是有限的,所以依据视频场景的运动程度,Slice所包括的CTU数量极可能是有差别的。Tile位于帧内可以解码的矩形区域,包括了多个按矩形顺序排列的CTU,尽管数量不要求一样,这一结构是为了增强编解码的并行处理性能。同一个slice内的多个tiles能够同享一样的头信息,当然一个tile内也能够有多个slice,无论是slice内含有tile,还是tile内含有slice,都必须以整数的形式包含。通过对HM函数架构的研究,我们可以知道:xCheckRDCostIntra函数主要实现帧内预测的任务;encodeCoeff函数主要完成变换编码的任务;xCheckIntraPCM函数主要完成量化的任务;xCheckRDCostInter函数主要完成除了merge模式以外的所有帧间预测的任务;xCheckRDCostMerge2Nx2N函数主要完成merge模式的帧间预测任务;loopFilterPic函数主要完成环路滤波的任务。由于运动估计和熵编码的时间在总时间里面太少,这里就不做讨论。4.4分析HEVC各个编码模块的运行时间首先我们对HM代码做一些修改,使它能够测出每一个模块的编码时间。测函数的编码时间就是通过clock函数对所要测时间的函数在头和尾加上时钟clock,就得出了这个函数的编码时间。下面就举帧内预测函数为例子我们可以通过这个函数测出帧内预测模块的运行时间。VoidTEncCu::xCheckRDCostIntra(TComDataCU*&rpcBestCU,TComDataCU*&rpcTempCU,PartSizeeSize){externdoublesum1;//startingtimedoubledResult;longlBefore=clock();UIntuiDepth=rpcTempCU->getDepth(0);rpcTempCU->setSkipFlagSubParts(false,0,uiDepth);rpcTempCU->setPartSizeSubParts(eSize,0,uiDepth);rpcTempCU->setPredModeSubParts(MODE_INTRA,0,uiDepth);BoolbSeparateLumaChroma=true;//chooseestimationmodeUIntuiPreCalcDistC=0;if(!bSeparateLumaChroma){m_pcPredSearch->preestChromaPredMode(rpcTempCU,m_ppcOrigYuv[uiDepth],m_ppcPredYuvTemp[uiDepth]);}m_pcPredSearch->estIntraPredQT(rpcTempCU,m_ppcOrigYuv[uiDepth],m_ppcPredYuvTemp[uiDepth],m_ppcResiYuvTemp[uiDepth],m_ppcRecoYuvTemp[uiDepth],uiPreCalcDistC,bSeparateLumaChroma);m_ppcRecoYuvTemp[uiDepth]->copyToPicLuma(rpcTempCU->getPic()->getPicYuvRec(),rpcTempCU->getAddr(),rpcTempCU->getZorderIdxInCU());m_pcPredSearch->estIntraPredChromaQT(rpcTempCU,m_ppcOrigYuv[uiDepth],m_ppcPredYuvTemp[uiDepth],m_ppcResiYuvTemp[uiDepth],m_ppcRecoYuvTemp[uiDepth],uiPreCalcDistC);m_pcEntropyCoder->resetBits();if(rpcTempCU->getSlice()->getPPS()->getTransquantBypassEnableFlag()){m_pcEntropyCoder->encodeCUTransquantBypassFlag(rpcTempCU,0,true);}m_pcEntropyCoder->encodeSkipFlag(rpcTempCU,0,true);m_pcEntropyCoder->encodePredMode(rpcTempCU,0,true);m_pcEntropyCoder->encodePartSize(rpcTempCU,0,uiDepth,true);m_pcEntropyCoder->encodePredInfo(rpcTempCU,0,true);m_pcEntropyCoder->encodeIPCMInfo(rpcTempCU,0,true);//EncodeCoefficientsBoolbCodeDQP=getdQPFlag();m_pcEntropyCoder->encodeCoeff(rpcTempCU,0,uiDepth,rpcTempCU->getWidth(0),rpcTempCU->getHeight(0),bCodeDQP);setdQPFlag(bCodeDQP);m_pcRDGoOnSbacCoder->store(m_pppcRDSbacCoder[uiDepth][CI_TEMP_BEST]);rpcTempCU->getTotalBits()=m_pcEntropyCoder->getNumberOfWrittenBits();rpcTempCU->getTotalBins()=((TEncBinCABAC*)((TEncSbac*)m_pcEntropyCoder->m_pcEntropyCoderIf)->getEncBinIf())->getBinsCoded();rpcTempCU->getTotalCost()=m_pcRdCost->calcRdCost(rpcTempCU->getTotalBits(),rpcTempCU->getTotalDistortion());xCheckDQP(rpcTempCU);xCheckBestMode(rpcBestCU,rpcTempCU,uiDepth);//endingtimedResult=(double)(clock()-lBefore)/CLOCKS_PER_SEC;sum1+=dResult;}如上面代码所示,在xCheckRDCostIntra函数开始时加入clock时钟,在函数即将结束时加入clock时钟,两者相减即得到整个帧内预测函数运行所需要的时间,定义sum1为全局变量,在main函数中定义,累加之后,通过主函数main中的输出语句,然后输出sum1的值。运用同样的方法,我们对HEVC其余的帧间预测,环路滤波和变换量化模块也做了相同的处理,之后就能在main函数中输出HEVC各个编码模块的编码时间。为了确保实验的可靠性、全面性,我们使用classA到classE的五种视频测试序列各2个,通过HM代码对他们一一测出时间,然后做成表格,便于直观的对HEVC的编码复杂度有清晰的认识。下面的10张表格,表4.1到表4.10就是对classA到classE五种视频测试序列的结果:ClassA:ClassA总时间(s)帧内预测(s)帧间预测(s)环路滤波(s)变换量化(s)NebutaFestival_2560x1600_60_10bit_crop12.4884.1767.8410.0040.469百分比(%)10033.4462.790.033.76表4.1ClassANebutaFestival_2560x1600_60_10bit_cropClassA总时间(s)帧内预测(s)帧间预测(s)环路滤波(s)变换量化(s)PeopleOnStreet_2560x1600_30_crop7.9662.5815.2350.0040.129百分比(%)10032.4065.710.051.62表4.2ClassAPeopleOnStreet_2560x1600_30_cropClassB:ClassB总时间(s)帧内预测(s)帧间预测(s)环路滤波(s)变换量化(s)Cactus_1920x1080_508.0572.8065.0700.0050.169百分比(%)10034.8362.930.062.10表4.3ClassBCactus_1920x1080_50ClassB总时间(s)帧内预测(s)帧间预测(s)环路滤波(s)变换量化(s)Kimono1_1920x1080_247.4742.4644.9140.0010.141百分比(%)10032.9765.130.011.89表4.4ClassBKimono1_1920x1080_24ClassC:ClassC总时间(s)帧内预测(s)帧间预测(s)环路滤波(s)变换量化(s)BasketballDrill_832x480_507.2132.6184.4590.0010.131百分比(%)10036.3061.820.011.82表4.5ClassCBasketballDrill_832x480_50ClassC总时间(s)帧内预测(s)帧间预测(s)环路滤波(s)变换量化(s)Flowervase_832x480_306.7422.2494.3750.0010.098百分比(%)10033.3664.890.011.45表4.6ClassCFlowervase_832x480_30ClassD:ClassD总时间(s)帧内预测(s)帧间预测(s)环路滤波(s)变换量化(s)BasketballPass_416x240_502.4731.0511.3940.0020.013百分比(%)10042.5056.370.080.53表4.7ClassDBasketballPass_416x240_50ClassD总时间(s)帧内预测(s)帧间预测(s)环路滤波(s)变换量化(s)Keiba_416x240_302.5991.0881.4790.0020.008百分比(%)10041.8656.910.080.31表4.8ClassDKeiba_416x240_30ClassE:ClassE总时间(s)帧内预测(s)帧间预测(s)环路滤波(s)变换量化(s)Johnny_1280x720_607.6412.6954.7950.0040.130百分比(%)10035.2762.750.051.70表4.9ClassEJohnny_1280x720_60ClassE总时间(s)帧内预测(s)帧间预测(s)环路滤波(s)变换量化(s)SlideEditing_1280x720_3010.1283.2696.5400.0040.296百分比(%)10032.2864.570.042.92表4.10ClassESlideEditing_1280x720_30在LB模式(低延时模式)下,通过运行10个测试序列,我们得到了10张表格,当然为了更加方便的认识模块的具体占用时间,我们还把10个表格中各个模块的时间占比做了一个平均值,再做成一个表格,如下表4.11:平均值帧内预测帧间预测环路滤波变换量化百分比(%)35.5262.390.051.91表4.1110种序列占比平均值通过分析,我们知道在HEVC的编码过程中,绝大部分时间都在进行帧间预测和帧内预测,其余的编码模块占了很少的时间。HEVC的编码效率相对于H.264/AVC来说提升了非常多,但是HEVC的编码复杂度相对于前者来说也变得复杂,所以在未来的时间内,怎样在保证压缩率的同时,降低编码的计算复杂度将会是学者们研究的热点问题之一。从我们对HEVC的HM代码的视频测试来看,灵活的划分模块,包括CU(编码单元)、PU(预测单元)和TU(变换单元),对视频编码的率失真性能的提升是最明显的,但由此而带来的计算复杂度的提升也是最大,所以如何快速的通过附近块的上下文属性以及当前编码块的纹理属性进行划分CU(编码单元)、PU(预测单元)和TU(变换单元),就有非常重要的研究价值,也是将来的研究重点。在贝叶斯分类和支持向量基分类基础上的编码单元CU、变换单元TU和预测单元PU的快速选择算法,能够保证率失真性能,并且可以大大提升编码速度。另外我们还可以通过不同块层次之间的相关性和相邻单元之间的相关性来进一步减小计算复杂度。5总结与展望5.1总结HEVC是由JCT-VC(视频编码联合工作组)主导定制的新一代的视频编码标准,虽然它的主体依旧采用的是H.264/AVC的混合视频编码框架,但美中不足的是,HEVC的高效率是把庞大的计算复杂度做为代价的。从论文前面的阐述能够看出,HEVC标准中的一些新技术采用给编码器改进留下了非常多的编码参数以及改良的空间。为了使HEVC标准能发挥其更高的压缩性能,只有合理的、有效的编码参数,可以实现选择。伴随着HEVC标准基本的完成,对于HEVC编解码的研究,尤其是优化编解码算法的探究,已经愈来愈被学者和工程师所重视。为了使HEVC能够在工业当中被运用取来,那么如何把HEVC的压缩效率合理并有效的发挥出来已经是重点,也是学术界关注并致力于解决的热点问题之一。HEVC的编码优化算法,只有在下列的几个方面进行深入的钻研:HEVC主观质量优化和低复杂度的速率控制算法,才能成功的把HEVC的编码复杂度降低至我们可以接受的范围之内[]。5.2展望HEVC标准是以H.264的标准为基础发展起来的,从H.264在视频应用领域的崇高地位可以预测未来HEVC标准在视频领域也有着很好的发展前景。在高清视频业务以及手机视频化等应用中,业务的不断发展和需求的不断增加使得原本就有限的带宽资源逐渐成为发展的瓶颈,而这时,高压缩比的视频编码是解决这个问题的一种有效的技术手段,也为HEVC技术在高速数据流领域的应用奠定了坚实的基础。另外,因为视频编码软件开发周期很短,平台机动,所以我们有理由相信,基于HEVC技
本文档为【HEVC视频编码标准结构和复杂度分析】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: ¥99.0 已有0 人下载
最新资料
资料动态
专题动态
个人认证用户
東門涙
暂无简介~
格式:doc
大小:78KB
软件:Word
页数:21
分类:哲学
上传时间:2019-01-29
浏览量:48