首页 > 学院 > 开发设计 > 正文

HEVC中的帧内预测

2019-11-06 09:33:52
字体:
来源:转载
供稿:网友

本文想讲清楚的问题是:HEVC的帧内预测标准与其背后的原理

0. HEVC帧内预测概述

HEVC中一共有35种预测模式——DC、PLANAR和33种角度预测模式,如下表所示

模式 对应名字
0 INTRA_PLANAR
1 INTRA_DC
2…34 INTRA_ANGULAR

其中角度预测模式又分为水平模式(2-17)和垂直模式(18-33)(为什么34不算垂直模式?)。

帧内预测由三个步骤组成 1. 构建参考像素 2. 预测 3. 后处理

1. 参考像素构建

参考像素构建主要包括两个部分:参考像素替换(substitution)和对替换后的参考像素进行滤波处理

1.1 参考像素替换

HEVC中参考像素由当前块的左、左上、左下、上和右上的像素来构成,如图1所示. reference_substitution

图1 帧内预测的参考像素

但是,其周围的块并不总是可用的,这时就需要补充不可用的像素点。 填充方法如下所示: - 步骤1:当A块可用时,该步骤可以略去;当A不可用时,按图2中箭头方向找到第一个可用块,那么将其第一个像素(按箭头方向)的值赋给A中所有位置。例如,当A不可用而B可用时,A中所有元素都用B中最下面的那个元素进行赋值。 - 步骤2:对其他位置进行赋值时,从B开始,当其不可用时,则用上一个块的最后一个像素(按箭头方向)来对该块进行赋值。例如,当B不可用时,则B中所有元素都用A中最上面的那个元素进行赋值。

该步骤的目的是使得对于一个块来说(如图1中的块F),即便在某些参考像素不可用时,使用该像素的预测模式仍然可用。

这也是HEVC帧内预测与AVC(264)的帧内预测的不同之处:在某些参考像素不可用时,AVC中仅允许使用DC模式,而HEVC中则可以使用全部模式。

1.2 参考像素滤波

进行滤波的目的是为了避免使用参考像素预测后得到的预测块可能会产生不希望的定向边(directional edges)的现象,这样通过滤波来提高视觉效果。 滤波的选择是通过预测块的大小和使用的帧内预测模式来定的,具体见表2

1.2.1 滤波开关

表2 参考像素滤波的选择(0表示不进行滤波,1表示进行滤波)

预测块大小 模式-DC 对角线模式(2/18/34) 水平和垂直方向(10/26) 近水平和垂直方向(9/11/25/27) 其他模式
4x4 0 0 0 0 0
8x8 0 1 0 0 0
16x16 0 1 0 0 1
32x32 0 1 0 1 1

1.2.2 滤波过程

一共有两种滤波方法可以选择

三抽头[1 2 1]/4平滑滤波器线性插值

其中第2个滤波只有在块大小为32x32,且参考像素足够平滑时才使用(平滑的判定条件见标准)

经过滤波后的参考像素即可用于块预测了。

2. 预测

抛去具体的计算细节,这儿主要讨论三个问题: 1. 帧内预测的1/32像素是怎么回事 2. 计算过程中的intraPRedAngle和invAngle是怎么回事 3. 计算过程中的iIdx和iFact是什么

2.1 1/32像素

intra_pred

图2 帧内预测方向

在图2中,只有红框标记的为整像素,而其他的点都是1/32像素的线性插值。这就是为什么在预测时会有( ( 32 − iFact ) * ref[ x + iIdx + 1 ] + iFact * ref[ x + iIdx + 2 ] + 16 ) >> 5这样的公式,因为这是在进行1/32线性插值。

2.2 intraPredAngle和invAngle

intraPredAngle定义了角度模式的角度。如图2中,模式9,水平方向向下偏移了2个1/32像素,所以其对应的intraPredAngle为2。intraPredAngle其实是相对于水平或者垂直方向以1/32像素为单位的偏移(右和下为正)。

参考图1,对块F进行预测,如果模式为26-34,那么只需要参考上方的像素;如果模式为2-10,则只需要参考图像左边的像素。 而对于模式11-25,则需要同时参考上方和左方的像素。那么就需要将左方或者上方的像素投射到上方或左方。

invAngle定义了投射关系。

对于垂直模式来说

ref[ x ] = p[ −1 ][ −1 + ( ( x * invAngle + 128 ) >> 8 ) ];

以模式23为例, 若要保证平行,那么当x=-9时,−1 + ( ( -9 * invAngle + 128 ) >> 8 )应该等于31,即 −1+(−9∗invAngle+128)256=31

invAngle=256∗32−9=−910.2222=−910

128仅仅是一个四舍五入的因子

如果x表示图中所标志的角度的话,那么上式可以写为

−tan(x)=−932

invAngle=−256∗1tan(x)

这就容易理解为什么叫做invAngle了.

intraAngle

3. 参考

Intra-Picture Prediction in HEVC,Jani Lainema and Woo-Jin Han265标准
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表