HEVC中的帧内预测

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

0. HEVC帧内预测概述

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

模式对应名字
0INTRA_PLANAR
1INTRA_DC
2…34INTRA_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)其他模式
4x400000
8x801000
16x1601001
32x3201011
1.2.2 滤波过程

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

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

其中第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+(9invAngle+128)256=31

invAngle=256329=910.2222=910

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

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

tan(x)=932

invAngle=2561tan(x)

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

intraAngle

3. 参考

  1. Intra-Picture Prediction in HEVC,Jani Lainema and Woo-Jin Han
  2. 265标准
  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
提供的源码资源涵盖了安卓应用、小程序、Python应用和Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值