H.265/HEVC的编码结构和块划分

时光总嘲笑我的痴心妄想 提交于 2020-02-17 06:15:30

一、CTU

HEVC中引入了树形编码单元(Coding Tree Unit),即一帧图像可以划分为若干个互不重叠的CTU,如下图所示。

CTU的宽度和高度以一个序列参数集表示,这意味着视频序列中的所有CTU都具有相同的大小:64×64、32×32或16×16。

每个CTU由同一位置处的一个亮度CTB和两个色度CTB再加上相应的语法元素组成,尺寸由编码器指定,且可大于宏块尺寸,如下图所示。

对于一个LxL的CTU,包括一个LxL的亮度CTB和两个L/2 x L/2的色度CTB,L的值可以等于16、32或64,由SPS中指定的编码语法元素确定。

二、CTB

在高分辨率视频编码中,使用较大的CTB可以获得更好的压缩性能。一个CTB可以直接作为一个编码块CB,也可以进一步通过四叉树形式划分为多个小的CB,如下图所示。

CB的大小是可变的,亮度CB最大为64x64,最小为8x8。大CB可以提高平滑区域的编码效率,小CB可以很好的处理图像局部细节,使复杂图像的预测更加准确。

三、CU

一个亮度CB和相应的两个色度CB及对应的语法元素组成一个编码单元CU。CTU到采用基于四叉树循环分层结构进行划分,一个CTU可能只包含一个CU(没有进行划分),也可能被划分为多个CU。

四、PU和PB

CB对于预测类型决策来说已经足够好了,但它仍然可能太大,无法存储运动矢量(帧间预测)或帧内预测模式。因此,进行预测时,可以将CB进一步划分为PB,划分方式由预测方式决定。如下图所示,Skip是帧间预测的一种。

 

PU由亮度PB和相应的两个色度PB和相应的语法元素共同构成,预测单元PU规定了编码单元的所有预测模式,包含了一切于预测相关的信息,如帧内预测方向、帧间预测的分割方式、运动矢量预测,以及帧间预测参考图像索引号等。PU是进行预测的基本单元。

五、TU和TB

预测结束后,我们需要用对残差(预测图像和实际图像之间的差异)进行变换。同样,CB对于这个可能太大了,因为CB可能包含一个详细的部分(高频)和一个平坦的部分(低频)。因此,每个CB可以不同地划分为TBs(转换块)。

TU由亮度TB和两个色度TB及相应的语法元素组成,TU是进行变换和量化的基本单元。

六、slice

一幅图像可以被划分为一个或多个片或称为条带(Slice),每个片的数据编码都是独立的。

如下图,一幅图像被划分为N个Slice,Slice成条带形。在编码时,每一个Slice中的CTU按光栅扫描顺序进行编码。

Slice头信息无法通过前一个Slice的头信息推断得到,这就要求Slice不能跨过它的边界来进行帧内或帧间预测,但环路滤波器可以跨越Slice进行滤波。使用Slice的主要目的是当数据丢失后能再次保证解码同步

根据编码类型,Slice可以分为:

(1)I Slice:该Slice中所有CU的编码过程都使用帧内预测。

(2)P Slice:在I Slice的基础上,该Slice中的CU还可以使用帧间预测,每个预测块(PB)使用至多一个运动补偿预测信息。P Slice只使用图像参考列表list0。

(3)B Slice:在P Slice的基础上,B Slice中的CU也可以使用帧间预测,但是每个PB可以使用至多两个运动补偿预测信息。B Slice可以使用图像参考列表list 0和list 1。

一个独立的Slice可以进一步划分为若干个条带片段Slice segment(SS),包括一个独立SS和若干个依赖SS。

如图Slice以独立SS作为开始,一个SS包含整数个CTU(至少一个)。预测过程不可以跨越Slice边界,但是可以跨越依赖SS边界,一个Slice中的SS之间可以相互参考。

 七、Tiles

在HEVC中一幅图像可以划分为若干个Tile(这是相比AVC的优化改进),即从从水平和垂直方向将图像分割为若干个矩形区域,把这些矩形区域称为Tile。通常每个Tile包含的CTU数据近似相等。

每个Tile包含整数个CTU,其可以独立编码,在编码时,每一个Tile包含的CTU按照扫描顺序进行编码。划分Tile的主要目的是增强并行处理能力而不引入新的错误扩散。 

一幅图像可以被划分为若干个Slice,也可以划分为若干个Tile,两者划分的目的都是为了进行独立编码。某些Slice中可以包含多个Tile,同样某些Tile中也可以包含多个Slice。Tile包含的CTU个数和Slice中的CTU个数互不影响。

 

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!