H.265帧内预测
Intra 过程可以分为七个关键步骤。假设我们现在要处理一个决定采用 Intra 模式的 CU (Coding Unit)。
第 1 步:参考像素的获取与滤波
这是所有 Intra 预测的基础。预测当前块需要用到其左边和上边的、已经解码并重建好的像素。
- 确定可用性:
    - 首先检查所需的参考像素是否存在。例如,位于图像左上角的 CU,它就没有上边和左边的参考像素。位于 Slice 边界的 CU,可能只有一边有参考像素。
- 如果参考像素不可用(例如在 Slice 边界外),解码器会用一个默认值(通常是 1 << (bit_depth - 1),即中性灰)来填充。
 
- 参考像素滤波:
    - 为了提高预测精度,特别是对于 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的 PU 或 4 个NxN的 PU。
第 3 步:获取最可能的预测模式
为了节省码率,HEVC 不会直接对每个 PU 的预测模式进行编码。它会利用空间相关性,先预测出 3 个“最可能”的模式 (MPM)。
- 构建 MPM 列表:
    - 解码器会查看当前 PU 左边相邻 PU 和 上方相邻 PU 的 Intra 预测模式。
- 将这两个模式(如果可用且不同)加入 MPM 列表。
- 如果列表不足 3 个,会依次用 Planar, DC, Angular 26 (垂直), Angular 10 (水平) 等预设模式来填充,直到列表有 3 个模式为止。
 
- 解析模式索引:
    - 码流中会有一个标志位 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 模式 (角度模式):
    - 确定主参考像素数组:根据模式号 (2-34) 对应的角度,确定是使用上方参考像素行,还是左侧参考像素列作为主参考。
- 计算投影位置:对于块内每个点 (x, y),沿着预测角度的反方向投影到主参考像素数组上。这个投影位置通常是一个小数。
- 插值计算:由于投影位置是小数,需要通过其两侧的整数位置的参考像素进行线性插值,得到最终的预测值。例如,如果投影位置是 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)      |
+--------------------------+