Intra 过程可以分为七个关键步骤。假设我们现在要处理一个决定采用 Intra 模式的 CU (Coding Unit)。

第 1 步:参考像素的获取与滤波

这是所有 Intra 预测的基础。预测当前块需要用到其左边和上边的、已经解码并重建好的像素。

  1. 确定可用性
    • 首先检查所需的参考像素是否存在。例如,位于图像左上角的 CU,它就没有上边和左边的参考像素。位于 Slice 边界的 CU,可能只有一边有参考像素。
    • 如果参考像素不可用(例如在 Slice 边界外),解码器会用一个默认值(通常是 1 << (bit_depth - 1),即中性灰)来填充。
  2. 参考像素滤波
    • 为了提高预测精度,特别是对于 Angular 模式,HEVC 会对原始的参考像素进行一次平滑滤波。这可以减少原始图像中的噪声或块效应带来的影响。
    • 滤波强度是根据块的大小 (TU size) 决定的。
      • 对于 4x4 的块,不进行滤波,因为小块的预测依赖于像素的精确细节。
      • 对于 8x8, 16x16, 32x32 的块,会使用一个 3-tap 的 [1, 2, 1]/4 平滑滤波器
      • 对于 64x64 的块,滤波是强制关闭的。
    • 特殊情况:DC、Planar 和 Angular 模式 10/26 (纯水平/垂直) 通常不使用滤波后的参考像素,而是直接用原始的重建像素。

第 2 步:确定PU的划分

这一步非常简单,因为 Intra 模式的 PU 划分规则只有两种:

  • 如果当前 CU 不是最小尺寸 CU:只能划分为 1 个 2Nx2N 的 PU
  • 如果当前 CU 最小尺寸 CU (例如 8x8):编码器可以选择划分为 1 个 2Nx2N 的 PU4 个 NxN 的 PU

第 3 步:获取最可能的预测模式

为了节省码率,HEVC 不会直接对每个 PU 的预测模式进行编码。它会利用空间相关性,先预测出 3 个“最可能”的模式 (MPM)

  1. 构建 MPM 列表
    • 解码器会查看当前 PU 左边相邻 PU上方相邻 PU 的 Intra 预测模式。
    • 将这两个模式(如果可用且不同)加入 MPM 列表。
    • 如果列表不足 3 个,会依次用 Planar, DC, Angular 26 (垂直), Angular 10 (水平) 等预设模式来填充,直到列表有 3 个模式为止。
  2. 解析模式索引
    • 码流中会有一个标志位 prev_intra_luma_pred_flag
    • 如果标志位为 1,表示实际模式就在 MPM 列表里。接着会有一个 1-2 bit 的索引 mpm_idx,指出是 MPM 列表中的哪一个。
    • 如果标志位为 0,表示实际模式不在 MPM 列表里。接着会有 5 bit 的 rem_intra_luma_pred_mode 来直接编码剩下的 32 种模式之一。

第 4 步:确定最终的 Intra 预测模式

通过第 3 步,解码器现在已经知道了当前 PU (或每个 NxN 的小 PU) 最终采用的预测模式。这个模式是 35 种中的一种 (Planar, DC, 33 种 Angular 模式)。

第 5 步:生成预测块

这是 Intra 预测的核心计算步骤。根据确定的模式,对 PU 对应的像素块 (PB, Prediction Block) 进行像素值的计算。

  • Planar 模式:使用双线性插值生成一个平滑的渐变平面。
  • DC 模式 (直流模式):计算所有可用参考像素的平均值,然后用这个平均值填充整个预测块。
  • Angular 模式 (角度模式)
    1. 确定主参考像素数组:根据模式号 (2-34) 对应的角度,确定是使用上方参考像素行,还是左侧参考像素列作为主参考。
    2. 计算投影位置:对于块内每个点 (x, y),沿着预测角度的反方向投影到主参考像素数组上。这个投影位置通常是一个小数。
    3. 插值计算:由于投影位置是小数,需要通过其两侧的整数位置的参考像素进行线性插值,得到最终的预测值。例如,如果投影位置是 3.25,则预测值是 (参考像素[3] * (1-0.25) + 参考像素[4] * 0.25)

流程图

+--------------------------+
|  CU (Intra Mode)         |
+--------------------------+
             |
             V
+--------------------------+
| 1. 获取并滤波参考像素     |
+--------------------------+
             |
             V
+--------------------------+
| 2. 确定 PU 划分          |
|    (2Nx2N or 4xNxN)      |
+--------------------------+
             |
             V
+--------------------------+
| 3. 获取 MPM 列表         |
| 4. 解析得到最终预测模式    |
+--------------------------+
             |
             V
+--------------------------+
| 5. 根据模式生成预测块(PB) |
| (Planar/DC/Angular)      |
+--------------------------+