4.3.1 方向帧内预测(Directional)

作者:chai51
出处:https://www.cnblogs.com/chai51
版权:本文版权归作者和博客园共有
转载:欢迎转载,但未经作者同意,必须保留此段声明;必须在文章中给出原文连接;否则必究法律责任

引言

方向帧内预测(Directional Intra Prediction)是AV1中最复杂也是最重要的帧内预测模式。它利用图像中的方向性纹理,通过沿特定角度插值参考像素来生成预测,能够精确捕捉图像的方向性特征。

源码说明: 本文档基于作者自己编写的AV1解码器Python实现,所有代码示例和实现细节均来自实际可运行的源码。源码仓库:GitHub - av1_learning


方向帧内预测概述

位置: src/reconstruction/prediction.py - _directional_intra_prediction_process()

规范文档: 7.11.2.4 Directional intra prediction process

功能说明

方向预测利用图像中的方向性纹理,通过沿特定角度插值参考像素来生成预测。这是AV1中最复杂也是最重要的帧内预测模式。

支持的8个方向

  • V_PRED (90度): 垂直预测
  • H_PRED (180度): 水平预测
  • D45_PRED (45度): 45度对角线
  • D135_PRED (135度): 135度对角线
  • D117_PRED (117度): 117度
  • D153_PRED (153度): 153度
  • D63_PRED (63度): 63度
  • D207_PRED (207度): 207度

预测流程

  1. 获取角度增量

    angleDelta = tile_group.AngleDeltaY if plane == 0 else tile_group.AngleDeltaUV
    
  2. 计算预测角度

    pAngle = Mode_To_Angle[mode] + angleDelta * ANGLE_STEP
    
  3. 边缘滤波和上采样(如果启用)

    • 角点滤波(corner filtering)
    • 边缘滤波(edge filtering)
    • 上采样选择和执行
  4. 计算导数

    • 根据角度范围计算dx和dy
  5. 生成预测

    • 使用参考像素和导数进行插值计算

方向预测流程图

graph TD A[方向帧内预测开始] --> B[获取角度增量] B --> C[计算预测角度] C --> D[初始化上采样标志] D --> E{启用边缘滤波?} E -->|否| F[跳过边缘滤波处理] E -->|是| G{角度范围检查} G -->|需要角点滤波| H[角点滤波] G -->|不需要| I[跳过角点滤波] H --> J[边缘滤波处理] I --> J J --> K[上采样选择和执行] F --> L[计算导数dx和dy] K --> L L --> M{角度范围} M -->|小于90度| N[使用上方参考像素插值] M -->|90-180度| O[使用上方和左侧参考像素插值] M -->|大于180度| P[使用左侧参考像素插值] M -->|等于90度| Q[垂直预测直接复制] M -->|等于180度| R[水平预测直接复制] N --> S[生成预测块] O --> S P --> S Q --> S R --> S S --> T[方向预测完成] style A fill:#e1f5ff style E fill:#fff9c4 style M fill:#fff9c4 style T fill:#c8e6c9

详细技术文档参考

说明: 以下内容来自详细技术文档,包含完整的实现细节和代码说明。这些内容主要用于技术参考。

点击展开查看详细技术文档

方向预测详细实现

支持的8个方向

  • V_PRED (90度): 垂直预测,从上方向下复制
  • H_PRED (180度): 水平预测,从左侧向右复制
  • D45_PRED (45度): 45度对角线预测
  • D63_PRED (63度): 63度对角线预测
  • D117_PRED (117度): 117度对角线预测
  • D135_PRED (135度): 135度对角线预测
  • D153_PRED (153度): 153度对角线预测
  • D207_PRED (207度): 207度对角线预测

处理流程

  1. 计算预测角度

    pAngle = Mode_To_Angle[mode] + angleDelta * ANGLE_STEP
    
  2. 边缘滤波(如果启用)

    • 角点滤波(filter_corner_process
    • 边缘滤波(intra_edge_filter_process
    • 边缘滤波强度选择(intra_edge_filter_strength_selection_process
  3. 上采样选择

    • 上方上采样选择(intra_edge_upsample_selection_process
    • 左侧上采样选择(intra_edge_upsample_selection_process
    • 如果选择上采样,执行上采样过程(intra_edge_upsample_process
  4. 方向预测

    • 角度 < 90度: 主要使用上方参考像素
    • 角度 90-180度: 使用上方和左侧参考像素
    • 角度 > 180度: 主要使用左侧参考像素
    • 角度 = 90度: 垂直预测,直接复制上方像素
    • 角度 = 180度: 水平预测,直接复制左侧像素
  5. 插值计算

    • 使用导数表(Dr_Intra_Derivative)计算插值权重
    • 对参考像素进行线性插值生成预测值

总结

方向帧内预测是AV1中最复杂的预测模式,通过8个方向的角度预测和角度微调,能够精确捕捉图像的方向性特征。它适合处理有方向性的纹理,是AV1帧内预测的核心技术之一。


参考资源:

上一篇: 模式信息解码
下一篇: DC与平滑帧内预测

posted @ 2026-01-10 07:47  chai51  阅读(0)  评论(0)    收藏  举报