H.265之三 -帧内预测(2)

来源:互联网 发布:文言文虚词乎 编辑:程序博客网 时间:2024/04/30 16:22

  为了更好地理解帧内预测中的各个函数的原理过程,有必要对CU、PU地址计算方法有着较好的了解,因此,本文将对这个问题先做个讨论。

对视频编解码有一定了解的人应该会知道,有一种扫描顺序叫光栅扫描,即从左往右,由上往下,先扫描完一行,再移至下一行起始位置继续扫描。H.264使用的主要就是光栅扫描顺序,(当然它还有其它扫描顺序,被包含在FMO即灵活宏块顺序技术里)。

HEVC里同样也有光栅扫描顺序,但是,由于它对CU采用的是递归划分的方式,如果仍是采用光栅扫描顺序,对CU的寻址会很不方便,因此,HEVC定义了Z扫描顺序,如下图所示:


   

右图可见,这种扫描顺序保证了对于不同分割都能按照相同的遍历顺序进行寻址,有利于程序中的递归实现。

具体到代码中,为了处理的方便,并没有使用上图这种定义方式,而是以4x4块为最小单位,对CU进行分割,同时,为了简化计算,在初始化时定义了几个地址映射的数组,g_auiRasterToZscan, g_auiZscanToRaster, g_auiRasterToX, g_auiRasterToY。

 

第一个是从光栅扫描顺序转换为Z扫描顺序,第二个是从Z扫描顺序转换为光栅扫描顺序,第三、第四个则是得到某一个块相对于所在PU左上角的横纵坐标,且以像素为单位。

下面几张表是我在最大CU为64x64的前提下打印出来的:

1352883303_7523.jpg (1024×587)


 1352883303_7523.jpg (1024×587)

1352883303_7523.jpg (1024×587)

上面这些值的含义,这里就不多解释了,相信大家自己画个CU,以4x4块对其进行分割,再对照上面几张表琢磨琢磨就清楚了。

值得一提的是,可能会有人有这样的疑问:图像的分辨率不同,它怎么能够保证这张表就能用呢?需要指出的是,Z扫描是针对一个CU来说的,它是用于递归扫描CU的分割。定位一幅图像中的一个CU(或其分割)大致是这么个过程,首先,由于CU的尺寸的最大值是已知的,会根据这个定位到该CU左上角相对于图像左上角的位置,即得到它的坐标,接着,才是对当前块进行Z扫描,单位是4x4块,换句话说,Z扫描地址是对一个CU有效的,不能直接使用这个地址来确定它在图像中的位置,这个地方是需要大家注意的。

转自(http://blog.csdn.net/hevc_cjl/article/details/8183144)