H.265 视频编码中的 CTU, CU, PU, TU
H.265将图像划分为“树编码单元(coding tree units, CTU)”,而不是像H.264那样的16×16的宏块。根据不同的编码设置,树编码块的尺寸可以被设置为64×64或有限的32×32或16×16。很多研究都展示出更大的树编码块可以提供更高的压缩效率(同样也需要更高的编码速度)。每个树编码块可以被递归分割,利用四叉树结构,分割为32×32、16×16、8×8的子区域,下图就是一个64×64树编码块的分区示例。每个图像进一步被区分为特殊的树编码块组,称之为切割(Slices)和拼贴(Tiles)。编码树单元是H.264的基本编码单位,如同H.264的宏块。编码树单元可向下分成编码单元(Coding Unit,CU)、预测单元(Prediction Unit,PU)及转换单元(Transform Unit,TU)。
每个编码树单元内包含1个亮度与2个色度编码树块,以及记录额外信息的语法元素。一般来说影片大多是以YUV 4:2:0色彩采样进行压缩,因此以16 x 16的编码树单元为例,其中会包含1个16 x 16的亮度编码树区块,以及2个8 x 8的色度编码树区块。
编码单元是H.265基本的预测单元。通常,较小的编码单元被用在细节区域(例如边界等),而较大的编码单元被用在可预测的平面区域。
实线为编码单元,虚线为转换单元。
编码树单元(Coding Tree Unit, CTU)
CTU是H.265/高效率视讯编码(High Efficiency Video Coding, HEVC)的处理单元。此处理单元类似H.264/高阶视讯编码(Advanced Video Coding, AVC)中的宏区块(Macroblock)。编码树单元的大小可以从16x16到64x64,使用比H.264更大的处理单元得到更好的压缩效果
单元(Unit)与区块(Block)
区块是真正储存资料的地方,许多区块加上语法元素组成一个单元。输入影像采用YUV的格式,所以一个编码树单元是由一个亮度(Luma)编码树区块(Coding Tree Block,CTB)、两个色度(Chroma)编码树区块及语法元素(Syntax Element)组成。
由于输入影像采用4:2:0的取样方式,因此亮度编码树区块的大小为色度编码树区块的四倍,如图一所示。
图一 CTU = Syntax(CTB_Y, CTB_Cb, CTB_Cr)
编码树单元与AVC的宏区块最大的不同之为编码树单元可以变得更大且大小可以调整,而宏区块的大小固定为16。HEVC的编码树单元支援更大的大小可以让编码器对高分辨率的影像编码时更有效率。编码树单元的大小定义在序列参数集(Sequence Parameter Set, SPS)内,高效率视讯编码内支援的大小为LxL,其中L=16、32或64。
除了编码树单元,高效率视讯编码(HEVC)中还有另外三种单元分别为编码单元(Coding Unit, CU)、预测单元(Prediction Unit, PU)及转换单元(Transform Unit, TU)。
编码单元(Coding Unit, CU)
编码单元 CU 是码树 CT 结构上的一个叶子 Leaf Node.
码树单元(CTU)可以包含有一个编码单元(Coding Unit, CU)或是切割成多个较小的编码单元,如图二(左)所示。
图二高效率视讯编码 (HEVC) 用编码单元 CU 指示这个单元是属于画面内预测(Intra Prediction)或是画面间预测(Inter Prediction)。
这些编码单元CU可以很方便地利用四分树(Quadtree)的方式呈现,如图二(右)所示。
四分树是一种递回结构,四分数上的数字表示这个节点是否继续做分割,若此节点会继续分割则为1,若不继续分割则为0。由图二可看出节点上的数字为0时,此节点为编码单元。换句话说,在编码树内叶子节点(Leaf Node)为编码单元。编码树的顺序如图三左的虚线所示,在编码单元上采用Z-scan的方式,对编码树来说即为深度优先遍历。
编码单元CU的大小支援2Nx2N,其中N=4、8、16或32,因此高效率视讯编码(HEVC)的四分树最高深度(Depth)为4。
对于YUV=420的彩色视频:一个CU由一个CB_luma samples、2个CB_choma samples和相关的语法元素。
CU = Syntax(CB_Y, CB_Cb, CB_Cr)
一个Luma CB是2^N x 2^N(此处的N与CTU中的N大小不同)的像素区域,而相应的choma CB是2^(N-1) x 2^(N-1)的像素区域,
N的值同样在编码器中确定,并在SPS中传输。
CB是之前已经分割好的CTB根据块中的图像内容而自适应划分的(划分规则:相对比较平坦的区域采用大尺寸的CB,而细节多的区域则采用较小尺寸的CB)。
通常情况下,CB的形状是正方形,亮度分量CB的尺寸可以由8x8大小到亮度CTB的大小,色度CB的尺寸可以由4x4大小到色度CTB的大小(也就是说,亮度CTB的尺寸是亮度CB的最大可支持的尺寸;色度CTB的尺寸是色度CB的最大可支持的尺寸)。如下图所示。
CU可以分为两类:跳过型CU(Skipped CU)和普通CU。
- 跳过型CU只能采用帧间预测模式,而且产生的运动向量和图像的残差信息不需要传送给解码器;
- 普通CU则可以采用帧内预测和帧间预测两种方式进行预测,然后对残差数据以及附加的控制信息进行编码。
通常,在图像的右边界和下边界,一些CTU可能会覆盖部分超出图像边界的区域,这时CTU四叉树会自动分割,减小CB尺寸,使整个CB刚好进入图像。
编码时,在CTU layer通过传输split_cu_flags标志指明CTU是否进一步划分成四个CU。
类似地,对于一个CU,也通过一个split_cu_flags标志指明是否进一步划分成子CU。
CU通过split_cu_flags标志指示进行递归的划分,直到split_cu_flags==0或者达到最小的CU尺寸(mininum CU size). 对于达到最小尺寸的CU,不需要传输split_cu_flags标志,
CU的最小尺寸参数(通过CTU深度确定)在编码器中确定,并在SPS中进行传输。
所以CU的大小范围是:minunum size CU ~CTU,一般情况设置CTU为64,最小CU为8(通过CTU深度确定),所以此时CU大小可取8、16、32、64。
一个CTU进行编码时,是按照深度优先的顺序进行CU编码,类似于z-scan,如下图:右边表示CTU的递归四叉树划分,左边表示CTU中CU的编码顺序。
视频序列的分辨率(长和宽参数)也会在SPS中传输,要求长宽必须是mininum CU size的整数倍,但是可以不是 CTU size的整数倍。对于长宽不是CTU size整数倍的情况,图像边界处的CTU被认为已经分割成和图像边界重合(the CTUs at the borders are inferred to be split until the boundaries of the resulting blocks coincide with the picture boundary),对于这种边界处默认的分割,不需要传输split_cu_flags标志。
CU块是进行决策帧间、帧内、Skip/Merge模式的基本单元。
编码单元的简单语法
预测单元(Prediction Unit, PU)
在转换和量化之前,首先是预测阶段(包括帧内预测和帧间预测)。一个编码单元CU可以使用以下八种预测模式中的一种进行预测。
HEVC在CU layer决定prediction mode,并将一个CU的prediction mode传输在bitstream中。
PU是是进行预测的基本单元,有一个PB_luma、2个PB_choma和相应的语法元素syntax element组成。
PU = Syntax(PB_Y, PB_Cb, PB_Cr)
一个编码单元(CU)可以根据预测模式的切割类型(Splitting Type)分割成一个、两个或是四个预测单元(Prediction Units, PUs)。
帧内编码的编码单元只能使用2N×2N或N×N的平方划分。帧间编码的编码单元可以使用平方和非对称的方式划分。
编码单元与预测单元的不同之处在于预测单元只能被切割一次,而且示基于编码单元做切割。预测单元是一个预测资讯的呈现区块,在一个预测单元内使用同预测方式(Prediction Process)。
高效率视讯编码 (HEVC) 依照不同的预测模式将编码单元CU分成三类,分别为以下三种,其分割方法如图三所示:
- 画面内编码单元(Intra Coded CU):采用的预测方式为使用周围影像做重建的取样样本,即画面内预测(Intra Prediction)。画面内编码单元内仅允许方形(Square)的切割方法,分别为2Nx2N或NxN两种。
- 画面间编码单元(Inter Coded CU):使用运动补偿的方式做预测,即画面间预测(Inter Prediction)。画面间编码单元允许八种分割方法,这些方法又可分为两大类,
- 一为方形与矩形(Square and Rectangular)切割,这种类型的切割方法所产生的区块皆为对称的方式,总共含括了其中四种分割,分别为2Nx2N、NxN、2NxN及Nx2N。
- 另一类分割方式是相对于前一类的对称方式来说,所有的分割会产生出两个不对称的区块,因此称为非对称式(Asymmetric)切割,分别为2NxnU、NxnD、nLx2N及nRx2N(nX:表示较短的边的位置)。这种非对称式的切割对于轮廓或是物件边缘的分割可以达到较好的分割效果,如图四所示。
略过的编码单元(Skipped CU):此为画面间编码单元的特例,意指移动向量差值(Motion Vector Difference)与残余能量(residual energy)皆为零。略过的编码单元内只允许2Nx2N的方式。
如果一个CU的prediction mode是intra prediction
对于luma CU
有35个可选的帧内预测方向
- Plannar(0)、
- DC(1)
- 方向预测(2~34)
对于mininum size的luma CB,可以平均划分成4个方形的subblocks,对于每个subblock进行独立的帧内预测,有独立的intra prediction mode。
也就是说对于帧内预测的CU,可以进行2Nx2N和NxN两种PU划分模式,且NxN模式只有对mininum size CB可以使用。
帧内预测模式可以应用于4×4、8×8、16×16和32×32的变换单元。
一个帧内luma PU块,预测模式确定之后,需要对预测模式进行编码。
HEVC在进行帧内预测模式编码时,先为每个intra PU确定3个最可能模式(确定策略后面介绍),假设为S={M1,M2,M3}。
然后通过判断luma PU的帧内预测模式是否在S中,
- 如果在S中,则需要2bit编码预测模式在S中的索引,
- 否则需要5bit编码预测模式在另外32种模式中的索引。
最可能模式策略
对于luma PU,确定最可能3个预测模式是根据当前PU左边和上边的预测模式,假设左边和上边的预测模式分别是A和B,
- 如果左边或上边PU不是帧内预测模式或是PCM模式,则A或B为DC;
- 另外,如果上边PU块不在当前CTU内,那么B也为DC。
确定好A和B之后:
当A=B时,如果A,B都大于2,即A和B都不是Planar或DC,那么:
M1=A;
M2=2+((A-2-1+32)%32)
M3=2+((A-2+1)%32)
当A=B时,如果A,B至少有一个小于2,即A或B是Planar或DC,那么:
M1=Planar,M2=DC,M3=26(竖直方向预测)
当A!=B时,M1=A,M2=B,对于M3按照下面规则决定:
如果A和B都不是Planar,那么M3=Planar;
如果A和B都不是DC,那么M3=DC;
否则,说明{A,B}={Planar,DC},那么M3=26。
对于choma CU
有5个可选的帧内预测方向
- Planar/0、
- DC/1、
- Vertical/26、
- Horizontal/10
- luma PU的预测方向
对于预测模式的编码,通过0表示luma PU的预测方向,100、111、101和110分别表示Planar/0、DC/1、Vertical/26和Horizontal/10。
另外,在进行帧内预测时,如果CU是mininum size CU,且将CU划分成4个PU时,那么要保证TU小于等于PU,如下图:
表示一个8x8的CU块分成4个PU,那么必须分成四个4x4的TU块,至于每个TU是否进一步划分成更小的TU不作限定,只根据正常TU划分的条件判断。这是为了提高intra预测的精确度。
图a表示如果CU不化成4个TU,那么intra预测的距离就会较远。
图b则表示了将CU划分成4个TU,这时候预测右边的小PU时,左边的PU已经预测完成,并进行了变换和重建,可以保证预测距离更近。
如果一个CU的prediction mode是inter prediction
针对运动向量预测,H.265有两个参考表:L0和L1。每一个都拥有16个参照项,但是唯一图片的最大数量是8。
H.265运动估计要比H.264更加复杂。它使用列表索引,有两个主要的预测模式:合并和高级运动向量(Merge and Advanced MV.)。
对于inter PU,luma PB和choma PBs拥有相同的PU划分模式和motion parameters(包括运动估计方向数目(1/2),参考帧索引,和对每个运动估计方向的运动矢量MV)。
HEVC中有8中PU划分模式(2Nx2N、NxN、2个SMP和4个AMP),如下图所示:
对于NxN模式,只有mininum size CU可以使用,且8x8CU不能使用。
对于AMP模式,只有32x32和16x16的CU可以使用,8x8和64x64的CU不能使用,所以inter PU的最小尺寸为8x4和4x8,这是因为TU最小尺寸为4x4,进行变换的最小单元也是4x4。另外,HEVC可以在SPS中通过一个syntax禁用AMP。
从H.262到HEVC过程中,PU的可选大小变化如下图:
如果一个CU的prediction mode是Skip
那么PU的划分模式只能是2N x 2N。
PS:对于4x8和8x4,HEVC规定只能用单向预测,不能用双向预测。
在HM1中,实际可以通过inter_4x4_enabled_flag(在SPS中)指示是否使用4x4的PU。
限制
预测单元的切割在不同的预测模式有不同的限制,讨论如下:
- 画面内编码单元(Intra Coded CU):由于输入影像是采用YUV4:2:0的影像格式,因此对于亮度(Luma)与色度(Chroma)的切割及大小需要讨论。当亮度的画面内预测的大小为4x4的区块,由于区块大小最小为4x4,因此色度区块不会继续切割,而继续使用4x4方式。换句话说,每一个4x4的色度区块,会对应到4个4x4的亮度区块。
- 画面间编码单元(Inter Coded CU):为了节省内存带宽,当编码单元的大小为8x8时,画面间的编码单元就不采用NxN的方式做切割,在此即为4x4的区块大小不会出现。而且不对称分割的方式,在编码单元的大小不等于最小时,此种切割方式才是允许的。
转换单元(Transform Unit, TU)
转换单元是呈现残量(Residual)或是转换系数(Transform Coefficients)的区块,这个区块主要是做整数转换(Integer Transform)或是量化(Quantization)。[1][3]转换单元(Transform Unit, TU)与预测单元(PU)相似,因为编码单元可以只有一个转换单元或是由许多个较小的转换单元所组成。不同之处为转换单元可以递回地往下继续分割,也是用四分树(Quadtree)的方式储存,而预测单元只能在编码单元做分割一次。图五显示出编码单元与转换单元的关系,实线为编码单元,虚线为转换单元,虚线的四分树会长在实线四分树的叶子节点,这是因为只有实线四分树的叶子节点是编码单元。[1]转换单元内只有支援方形的分割方割(Square Partition),其大小为64、32、16、8、4。
图五、编码单元与转换单元的关系,实线为编码单元,虚线为转换单元。
残量四分树
转换单元TU的编码树CT可以称为转换树(Transform Tree)或是残量四分树(Residual Quadtree, RQT)。
残量四分树可以分成两类,分别为方形残量四分树(Square Residual Quadtree, SRQT)或是非方形残量四分树(Nonsquare Residual Quadtree, NSRQT),
但是在最后的草案中非方形残量四分树(NSRQT)被移除掉。
图六为非方形残量四分树的切割方式。
图六、非方形残量四分树的切割方式。
CU划分成TU中,TU的大小范围取决于max TU size、min TU size和max TU depth三个参数决定,这三个参数在SPS level进行传输。
- max TU size为5表示最大TU是32x32,
- min TU size为2表示最小TU是4x4。
- max depth为3表示CU划分成TU最多划分成3层(如上图10、11、12、13就在第3层)。
对于intra predition,要确保PU大于等于TU(即TU不跨多个intra PU),而inter predition没有相应的限制。
另外,对于一个CU,最多有一个trasform tree syntax,所以一个CU的luma CB 和choma CBs拥有相同的TU划分。但是除了对于8x8的luma CB划分成4x4的TB时,4x4的choma CBs不会划分成2x2的TB。
限制
在相同编码单元(CU)内的预测单元(PU)与转换单元(TU),转换单元的大小可以比预测单元的大小还要来的大,在同一个编码单元内不同预测单元的残量(Residuals)可以一起被转换。换句话说,当编码单元的大小等于转换单元的大小时,转换是对整个编码单元去做转换而不是对单一的预测单元一个一个做转换。而这种情况只会出现在画面间编码单元(Inter Coded CU)中,因为画面内编码单元(Intra Coded CU)总是会造成转换单元(TU)分割。
原文链接:https://zhuanlan.zhihu.com/p/67303770
CTU:
传统的视频编码都是基于宏块实现的,对于4:2:0采样格式的视频,个宏块包含一个16×16大小的亮度块和两个8×8大小的色度块。考虑到高清视频超高清视频的自身特性,H.265/HEVC标准中引入了树形编码单元CTU,其尺寸由编码器指定,且可大于宏块尺寸。同一位置处的个亮度CTB和两个色度CTB,再加上相应的语法元素形成一个CTU。对于一个大小为L×L的亮度CTB,L的取值可以是16、32或64。在高分辨率视频的编码中,使用较大的CTB可以获得更好的压缩性能。
为了灵活、高效地表示视频场景中的不同纹理细节、运动变化的视频内容或者视频对象,H.265/HEⅤC为图像划分定义了一套全新的语法单元,包括编码单元CU、预测单元( Prediction Unit, PU)和变换单元Transform Unit, TU)。其中编码单元是进行预测、变换、量化和熵编码等处理的基本单元,预测单元是进行帧内帧间预测的基本单元,变换单元是进行变换和量化的基本单元。这三个单元的分离,不仅使得变换预测和编码各个处理环节更加灵活,也使得各环节的划分更加符合视频图像的纹理特征,保证编码性能的最优化。
CU
近年来标清和高清视频产业得到了蓬勃发展。大尺寸图像的一个特点是平缓区域的面积更大,用较大的块进行编码能够极大地提升编码效率。在H264AVC中,编码块( Coding block,CB)的大小是固定的。而在H265/HEVC中,一个CTB可以直接作为一个CB,也可以进一步以四叉树的形式划分为多个小的CB。所以H265HEVC中CB的大小是可变的,亮度CB最大为64×64,最小为8×8。一方面大的CB可以使得平缓区域的编码效率大大提高,另一方面小的CB能很好地处理图像局部的细节,从而可以使复杂图像的预测更加准确。一个亮度CB和相应的色度CB及它们相关的句法元素共同组成一个编码单元(CU)。在H265HEVC中,一幅图像可以被划分为若干个互不重叠的CTU,在CTU内部,采用基于四叉树的循环分层结构。同一层次上的编码单元具有相同的分割深度。一个CTU可能只包含一个CU(没有进行划分),也可能被划分为多个CU。
编码单元是否继续被划分取决于分割标志位 Split flag。对于编码单元CUa,假设它的大小为2N×2N,深度为d。如果它对应的 Split flag值为0,则CU不再进行四叉树划分;反之,CU4将会被划分为4个独立的编码单元CU1。编码单元CUa1的深度和大小分别变为d+1和N×N。
①编码单元的大小可以大于传统的宏块大小(16×16)。对于平坦区域,用一个较大的编码单元编码可以减少所用的比特数,提高编码效率。这一点在高清视频应用领域体现得尤为明显。
②通过合理地选择CTU大小和最大层次深度,编码器的编码结构可以根据不同的图片内容、图片大小以及应用需求获得较大程度的优化
③所有的单元类型都统称为编码单元,消除了宏块与亚宏块之分,并且编码单元的结构可以根据CTU大小、最大编码深度以及一系列划分标志 Split flag简单地表示出来。
PU
预测单元PU规定了编码单元的所有预测模式,一切与预测有关的信息都定义在预测单元部分。比如,帧内预测的方向、帧间预测的分割方式、运动矢量预测,以及帧间预测参考图像索引号都属于预测单元的范畴。
对于一个2N×2N的CU模式,帧内预测单元PU的可选模式有两种2N×2N和NXN;帧间预测单元PU的可选模式有8种:4种对称模式(2Nx×2N、2NXN、N×2N、NXN)和4种非对称模式(2N×nU、2NXnD、nL×2N、nRx2N)。其中2N×nU和2N×nD分别以上下1:3、3:1的比率划分,nL×2N和nR×2N分别以左右1:3、3:1的比率划分。skjp模式是帧间预测的一种,当需要编码的运动信息只有运动参数集索引(采用运动合并技术),编码残差信息不需要编码时,为2N×2 V skip模式。此外,表3.8还给出了PU相关的语法元素。
TU
变换单元是独立完成变换和量化的基本单元,其尺寸也是灵活变化的。H265/HEVC突破了原有的变换尺寸限制,可支持大小为4×4~32×32的编码变换,以变换单元(TU)为基本单元进行变换和量化。它的大小依赖于CU模式,在一个CU内,允许TU跨越多个PU,以四叉树的形式递归划分。对于一个2N×2N的CU,有一个标志位决定其是否划分为4个NXN的TU,是否可以进一步划分由SPS中的TU的最大划分深度决定。根据预测残差的局部变化特性,TU可以自适应地选择最优的模式。大块的TU模式能够将能量更好地集中,小块的TU模式能够保存更多的图像细节。 这种灵活的分割结构,可以使变换后的残差能量得到充分压缩,以进一步提高编码增益。
作者:Persistently
链接:https://www.jianshu.com/p/52e6184a95e6
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
如果这篇文章帮助到了你,你可以请作者喝一杯咖啡