本博文主要介绍HEVC编码结构中的“编码时的分层处理架构”。HEVC编码结构的主要目的就是为了各种应用下操作的灵活性以及数据损失的鲁棒性(所谓“鲁棒性”,是指控制系统在一定的参数摄动下,维持其它某些性能的特性)。从GOP(Group of Pictures)至Slice,从Slice至SS(Slice Segment),从SS至CTU(Coding Tree Unit),从CTU至CU(Coding Unit)的过程就是编码时的分层处理架构。
视频序列由若干时间连续的图像构成,在对其进行压缩时,先将该视频序列分割为若干个小的图像组(Group of Pictures,GOP),GOP分为:封闭式GOP(Closed GOP)和开放式GOP(Opened GOP)。
封闭式GOP如下图所示,每个GOP以IDR(Instantaneous Decoding Refresh)图像开始,各个GOP之间独立编解码。
开放式GOP如下图所示,第一个GOP的第一个帧内编码图像为IDR图像,后续GOP中的第一个帧内编码图像为non-IDR图像,也就是说,后面GOP中的帧间编码图像可以越过non-IDR图像,使用前一个GOP中的已编码图像做参考图像。
每个GOP又被划分为多个片(Slice),片与片之间进行独立编码。其主要目的之一是在数据丢失情况下进行重新同步。在HEVC中,默认情况下,一个GOP分为4个片,每个片就是一帧图像。
如下图所示,每个片由一个或多个片段(Slice Segment,SS)组成。在HEVC中,默认情况下,一个片中只包含一个片段,也就是说,一帧图像就是一个片,也是一个片段。
Tile是HEVC中新提出的概念,一幅图像不仅仅可以划分为若干个Slice,还可以划分为若干个Tile,即从水平和垂直方向将一幅图像分割为若干个矩形区域,一个矩形区域就是一个Tile,如下图所示。每个Tile包含整数个CTU,其可以独立解码。划分Tile的主要目的是在增强并行处理能力的同时又不引入新的错误扩散。Tile提供比CTB更大程度的并行(在图像或者子图像层面上),在使用时无需进行复杂的线程同步。
Tile的划分并不要求水平和垂直边界均匀分布,可根据并行计算和差错控制的要求灵活掌握。通常情况下,每一个Tile中包含的CTU数据是近似相等的。在编码时,图像中的所有Tile按照扫描顺序进行处理,每个Tile中的CTU也按照扫描顺序进行编码。需要注意的是:一个Tile包含的CTU个数与Slice中的CTU个数互不影响,在同一幅图像中,可以同时存在某些Slice中包含多个Tile和某些Tile中包含多个Slice的情况。
Slice与Tile划分的目的都是为了进行独立解码,但是二者的划分方式又有所不同。Tile形状基本上为矩形,Slice的形状则为条带状。Slice由一系列的SS组成,一个SS由一系列的CTU组成。Tile则直接由一系列的CTU组成。
Slice/SS和Tile之间也必须遵循一些基本原则,每个Slice/SS和Tile至少要满足以下两个条件之一:
(1)、一个Slice/SS中的所有CTU属于同一个Tile;
(2)、一个Tile中的所有CTU属于同一个Slice/SS。
为了更灵活、更有效地表示视频内容,HEVC中还引入了编码树单元CTU(Coding Tree Unit),每个CTU包括一个亮度CTB(Coding Tree Block)和两个色度CTB。
如下图所示,一个SS在编码时,首先被分割为相同大小的CTU,每个CTU按照四叉树分割方式被划分为不同类型的编码单元CU(Coding Units)。
在H.264中,视频编码是基于宏块实现的,对于4:2:0采样格式的视频,一个宏块包含一个16*16大小的亮度块和两个8*8大小的色度块。考虑到高清/超清视频的自身特性,HEVC标准中引入了树形编码单元CTU,其尺寸由编码器指定,且可大于宏块尺寸。同一处位置的一个亮度CTB和两个色度CTB,再加上相应的语法元素形成一个CTU。
对于一个L*L大小的亮度CTB,L的取值可以是8或16或32或64,也就是说,亮度CTB的大小可以为8*8或16*16或32*32或64*64,而色度CTB的大小可以为4*4或8*8或16*16或32*32。在高分辨率视频编码过程中,使用较大的CTB可以获得更好的压缩效果。
为了高效灵活地表示视频场景中的不同纹理细节、运动变化的视频内容或视频对象。HEVC为图像划分定义了一套全新的语法单元,包括编码单元CU(Coding Unit)、预测单元PU(Prediction Unit)和变换单元TU(Transform Unit)。其中CU是进行预测、变换量化和熵编码等处理的基本单元,PU是进行帧内/帧间预测编码的基本单元,TU是进行变换和量化的基本单元。这三个单元的分离,不仅使得变换、预测和编码的各个处理环节更加灵活,也使得各环节的划分更加符合视频图像的纹理特征,保证编码性能的最优化。
在H.264中,编码块CB的大小是固定的,固定大小的CB并没有完全挖掘出图像的特点,尤其是大尺寸平缓区域的图像,用较大的块进行编码能够极大地提升编码效率。在HEVC中,一个CTB可以直接作为一个CB,亦可进一步以四叉树的形式划分为多个小的CB。所以,在HEVC中CB的大小是可变的,亮度CB最大为64*64,最小为8*8,大的CB可以使得平缓区域的编码效率大大提升,小的CB能很好地处理图像局部的细节,从而使得复杂图像的预测更加准确。
一个亮度CB和两个色度CB以及它们相应的语句元素共同组成一个编码单元CU。在HEVC中,一幅图像可以被划分为若干不重叠的CTU,在CTU内部采用基于四叉树的循环分层结构,同一层次的CU具有相同的划分深度。一个CTU可能只包含一个CU(没有划分),也可能被划分为多个CU,如下图所示是一个CTU划分为多个CU的示意图。
CU是否继续划分取决于分割标志Split Flag,这种灵活地单元表示方法相比于H.264中的宏块划分具有以下优点:
(1)、CU大小可以大于传统的宏块大小(16*16),对于平坦区域,较大的编码单元可以减少所用的比特数,提高了编码效率,尤其适用于高清/超高清视频。
(2)、通过合理地选择CTU的大小和最大层次深度,编码器的结构可以根据不同图片内容、图片大小以及应用需求获得较大程度的优化。
(3)、所有的单元类型都统称为CU,消除了宏块与亚宏块之分,并且编码单元的结构可以根据CTU大小、最大编码深度以及一系列划分标志Split Flag简单地表示出来。
预测单元PU规定了编码单元的所有预测模式,一切与预测有关的信息都定义在预测单元部分,比如,帧内预测方向、帧间预测的分割方式、运动矢量预测,以及帧间预测参考图像索引号都属于预测单元的范畴。
一个2N*2N的编码单元所包含的预测单元划分模式如下图所示。
对于一个2N*2N的CU模式,帧内预测单元PU的可选模式有两种:2N*2N和N*N。对于帧间单元PU,可选择的模式有9种,包块4种对称模式、4种不对称模式和Skip模式。当需要编码的运动信息只有运动参数集索引(采用运动合并技术),编码残差信息不需要编码时,为2N*2N的Skip模式。
TU是独立完成变换和量化的基本单元,其尺寸也是灵活变化的。HEVC突破了原有的变换尺寸限制,可支持大小为4*4至32*32的编码变换,以TU为基本单元进行变换和量化,它的模式依赖于CU模式,在一个CU内,允许TU跨越多个PU,以四叉树形式递归划分,如下图所示。
对于一个2N*2N大小的CU,有一个标志位决定其是否划分为4个N*N的TU,是否可以进一步划分由SPS中的TU的最大划分深度决定。根据预测残差的局部变化特性,TU可以自适应地选择最优的模式,大块的TU模式能够将能量更好地集中,小块的TU模式能够保存更多的图像细节,这种灵活地分割结构,可以使变换后的残差能量得到充分压缩,以进一步提高编码增益。
以上就是编码结构中的分层处理架构,相对而言比较简单~~~但是非常重要!!!