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

H.265的标准可以从网上免费下载。

        这里写一些我个人对HEVC(H.265)标准的解读,难免有些错误,欢迎大家积极积极留言讨论。

        图像分割,就是说一帧图像从几何空间上在标准中是如何划分的。

与h.264不同,265引入了tile的概念。

        首先,图像被分成slices和tiles。

        一个Slice包含一个slice segment或者以一个independent slice segment为首一系列的slice segments。

        Slice和tile都由一系列的coding tree units组成,简称CTU(相当于以前宏块的概念)。

        例子a1,如下图中,图像被分成了两个slice,第一个slice又分成了3个slice segments,其中第一个slice segment是一个包含4个coding tree units的independent slice segment。而第二个slice只有一个slice segment。

HEVC标准中的图像分割(1),slice,tile,CTU,CU,PU,TU等_第1张图片

        例子a2,如下图(a)中,图像被分成2个tiles,图像只有一个slice,包含一个independent slice segment和四个dependent slice segments。

        图(b)中,图像也被分成了2个tiles,第一个tile有一个两个slices,第二个有一个slice。

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

(a)

HEVC标准中的图像分割(1),slice,tile,CTU,CU,PU,TU等_第3张图片

(b)

        Tiles异于slices的一点是,tiles必须为长方形。而且通过分析后续标准中关于语法元素的介绍,可以肯定,tiles的划分必须满足每一行的tiles有相同的高度,每一行的tiles有相同的宽度。

标准中给出了一下条件来约束slices和tiles的相互关系。

对于每个tiles和slices,以下条件至少满足一条。

——一个Slice所有的coding tree units都属于同一个tile。(注:本文中用条件a代指)

        ——一个tile所有的coding tree units都属于同一个slice。(注:条件b)

对于每个tiles和slices segment,以下条件至少满足一条。

——一个Slicesegment所有的coding treeunits都属于同一个tile。

        ——一个tile所有的coding tree units都属于同一个slice segment。

       这些条件显得较为抽象,可以通过例子来具体分析。


        例子b1,如图所示:每个小方块为一个CTU, 图像分割为两个slices,slice0(6x2)和slice1(6x4)。4个tiles,tile0(3x2),tile1(3x2),tile3(3x4)和tile4(3x4)。

                此图像满足条件b,而不满足条件a。所以此例符合标准。

HEVC标准中的图像分割(1),slice,tile,CTU,CU,PU,TU等_第4张图片

         例子b2,如图所示:图像分割为两个tile,tile0(3x6),tile1(3x6)。4个slice,slice0(包含11个coding tree units),slice1(包含7个coding tree units),slice2(包含8个coding tree units)和slice3(包含10个coding tree units)。

                 此图像满足条件a,而不满足条件b。所以此例符合标准。

HEVC标准中的图像分割(1),slice,tile,CTU,CU,PU,TU等_第5张图片

         例子b3,如图所示:图像分割为两个slices,slice0(6x3)和slice1(6x3)。两个tiles,tile0(2x6)和tile1(4x6)。则条件a和条件b都不符合。所以不符合标准。

HEVC标准中的图像分割(1),slice,tile,CTU,CU,PU,TU等_第6张图片

        前面提过tile的一些特质,下面详细介绍。变量colWidth[ i]标明各个tile的宽度,单位为CTU。可由语法元素uniform_spacing_flag,num_tile_columns_minus1,column_width_minus1[ i ]和PicWidthInCtbsY计算得出。变量colBd[ i ]标明各个tile横向的边界,可由colWidth[ i ]计算得出。

        变量rowHeight [ j]标明各个tile的高度,单位是CTU。可由语法元素uniform_spacing_flag,num_tile_rows_minus1,row_height_minus1[ j ]和PicHeightInCtbsY计算得出。变量rowBd[ i ]标明各个tile横向的边界,可由rowHeight[ i ]计算得出。

        其中的关系可一目了然的从下图看出。

HEVC标准中的图像分割(1),slice,tile,CTU,CU,PU,TU等_第7张图片

       数组CtbAddrRsToTs[ctbAddrRs ]将以CTB为单位的光栅扫描地址转化为tile扫描地址。下图中,左侧为光栅扫描,右侧为tile扫描。最小的方块代表一个CTU,图像分成了4个tile。

HEVC标准中的图像分割(1),slice,tile,CTU,CU,PU,TU等_第8张图片

为什么要做这个转化呢?因为在HEVC的码流中,CTU编码顺序就是按照这个tile扫描地址递增的。








你可能感兴趣的:(HEVC标准中的图像分割(1),slice,tile,CTU,CU,PU,TU等)