HEVC标准中的图像分割(2),slice,tile,CTU,CU,PU,TU等

来源:互联网 发布:惠普打印机安卓软件 编辑:程序博客网 时间:2024/05/17 06:33

接着来说HEVC的图像分割。

HEVC的标准中有这么一段话,翻译过来就是:

图像分成分量(Y,Cb,Cr)。

分量分成coding tree blocks

图像分成tile列

图像分成tile行

Tile列分成tiles

Tile行分成tiles

Tile分成coding tree blocks

图像分成slices

Slice分成slice segment

Slice segment分成coding tree units

coding tree unit分成coding tree blocks

coding tree block分成coding blocks

coding tree unit分成coding units

coding tree unit分成prediction units

coding unit分成transform units,

coding unit 分成coding blocks,

coding block 分成prediction blocks,

coding block 分成transform blocks,

prediction unit 分成prediction blocks,

transform unit 分成transform blocks.

看完了,你也许会说,这TMD说的些啥?都是罗圈话!别急,让我们read between lines。

图像分成分量(Y,Cb,Cr)——这个好理解吧,YUV三个分量

分量分成coding tree blocks ——注意了,每个分量的在几何上划分的单位,叫block

图像分成tile列——由SPS中的参数可知,一列tile具有相同的宽度

图像分成tile行——由SPS中的参数可知,一行tile具有相同的宽度,所以tile就像田字格一样把图像分成了很多格子,不同的是这些格子不一定是正方形,而是有点像空的excel表格。详见HEVC标准中的图像分割(1)

Tile列分成tiles——这个好理解,一行有n个tile

Tile行分成tiles——同上

Tile分成coding tree units——coding tree block,简称CTU,是解码的基本单位,是HEVC中相当于其他标准宏块的存在,注意是units,不是blocks,为什么呢?因为tlie有3个分量,当YUV结合在一起的时候叫unit而不是block

图像分成slices——简单

Slice分成slice segment——简单(1)

Slice segment分成coding tree units——同样是units,不是block

coding tree unit分成coding tree blocks——其实就是分成了YUV三个coding tree block

coding tree block分成coding blocks——coding tree block和coding block,coding block是coding tree block树形结构的终端节点,会在后面详细讲解。

coding tree unit分成coding units——coding unit是CTU树形结构的终端节点

coding unit分成prediction units——预测unit

coding unit分成transform units——变换unit

coding unit 分成coding blocks——CU包含YUV三个分量的coding blocks

coding block 分成prediction blocks——预测块

coding block 分成transform blocks——变换块

prediction unit 分成prediction blocks——预测unit在三个分量上进行划分

transform unit 分成transform blocks——变换unit在三个分量上进行划分



        在HEVC标准中的图像分割(1)的最后,我介绍了tile扫描方式,原因就在于slice segment包含n个CTU(coding tree unit)(见(1)),CTU按照tile扫描顺序排列。也就是说,在每个slice segment中,每解码一个CTU,TS扫描地址加1。

        这里引入几个SPS中的参数:

1. log2_min_luma_coding_block_size_minus3:加上3等于MinCbLog2SizeY,给出最小亮度CB(coding block)的尺寸。

2.log2_diff_max_min_luma_coding_block_size:给出最小亮度CB尺寸和最大亮度CB尺寸间的差距。

       所以最大亮度CB的尺寸的对数为:

        CtbLog2SizeY = MinCbLog2SizeY +log2_diff_max_min_luma_coding_block_size

3.log2_min_luma_transform_block_size_minus2:加2等于MinTbLog2SizeY,给出最小亮度变换块的尺寸。

4.log2_diff_max_min_luma_transform_block_size:给出最小亮度变换块尺寸和最大亮度变换块尺寸间的差距。

       最大亮度变换块的尺寸不大于Min( CtbLog2SizeY, 5 )


Coding Tree Unit

        CTU包含一个coding_quadtree(x0, y0, log2CbSize, cqtDepth)结构,即解码四分树形结构,在本文中,简称CQT结构。

        对于CQT的根节点,(x0, y0)为CTU左上角坐标(单位:像素);log2CbSize为Ctblog2SizeY,即CTU尺寸的对数;cqtDepth为CQT的深度,为0。

        变量split_cu_flag作为CQT的元素,可由码流解析得到。

        如果split_cu_flag为1,表示CQT结构有分叉,分成4个CQT,一直循环嵌套,直到split_cu_flag为0。如下图所示:


        其中,x1 = x0 + (1  <<  ( log2CbSize − 1 ) ); y1 = y0 + ( 1  << ( log2CbSize − 1 ) ).

        在log2CbSize等于MinCbLog2SizeY时,即CQT的尺寸等于最小亮度CB尺寸时,split_cu_flag等于0,CQT结构分叉结束。即CQT终端节点的尺寸大于等于最小亮度CB尺寸。

        若split_cu_flag为0,包含一个coding_unit( x0, y0, log2CbSize )结构。


Coding Unit

        coding unit(下面简称CU) 在预测模式为inter时,可以分成prediction unit(简称PU),coding unit也分成transform unit(简称TU)。

Prediction Unit

        参数part mode提供了PU的分块方式。如下表所示:

        根据part mode得到了PU的分块方式,如下图所示。


Transform Unit

        transform uint的划分也是四分树形结构,即transform_tree(x0, y0,xBase, yBase, log2TrafoSize, trafoDepth, blkIdx)结构,本文简称TT结构。

        作为根节点,(x0, y0)等于当前CU的左上角坐标,(xBase, yBase)等于当前CU的左上角坐标,log2TrafoSize等于log2CbSize,trafoDepth等于0,blkidx等于0。

        参数split_transform_flag可由码流解析得到。如果split_transform_flag等于1,则当前节点分成4个节点,如下图所示:


       其中,x1 = x0 + (1  <<  ( log2CbSize − 1 ) ); y1 = y0 + ( 1  << ( log2CbSize − 1 ) )。

       如果参数split_transform_flag等于0,则到达终端节点transform_unit( x0, y0, xBase, yBase, log2TrafoSize, trafoDepth,blkIdx ),即TU。








0 0
原创粉丝点击