HEVC编码结构简要总结

HEVC编码结构简要总结

感谢原创转载自 从数学游到计算机的咸鱼:https://blog.csdn.net/qq_21506301/article/details/107289576?spm=1001.2014.3001.5501

第1章 编码结构

1.1 视频编码标准简介

视频编码标准只是规定了编码码流的语法语义和解码器,只要求视频编码后的码流符合标准的语法结构,解码器就可以根据码流的语法语义进行正常解码。因此,符合某个视频编码标准的编码器是有很大*度的,只要编码后的码流符合标准的规定即可。

在编码器输出的码流中,数据的基本单位是语法元素,每个语法元素由若干比特组成,它表征了某个特定的物理意义,如预测类型、量化参数等。视频编码标准的语法规定了各个语法元素的组织结构,而语义则阐述了语法元索的具体含义。编码器输出的比特码流中,每比特都隶属于某个语法元素,每个语法元素在标准中都有相应的解释。可见,视频编码标准规定了编码后码流的语法语义,也就阐明了从比特流提取语法元素并进行解释的方法,也就是视频的解码过程

1.1.1 HEVC的提出背景

随着数字视频应用产业链的快速发展,视频应用向以下几个方向发展的趋势愈加明显:

  • 高清晰度(Higher Definition):数字视频的应用格式从720p向1080p全面升级,在一些视频应用领域甚至出现了4K×2K、8K×4K的数字视频格式;

  • 高帧率(Higher Frame Rate):数字视频帧率从30fps向60fps、120fps甚至240fps的应用场景升级;

  • 高压缩率(Higher Compression Rate):传输带宽和存储空间一直是视频应用中最为关键的资源,因此,在有限的空间和管道中获得最佳的视频体验一直是用户的不懈追求。

如果继续采用H.264编码就出现的如下一些局限性:

  • 宏块个数的爆发式增长,会导致用于编码宏块的预测模式、运动矢量、参考帧索引和量化级等宏块级参数信息所占用的码字过多,用于编码残差部分的码字明显减少。

  • 由于分辨率的大大增加,单个宏块所表示的图像内容的信息大大减少,这将导致相邻的4×4或8×8块变换后的低频系数相似程度也大大提高,导致出现大量的冗余

  • 由于分辨率的大大增加,表示同一个运动的运动矢量的幅值将大大增加,H.264中采用一个运动矢量预测值,对运动矢量差编码使用的是哥伦布指数编码,该编码方式的特点是数值越小使用的比特数越少。因此,随着运动矢量幅值的大幅增加,H.264中用来对运动矢量进行预测以及编码的方法压缩率将逐渐降低

  • H.264的一些关键算法例如采用CAVLC和CABAC两种基于上下文的熵编码方法、deblock滤波等都要求串行编码,并行度比较低。针对GPU/DSP/FPGA/ASIC等并行化程度非常高的CPU,H.264的这种串行化处理越来越成为制约运算性能的瓶颈。

因此,市场需要比H.264/MPEG-4 AVC更高效的视频编码标准。在这样的背景下,HEVC作为新一代的视频编码标准应运而生,HEVC(High Efficiency Video Coding)是由ITU-T的VCEG(Video Coding Expert Group)和ISO/IEC的MPEG(Moving Picture Experts Group)联合开发,合作开发组称为JCT-VC(Joint Collaborative Team on Video Coding),JCT-VC从2010年4月开始第一次会议,从世界各大公司、高校和研究机构征集新标准的提案,在2013年1月发布了HEVC的第一版,确定了HEVC的基本框架和内容,之后HEVC仍会不断扩展其内容和功能以适应不同场景的应用需求,如对多种颜色空间格式的支持,SCC(Screen Content Coding),3D视频编码,可伸缩视频编码等。ISO/IEC将会把HEVC称为MPEG-H Part2 (ISO/IEC 23008-2),ITU-T可能会把HEVC称为H.265
HEVC编码结构简要总结

图 视频编码标准发展进程

HEVC编码结构简要总结

图 码率压缩趋势

HEVC编码结构简要总结

图 各视频编码标准的率失真性能

1.1.2 AVS和HEVC关键特性对比

相对于AVS,HEVC标准的算法复杂性有了大幅提升,以此获得较好的压缩性能,这源于HEVC在很多特性上都做了较大的改进:

H.264/AVS H.265/HEVC
MB/CU 大小 4×4~16×16 4×4~64×64
亮度插值 Luma-1/2像素{1,-5,20,20,-5,1} Luma-1/4像素{1,1} Luma-1/2像素{-1,4,-11,40,40,-11,4,-1} Luma-1/4像素{-1,4,-10,57,19,-7,3,-1} Chroma-1/8像素{-3,60,8,-1}
MVP 预测方法 空域MVP预测 空域+时域MVP预测 AMVP\Merge
亮度 Intra预测 4×4/8×8/16×16:9/9/4模式 33种角度预测+Planar预测+DC预测
色度 Intra预测 DC, Horizontal, Vertical, Planar DM, LM, Planar, Vertical, Horizontal, DC, diagonal
变换 DCT 4×4/8×8 DCT 4×4/8×8/16×16/32×32 DST 4×4
去方块 滤波器 4×4和8×8边界Deblock滤波 较大的CU尺寸,4×4边界不进行滤波 SAO和ALF

表 AVS和HEVC关键特性对比

1.2 HEVC的分层结构与编码方式

HEVC的设计目标是在同等图像质量下,比H.264/AVC的比特率降低50%,其设计侧重点主要有两个方面,即针对高分辨率视频增加并行处理结构的运用。和以前的ITU-T和ISO/IEC开发的视频标准一样,HEVC采用了基于分块结构的混合编码流程,包括预测、变换、量化、熵编码、环路滤波,但HEVC几乎在每个模块都引入了新的编码技术。

HEVC编码结构简要总结
HEVC编码结构简要总结

图 HEVC视频编码器
  • 帧内预测:去除空间相关性。利用同一帧中的重构块预测当前块。具有35种预测模式。

  • 帧间预测:去除时间相关性。利用已编码的帧作为当前帧的参考图像,来获得当前帧各个块的运动信息。包括了分层B帧预测结构,单向、双向预测。

  • 变换量化:通过对残差数据进行变换量化以去除频域相关性,有损压缩。变换使图像从时域变换到频域,将能量集中到低频区域。量化减小图像编码的动态范围。变换和量化原理上属于两个独立的过程,但HEVC中,这两个过程相互结合,减少了计算复杂度。

  • 去方块滤波:基于块的编码中,重构图像会出现块效应,去方块滤波可以消弱块效应,提高图像主观质量和压缩效率。

  • 样点自适应补偿:SAO滤波处于方块滤波之后,通过解析去方块滤波后的像素的统计特性,为像素添加相应的偏移值,可以在一定程度上消弱振铃效应,提高图像主观质量和压缩效率。

  • 熵编码:将编码控制数据、量化变换系数、帧内预测数据、运动数据等编码为二进制码流进行存储或传输。HEVC采用CABAC进行熵编码,引入并行处理框架,在速度、压缩和内存占用等方面有了大幅改善。

1.2.1 视频编码层(VLC)

HEVC编码结构简要总结

图 HEVC编码结构框图

与H.264/AVC相同,HEVC在编码结构上也分为视频编码层(Video Coding Layer, VCL)网络适配层(Network Abstraction Layer, NAL)。前者独立于网络,主要包括核心的视频压缩引擎和图像分块的语法定义。后者主要是定义数据的封装格式,把VCL产生的比特字符串适配到各种各样的网络环境中。

原始视频经过VCL层,被编码成视频数据,然后经过NAL层,封装成一个个NAL包以适应不同网络的视频传输。HEVC码流在应用过程中与H.264/AVC码流的区别就在于NAL层,具体情况见网络适配层章节。

HEVC视频编码层沿用以往视频标准的混合编码方式,它的输入是原始视频,输出为符合HEVC标准的比特流,简要编码过程如下。

HEVC编码结构简要总结

图 HEVC视频编码层(VLC)
  1. 将每一帧图像划分为不同大小的图像块单元,并将相应的块划分信息加入到码流中,传到解码器。

  2. 对每个单元进行帧内或帧间预测,原始像素值和预测值相减形成该单元的残差;在帧间预测时需要进行运动估计和运动补偿,对需要用到的重建图像事先要进行去方块滤波和自适应样值补偿(SAO)滤波。

  3. 对每个单元的残差进行整数变换(近似离散余弦变换或正弦变换),对形成变换系数进行量化和扫描。

  4. 对量化后的变换系数、预测信息、模式信息、运动信息和头信息等进行熵编码,形成压缩的视频码流(语法元素)输出。

解码过程基本上和编码过程相反。

1.2.2 网络适配层(NAL)与参数集

HEVC网络适配层(NAL)包含了大量的从H.264/AVC的NAL继承来的语法元素。HEVC的VCL层产生的每个语法结构都会被放进网络适配层(NAL)单元的数据包中。NAL单元的头部容量从H.264/AVC的单字节扩充为两个字节,增加的内容主要用于标识它所装载数据的类型。NAL单元根据是否装载有编码视频或其他相关数据而分为VCL NAL单元non-VCL NAL单元两类。HEVC标准中,还包括了为解码器初始化和随机接入的目的而识别图像分类的若干VCL NAL单元类型。

NAL单元负责把视频编码层(VCL)表示视频内容的数据映射到不同传输层上,如RTP/IP、ISO MP4、H.222.0/MPEG-2系统等,并提供丢包恢复处理机制。

HEVC编码结构简要总结

图 HEVC压缩码流结构

在码流结构方面,H.265/HEVC压缩数据采用了类似于H.264/AVC的分层结构,将属于GOP层、Slice层*用的大部分语法元素游离出来,组成序列参数集(Sequence Parameter Set, SPS)图像参数集(Picture Parameter Set, PPS)SPS包含一个CVS(Coded Video Sequence)中所有图像共用的信息,其中CVS被定义为一个GOP编码后所生成的压缩数据。SPS的内容大致包括解码相关信息,如档次级别、分辨率、某档次中编码工具开关标识和涉及的参数、时域可分级信息等。PPS包含一幅图像所用的公共参数,即一辐图像中所有SS(Slice Segment)引用同一个PPS,其大致内容包括初始图像控制信息,如初始量化参数(Quantization Parameter,QP)、分块信息等。此外,为了兼容标准在其他应用上的扩展,例如可分级视频编码器、多视点视频编码器,H.265/HEVC的语法架构中增加了视频参数集(Video Parameter Set, VPS),其内容大致包括多个子层共享的语法元素,其他不属于SPS的特定信息等对于一个SS,通过引用它所使用的PPS,该PPS又引用其对应的SPS,该SPS又引用它对应的VPS,最终得到SS的公用信息。

详细的NAL单元类型列表以及对NAL设计的一般概念,如NAL单元、参数集、存取单元、码流格式、包格式等见网络适配层章节。

1.2.3 编码结构与配置

为了应对不同应用场合,HEVC设立了GOP的3种编码结构,即全帧内(AI)编码低延时(LD)编码随机访问(RA)编码

  • 在全帧内(All Intra)编码结构中,每一帧图像都是按帧内方式进行空间域预测编码,不使用时间参考帧。
    HEVC编码结构简要总结
图 AI编码结构
  • 在低时延(Low Delay)编码结构中,只有第一帧图像按照帧内方式进行编码,并成为及时解码刷新(Instantaneous Decoding Refresh, IDR)帧,随后的各帧都作为普通P和B帧(Generalized P and B picture, GPB )进行编码。主要是为交互式实时通信设计的。

HEVC编码结构简要总结

图 LD编码结构
  • 随机访问(Random Access)编码结构主要由分级B帧构成(Hierarchical B),周期性地(大约每隔1秒)插入随机访问(Clean Random Access, CRA)帧,这些CRA帧成为编码视频流中的随机访问点(Random Access Point, RAP)。所谓随机访问点是指对这些帧的解码可以独立进行,不需要参考比特流中前面已经解码的图像帧。这种对随机访问方式有力地支持了信道转换、搜索以及动态流媒体服务等应用。

HEVC编码结构简要总结

图 RA编码结构

1.3 HEVC的图像组(GOP)与四叉树单元划分

在图像分块方面,HEVC的一个重要革新之处就是为预测和变换编码目标而对图像进行的基于四叉树的划分。

HEVC将一个视频序列分为相继的若干图像组(GOP),每一组由该序列中连续的多帧图像组成。帧是四叉树划分的基本单位,每一帧图像经过四叉树划分,形成覆盖全帧的多个同样尺寸的方形编码树块(CTB)。CTB还可以划分为更小的编码块(CB)。CB是实施视频编码算法的基本单位,它还可以划分为预测块(PB)变换块(TB)

HEVC编码结构简要总结

图 HEVC对视频序列编码的层次结构

1.3.1 图像组(GOP)

GOP分为:closed GOPopen GOP。每个closed GOP以IDR帧开始,各个GOP间相互独立;open GOP中,第一个GOP以IDR帧开始,后续GOP以non-IDR帧开始,即可以参考前面的GOP。

HEVC编码结构简要总结

图 两种不同的GOP类型

1.3.2 编码树单元(CTU)与编码单元(CU)划分

在HEVC中依然采用分块编码方式,但不同于H.264中固定尺寸的宏块,HEVC中块的尺寸是可以自适应改变的。HEVC中定义了四个新的概念:编码树单元(CTU)编码单元(CU)预测单元(PU)变换单元(TU)

HEVC编码结构简要总结

图 64×64 CTU到CU的四叉树划分示例
  1. 编码树单元(CTU)

类似于H.264/AVC中的宏块,HEVC将编码帧分为若干编码树块(Coding Tree Blocks, CTB),它们是进行预测、变换、量化和熵编码等处理的基本单元,其尺寸或者所包含的像素数可以是16×16、32×32或64×64。同一位置的亮度CTB和两块色度CTB,再加上相应的语法元素形成一编码树单元(Coding Tree Units, CTU)。一般来说,Unit是从语法结构角度进行描述,而Block是从采样值角度进行描述,并不特意区分这两个概念。

  1. 编码单元(CU)

CTU又可以按照四叉树结构分解为若干方形编码单元(Coding Units, CU),同一层次的CU必须是同一尺寸的4个方块,最多可有4层分解,即64×64(LCU),32×32,16×16和8×8(SCU)。如果不分解,则这个CTU仅包含一个 CU。每个CU包含一块亮度编码块(Coding Blocks, CB)、两个色度CB以及相应的语法元素。CU的大小和图像的特性是自适应的,在图像比较平缓区域,选择比较大的CU,而在图像边缘或纹理复杂的区域,选择比较小的CU,有利于提高编码效率。CU是决定进行帧内预测还是帧间预测的单元,也就是说整个CU只能是一种预测模式,不是帧内就是帧间。CU还可以按照四杈树层次分解(或不分解)为更小的预测单元(Prediction Units,PU)和变换单元(TB, Transform Units)。

HEVC编码结构简要总结

图 CTU、CU划分实例

HEVC编码结构简要总结

图 “Z”字形扫描标号顺序

每一个划分步骤中,解码器对某个特定的起始块都定义了一个唯一的处理顺序。通过以深度(划分的层次)在先的方式遍历编码四叉树来处理CU,形成一个递归的“Z”字形扫描顺序。这种扫描顺序保证了对于不同分割都能按照相同的遍历顺序进行寻址,有利于程序中的递归实现“Z”字形扫描标号顺序方法还用于定义PU和TU的划分顺序。

1.3.3 预测单元(PU)划分

预测单元PU是进行预测运算的基本单元,包括帧内(Intra)和帧间(Inter)预测两类。一个编码单元CU可以包含一个或者多个预测单元,CU到PU仅允许一层划分,最小的PU为4×4。划分可以是对称的,也可以是不对称的。一个2N×2N(N可以是4、8、16、32)的CU可划分为8种包含PU方式。

HEVC编码结构简要总结

图 2N×2N的CU的PU划分方式
  1. 帧内预测块
  • 当CU为帧内预测方式时,PU尺寸应和CU的尺寸一样,但对于最小尺寸的CU(SCU, 8×8)例外,它可以继续按四叉树方式划分为4个4×4的PU。
  1. 帧间预测块
  • 当CU为帧内预测方式时,PU的划分可以在8种方式中任意选择。

  • 在帧间预测的跳过(skip)模式中只允许选择2N×2N这种模式。

  • 当亮度CU尺寸为16×16或更大时才允许不对称划分,一个CU划分为2个PU,每个PU分别覆盖CU的1/4和3/4面积。

  • 为了限制编码器的复杂度,HEVC禁止使用4×4尺寸的帧间预测块,至于4×8或8×4尺寸的帧间预测块只允许在单向预测时使用。

  • AMP模式有效地用于不能用正方形或对称分区模式表示的纹理。

HEVC编码结构简要总结

图 AMP模式示例(RaceHorses)

1.3.4 变换单元(TU)划分

HEVC突破了原有的变换尺寸限制,可支持大小为4×4~32×32的编码变换,变换单元(TU)是进行变换和量化操作的基本单元,和PU划分类似,它也是在CU的基础上划分的。方形CU到TU的划分也是一种四叉树划分,又称变换树残差四叉树(Residual Quad Tree, RQT), CU是这棵树的根,TU是这棵树的叶,也是方形。与编码单元CU四叉树类似,残差四叉树通过深度优先、光栅扫描的“Z”字形顺序进行遍历。

HEVC编码结构简要总结

图 CTU到CU再到TU的四叉树划分示例

HEVC编码结构简要总结

图 残差四叉树(RQT)示例

根据预测残差的局部变化特性,TU可以自适应地选择最优的模式。大块的TU模式能够将能量更好地集中,小块的TU模式能够保存更多的图像细节。这种灵活的分割结构,可以使变换后的残差能录得到充分压缩,以进一步提高编码增益。

HEVC编码结构简要总结

图 CU划分为PU(虚线)和TU(实线)的示例

CU的变换树的构成和PU的划分基本无关,编码器可以选择穿越PU界线的残差变换。但帧内编码模式中TU尺寸需小于或者等于PU,而帧间编码模式中TU可以大于PU,但是不能超过CU。

注:HEVC为4×4~32×32的TB定义了类似离散余弦变换(DCT)的整数变换。对于4×4亮度帧内预测的TU,也可采用另外一种源于**离散正弦变换(DST)**的整数变换。

1.4 HEVC的条(Slice)和片(Tile)划分

一帧图像可以被划分为条(Slice)片(Tile),条还可以再划分为分条(Slice Segment, SS)。组成条的一系列分条是由一个独立分条开头,后面跟随的是非独立分条或独立分条(如果有)。条(或)片在HEVC图像结构中处于CTU的上一层,一个条或分条是由整数个相继排列的CTU组成的,类似,一个片也是由整数个相继排列的CTU组成的。

HEVC编码结构简要总结

图 Slice到CTU再到CU的编码结构

1.4.1 条(Slice)划分

HEVC编码结构简要总结

图 条划分示例

一幅图像可以分割成一个或多个Slice,每个Slice都是独立的(但环路滤波时可跨越Slice边界进行滤波),利于并行运算。在HEVC码流中,每个条封装为一个NAL单元,其容量小于等于最大网络传输单元(Maximum Transmission Unit,MTU)容量。使用Slice的主要目的是当数据丢失后能再次保证解码同步

Slice可以分为:

  • I Slice:每个CU都使用帧内预测;

  • P Slice:每个PU帧内、单向预测;

  • B Slice:每个CU帧内、单向、双向预测。

一个Slice可以分为若干SS(Slice Segment),包含一个独立SS(它涉及的句法元素由自身决定)和若干依赖SS(它涉及的句法元素由已解码的独立SS决定,依赖SS共享独立SS的一些信息),以独立SS作为该Slice的开始。一个SS包含整数个CTU,且这些CTU分布在同一个NAL中。SS可以作为一个分组来传送视频编码数据,一个Slice内的SS可以相互参考。
HEVC编码结构简要总结

图 Slice、独立SS、依赖SS三者之间的关系示意

1.4.1 片(Tile)划分

在HEVC中新引入了可选的片划分,用水平和垂直的若千条边界将图像帧划分为多个矩形区域,每个区域就是一个片,同时也是一个独立的编码单位。每一个片常包含大体相同的整数个CTU,但并不强求。

片划分时并不要求水平或垂直边界均匀分布,可根据并行计算和差错控制的要求灵活掌握。在编码时,图像中的片也是按光栅扫描顺序进行处理,每个片中的CTU也是按光栅扫描顺序进行
HEVC编码结构简要总结

图 片(Tile)划分示例

在HEVC中,允许条和片在同一图像帧中同时使用,既可以一个条中包含若干片,共享头信息,也可以一个片中包含若干条

HEVC编码结构简要总结

图 条(Slice)和片(Tile)的包含关系

HEVC引入片划分的主要目的是增强并行处理的能力,而不在于提供差错鲁棒性。片划分提供的是一种较简单的粗粒度(子图像)并行处理机制,它的使用不需要提供复杂的线程同步支持。片划分的优点如下:

  • 更高的空间相关性:在这种灵活的矩形片划分中,一个片可以比一个包含相同数目CTB的条在空间上更加紧凑。

  • 有利于并行处理:穿越片边界的熵编码和重建的依赖是不允许的,在运动矢量预测、帧内预测和上下文选择中也是如此。环路滤波是唯一的例外,它允许穿越边界,但也可被比特流中的某个标志所禁止。

  • 减少行缓存容量:对于矩形片划分,运动补偿的行缓存的容量需求可明显降低。

  • 减少头信息开销:由于片是比较规则的矩形划分,为了提高编码效率而不需要另设头信息。因此,和条对比,片具有比较低的头信息开销。

  • 支持感兴趣区域编码:片所提供的矩形像素数据划分有利于感兴趣区间(Region Of Interesting, ROI)编码,可以很简洁地标注出感兴趣区间。

1.5 HEVC的档次(Profile)、水平(Level)和等级(Tier)

为了提供不同应用之间的兼容互通,HEVC定义了编码的不同档次(Profile)水平(Level)等级(Tier)

  • Profile规定了码流中使用了哪些编码工具和算法

  • Level规定了对给定Profile、Tier所对应的解码器处理负担和存储容量参数,主要包括采样率、分辨率、码率的最大值、压缩率的最小值、解码图像缓存区的容量(Decoded Picture Buffer, DPB)、编码图像缓存区的容量(Coded Picture Buffer, CPB)等。

  • Tier规定了每个Level的码率的高低。

编解码器的兼容性方面,要求支持某个Profile的解码器必须支持该Profile及低于该Profile中的所有特性;要求支持某个Level和Tier的解码器可以解码所有等于和低于这个Level和Tier的码流;支持某一个Profile的编码器,并不要求它支持该Profile的所有特性,但是编码的码流必须符合HEVC的标准,才可被支持该Profile的解码器所解码。

1.5.1 档次(Profile)

常用的三个Main Profile:即常规8bit像素精度的Main Profile,支持10bit像素精度的Main 10 Profile和支持静止图像的Main Still Picture Profile

HEVC编码结构简要总结

图 HEVC第一版3个主档次的特点
  1. 主档次(Mian Profile)的特点
  • 比特深度限制为8bit

  • 采样格式限制为4:2:0

  • CTB的大小从16×16到64×64

  • 解码图像的缓存容量限制为6幅图像

  • 允许选择波前和片划分方式,但是不能同时选择。如果选择片,其尺寸至少高为64像素,宽为256像素

  1. 10比特主档次(Main 10 Profile)的特点
  • 主要的特点和Main Profile类似,但是不同之处在于,它能够支持10比特深度
  1. 静止图像档次(Main Still Profile)的特点
  • 主要特点和Main Profile类似,但区别在于它不支持帧间预测编码

1.5.2 水平(Level)

水平(Level)指出了一些对解码端负载和内存占用影响较大的关键参数的约束,这些参数主要包括有:采样频率、分辨率、码率的最大值,压缩率的最小值、解码图形缓冲区(DPB)的容量、编码图像缓冲区(CPB)的容量;水平中还约束了每帧中垂直和水平方向的Tile的最大数量,以及每秒最大的Tile数量。HEVC共设置了13个水平

HEVC编码结构简要总结

表 一般等级(Tier)和水平(Level)的限制

1.5.3 等级(Tier)

对同一水平,按照最大码率和缓存容量要求的不同,HEVC设置了两档等级,定义为高等级(High Tier)主等级(Main Tier)。主等级可用于大多数场合,涵盖13个水平,要求码率较低;高等级可用于特殊要求或苛刻要求的场合,包括4和4以上的8个水平,允许码率较高,在同一水平大约高3-4倍。

参考文献
【1】《新一代高效视频编码H.265/HEVC:原理、标准与实现》,万帅,电子工业出版社
【2】《H.265/HEVC:视频编码新标准及其扩展》,朱秀昌,电子工业出版社

上一篇:CUnit单元测试代码实例


下一篇:【NOIP2020】移球游戏