懒人李冰

记录我的生活、学习

HM源码分析之帧内编码(一):帧内编码的原理

预测编码(Prediction Coding)是指利用已编码的一个或几个样本值,根据某种模型或方法,对 当前的样本值进行预测,并对样本真实值和预测值之间的差值进行编码。

预测编码的原理

视频预测编码的主要思想是通过预测来消除像素间的相关性。根据参考像素位置的不同,视频 预测编码技术主要分为两大类:

  • 帧内预测,即利用当前图像内已编码像素生成预测值;
  • 帧间预测,即利用当前图像之前已编码图像的重建像素生成预测值。

预测编码的基本过程如下图所示:

对于当前输入像素值 x(n), 首先,利用已编码像素的重建值得到当前像素的预测值 p(n). 然后对二者的差值 e(n) 进行量化、熵编码,同时利用量化后的残差 e’(n) 与预测值 p(n) 得到 当前像素的重建值 x’(n), 用于预测之后待编码的像素。

对应的解码过程如右图所示,经过熵解码可得到当前像素预测误差的重建值 e’(n), 将其与预测值 p(n) 想家即可得到当前像素的重建值 x’(n)。

帧内预测的模式

HEVC 亮度分量帧内预测支持 5 种大小的 PU: 4x4/8x8/16x16/32x32/64x64,其中每一种大小 的 PU 都对应 35 种预测模式,包括 Planar 模式、DC 模式以及 33 种角度模式。所有预测模式 都使用相同模板。如图。

表:帧内预测 35 种模式编号

帧内模式编号 帧内模式名称
0 Planar 模式
1 DC 模式
2~34 33 种角度模式

Planar 模式适用于像素值缓慢变化的区域,它使用水平和垂直方向的两个线性滤波器,并将二者 的平均值作为当前块像素的预测值。DC 模式适用于大面积平坦区域,当前块预测值可由其左侧和上方 参考像素的平均值得到。角度模式主要用于视频内容中不同方向的纹理。

亮度模式的编码

HEVC 标准建立了一个帧内预测模式候选列表 candModeList,表中有 3 个候选预测模式,用于存储相邻 PU 的预测 模式。相邻 PU 的位置如下图所示。设 A 的预测模式为 ModeA, B 的预测模式为 ModeB。候选列表具体建立过程如下:

(1) 若 ModeA 与 ModeB 相同,则分以下两种情况进行。

  • 若 ModeA 和 ModeB 都为 Planar 或 DC 模式,则:candModeList[0]为 Planar 模式,candModeList[1]为 DC 模式,candModeList[2]为模式 26(垂直模式)。
  • 若 ModeA 和 ModeB 都为角度模式,则:candModeList[0]为 ModeA,candModeList[1]candModeList[2]为与 ModeA 相邻的两个模式。

(2) 若 ModeA 与 ModeB 不同,则:candModeList[0]为 ModeA,candModeList[1]为 ModeB,candModeList[2]分为以下几种情况

  • 若 ModeA 和 ModeB 都不是 Planar 模式,则candModeList[2]为 Planar 模式。
  • 若 ModeA 和 ModeB 都不是 DC 模式,则candModeList[2]为 DC 模式。
  • 否则candModeList[2]为模式 26(垂直模式)。

candModeList建立完成后,可利用该列表对当前 PU 模式信息进行编码,具体如下:

(1) 若当前 PU 最优模式(记为 ModeC)在candModeList中出现,则只需要编码 ModeC 在candModeList中的位置即可。
(2) 若 ModeC 未在candModeList中出现,则按以下步骤编码 ModeC。

  • candModeList中的候选模式按从小到大的顺序重新排列。
  • 遍历重新排列后的 3 个候选模式,分别于 ModeC 进行比较,若ModeC >= candModeList[i]则令 ModeC 自减1。遍历结束后对 ModeC 最终的值进行编码。

色度模式的编码

HEVC 色度分量帧内预测一共有5种模式: Planar 模式、垂直模式、水平模式、DC模式以及UI应亮度分量的预测模式。若对应亮度预测模式为前4种模式种的一种,则将其替换为角度预测模式种的模式34.
HEVC 直接对色度模式编号进行编码,具体方法如下:

表 色度模式编号

色度模式 亮度模式      
  模式0(Planar) 模式26(垂直) 模式10(水平) 模式1(DC)
0 34 0 0 0
1 26 34 26 26
2 10 10 34 10
3 1 1 1 34

帧内预测的过程

HEVC 中,35 种预测模式是在 PU 的基础上定义的,而具体帧内预测过程的实现则是以 TU 为单位的。 标准规定 PU 可以以四叉树的形式划分 TU,且一个 PU 内的所有 TU 共享同一种预测模式。HEVC 帧内预测可分为以下 3 个步骤:

  • 判断当前 TU 相邻参考像素是否可用并做相对应的处理
  • 对参考像素进行滤波
  • 根据滤波后的参考像素计算当前 TU 的预测像素值

相邻参考像素的获取

当前 TU 大小为 NxN,其参考像素按区域可分为 5 部分:左下(A)、左侧(B)、左上(C)、上方(D)和右上(E),一共 4N+1 个点。 若当前 TU 位于图像边界,或 Slice、Tile的边界,则相邻参考像素可能会不存在或不可用。当参考像素不存在或不可用时,HEVC 标准 会使用最邻近的像素进行填充。

参考像素的滤波

AVC 在帧内预测时对某些模式下的参考像素进行了滤波,以更好地利用邻近像素之间的相关性,提高预测精度。HEVC 对其进行了扩展:首先 HEVC针对不同 大小的 TU 选择了不同数量的模式进行滤波;其次,在 AVC 滤波方法的基础上,HEVC 增加使用了一种强滤波方法。

预测像素的计算

对于不同的模式下,参考像素的计算方式不同,以 Planar 模式为例,预测像素可以看成是水平、垂直两个方向预测值得平均值。DC 模式、角度模式在此不在详述。

参考文献:新一代高效视频编码H.265/HEVC:原理、标准与实现