欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

2.H.265/HEVC —— 帧内预测

程序员文章站 2022-03-17 14:59:15
...

在H.265/HEVC中,35种预测模式是在PU的基础上定义的,而具体帧内预测过程的实现则是以TU为单位的。编撰规定PU可以以四叉树的形式划分TU,且一个PU内所有TU共享同一种预测模式的形式划分TU,且一个PU内的所有TU共享同一种预测模式。H.265/HEVC帧内预测可分为以下3个步骤:
**
1.判断当前TU相邻参考像素是否可用并做相应的处理
2.对参考像素进行滤波
3.根据滤波后的参考像素计算当前TU的预测像素值
**


1.相邻参考像素的获取

如图,当前的TU大小为NxN,其参考像素按区域可分为5部分:左下(A)、左侧(B)、左上(C)、上方(D)和右上(E),一共4N+1个点。若当前TU位于图像边界,或Slice、Tile的边界(H.265/HEVC规定在帧内编码中,相邻Slice或Tile不能相互参考),则相邻参考像素可能会不存在或不可用。另外,在某些情形下A或E所在的块可能尚未进行编码,此时这些参考像素也是不可用的。

2.H.265/HEVC —— 帧内预测

相邻参考像素位置

当参考像素不存在或不可用时,H.265/HEVC标准会使用最邻近的像素进行填充。例如,若区域A的参考像素不存在,则区域A所有参考像素都用区域B最下方的像素进行填充;若区域E的参考像素不存在,则区域E所有参考像素都用D最右侧的像素进行填充。需要说明的是,若所有参考像素都不可用,则参考像素都用固定值填充,该固定值大小为

 

                                         R = 1 << (BitDepth -1)

源码解析:
fillReferenceSamples这个函数,它主要功能是在真正进行帧内预测之前,使用重建后的Yuv图像对当前PU的相邻样点进行赋值,为接下来进行的角度预测提供参考样点值。
源码解析可以参考:http://blog.csdn.net/hevc_cjl/article/details/8175721

帧内预测一个很重要的函数initAdiPattern,它的主要功能有三个,(1)检测当前PU的相邻样点包括左上、上、右上、左、左下邻域样点值的可用性,或者说检查这些点是否存在;(2)参考样点的替换过程,主要实现的是JCTVC-J1003即draft 8.4.4.2.2的内容,主要由函数fillReferenceSamples来完成;(3)相邻样点即参考样点的平滑滤波,主要实现draft 8.4.4.2.3的内容。
源码解析可以参考:http://blog.csdn.net/HEVC_CJL/article/details/8184276


2.参考像素的滤波

1.不同大小TU需要进行参考像素滤波的模式
DC模式以及4x4大小的TU都不需要进行参考像素滤波。其他情形介绍如下:
32x32TU:除了模式10(水平)、模式26(垂直)之外的所有角度模式以及Planar模式。
16x16TU:在32x32TU的基础上进一步出去最接近水平个垂直方向的4个模式——模式9、11、25、27
8x8TU:仅对3个45度倾斜方向的模式(模式2、18、34)以及Planar模式进行参考像素滤波。

2.常规滤波与强滤波方法
这部分就是需要满足几个条件进行常规滤波或者强滤波。


2.预测像素的计算

与h.264/avc相比,h.265/hevc增加使用了左下方块的边界像素作为当前块的参考。这是由于h.264/avc以固定大小的宏块为单元进行编码,在对当前块进行帧内预测时,其左下方块很有可能尚未进行编码,无法用于参考;而h.265/hevc四叉树形的编码结构使得这一区域成为可用像素。此外,这一区域像素的使用也提供了更多可能的预测方向,在某些情形下(如倾斜向上方向的纹理等)能够大幅度提高预测精度。

2.H.265/HEVC —— 帧内预测

h.264 4x4 luma prediction modes

2.H.265/HEVC —— 帧内预测

h.265/hevc 帧内参考示意图


H.265/HEVC亮度分量帧内预测支持5种大小的PU: 4x4, 8x8, 16x16, 32x32, 64x64
每一种大小的PU都有35种预测模式:
1. Planar模式
2. DC 模式
3. 33种角度模式
所有预测模式都使用相同的模板。


1.Planar模式(解决渐变式的平滑纹理区域)

Planar模式是由H.264/AVC中的Plane模式发展而来的,它适用于图像值缓慢变化的区域。Planar模式使用水平和垂直方向的两个线性滤波器,并将二者的平均值作为当前块像素的预测值。

 

2.H.265/HEVC —— 帧内预测

帧内Planar模式预测

2.H.265/HEVC —— 帧内预测

a)对应像素的计算公式 b)其计算效果图


2.DC模式(适用于大面积平坦区域)

DC模式适用于大面积平坦区域,其做法与H.264/AVC基本相同。当前块预测值可由其左侧和上方(注意不包含左上角、左上方和右上方)参考像素的平均值得到。

2.H.265/HEVC —— 帧内预测

在4X4的非边缘块,即蓝色透明部分


3.角度模式

H.264/AVC使用了8中不同的预测方向(4x4大小),H.265/HEVC则进一步细化了这些预测方向,规定了33种角度预测模式,以更好地适应视频内容种不同方向的纹理。

下图给出了33种角度模式的具体方向,其中V0(模式26)和H0(模式10)分别表示为垂直和水平方向,其余模式的预测方向都可以看成再垂直或水平方向上做了一个偏移,该偏移角的大小可由模式下方的数字计算得出。

2.H.265/HEVC —— 帧内预测

33种角度模式的预测方向

2.H.265/HEVC —— 帧内预测

 

θ 为正表示预测方向向左偏移,θ为负表示预测方向向右偏移;对于水平类模式,θ为正表示预测方向向上偏移,θ为负表示预测方向向下偏移。

对于模式1125,当前块的预测需要同时用到上方和左侧的参考像素。为了能够使用一种统一的形式来计算预测像素值,H.264/HEVC标准采用了一种“投影像素”的方法,对于模式1825(垂直类模式),须将左侧参考像素按给定方向偷影至上方参考像素的左侧(水平排列),而对于模式11~17(水平类模式),须将上方参考像素按给定方向投影至左侧参考像素的上方(垂直排列)。

 

2.H.265/HEVC —— 帧内预测


step:

 

  1. 对于给定垂直类模式M,使用“投影像素”法将其需要用到的参考像素映射为一维形式,记为Ref.
    2.计算当前像素对应参考像素的Ref中的位置,记为pos:
    pos = (y* offset[M]) >> 5
    3.计算当前像素对应参考像素的加权因子w:
    w = (y * offset[M]) & 31
    其中,&表示按位与运算。
    4.计算当前像素的预测值:
    Px,y = ((32-w)Ref[pos]+wRef[pos+1]+16)>>5
    需要注意的是,对于模式26(垂直模式),预测像素值改由下式计算:
    Px,y = Rx,o +((Ro,y - Ro,o) >> 0)

源码解析:
HM中TComPrediction.cpp文件下有以上模式的函数,具体的解析可以参考:
http://blog.csdn.net/hevc_cjl/article/details/8175721
http://blog.csdn.net/hevc_cjl/article/details/8184276
http://blog.csdn.net/hevc_cjl/article/details/8200793
http://blog.csdn.net/hevc_cjl/article/details/8216065
http://blog.csdn.net/hevc_cjl/article/details/8259844
http://blog.csdn.net/hevc_cjl/article/details/8259844

2.H.265/HEVC —— 帧内预测

TComPrediction.cpp



作者:Persistently
链接:https://www.jianshu.com/p/d19d7eb3844a
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。