HEVC中CU、TU、PU划分和扫描方式简析

作者:66

(转载请务必注明出处)

在进一步看代码前,先了解一下图像划分方式:

HEVC中,一帧图像分为多个slice,每个slice进行独立编解码。每个slice分为多个树形编码单元CTU,一个CTU分为一个亮度CTB和两个色度CTBCTB大小有163264CTU同)。进一步再划分为CU编码单元、PU预测单元、TU变换单元,使得编码、预测、变换分离,处理的时候更灵活。它们的关系时,CTU以四叉树方式划分为CUCU最大为64x64,最小为8x8CU以四叉树方式划分为TUPUTU最大为32x32,最小为8x8,其中PUTU无确定关系,允许TU跨越多个PU,但在帧内预测中一个PU可对应多个TU,一个TU至多对应一个PU。另外,HM中数据最小处理单元为4x4,而不是每次处理一个像素。

 HEVC中CU、TU、PU划分和扫描方式简析_第1张图片

 图一.4x4最小单元

CTUCU的关系如图:

        HEVC中CU、TU、PU划分和扫描方式简析_第2张图片

图二 CTUCU的划分

CU的大小在代码中用划分深度(下一篇代码中可见)来表示,PUTU的划分均基于CU。(Visio还没装上,这图抄网上的也不规范)

扫描方式:

前辈HEVC_CJL提到了帧内预测的扫描方式,感谢前辈,原文链接:http://blog.csdn.net/hevc_cjl/article/details/8183144

HEVC对像素有两种扫描方式:光栅扫描和Z扫描。指对像素的读取顺序,两种组织顺序如下:

 HEVC中CU、TU、PU划分和扫描方式简析_第3张图片

  图三 Z扫描与光栅扫描

如图,左边为Z扫描,右边为光栅扫描。HEVC中为方便两种扫描方式数据转换,定义了转换数组g_auiRasterToZscan, g_auiZscanToRaster, g_auiRasterToX, g_auiRasterToY,即将上图中数据放到另一个组中对应的位置。转换数组如下:

 HEVC中CU、TU、PU划分和扫描方式简析_第4张图片

    图四 RasterZscan的转换

 HEVC中CU、TU、PU划分和扫描方式简析_第5张图片

     图五 Raster4x4块为单位的偏移

由上一篇的代码就能知道,HM处理数据按4x4块,如果不理解,去翻一下fillReferenceSample代码中参考像素不全部可用时的处理。


(转载请务必注明出处)

你可能感兴趣的:(HM,HEVC)