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度
预测流程
-
获取角度增量
angleDelta = tile_group.AngleDeltaY if plane == 0 else tile_group.AngleDeltaUV -
计算预测角度
pAngle = Mode_To_Angle[mode] + angleDelta * ANGLE_STEP -
边缘滤波和上采样(如果启用)
- 角点滤波(corner filtering)
- 边缘滤波(edge filtering)
- 上采样选择和执行
-
计算导数
- 根据角度范围计算dx和dy
-
生成预测
- 使用参考像素和导数进行插值计算
方向预测流程图
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度对角线预测
处理流程
-
计算预测角度
pAngle = Mode_To_Angle[mode] + angleDelta * ANGLE_STEP -
边缘滤波(如果启用)
- 角点滤波(
filter_corner_process) - 边缘滤波(
intra_edge_filter_process) - 边缘滤波强度选择(
intra_edge_filter_strength_selection_process)
- 角点滤波(
-
上采样选择
- 上方上采样选择(
intra_edge_upsample_selection_process) - 左侧上采样选择(
intra_edge_upsample_selection_process) - 如果选择上采样,执行上采样过程(
intra_edge_upsample_process)
- 上方上采样选择(
-
方向预测
- 角度 < 90度: 主要使用上方参考像素
- 角度 90-180度: 使用上方和左侧参考像素
- 角度 > 180度: 主要使用左侧参考像素
- 角度 = 90度: 垂直预测,直接复制上方像素
- 角度 = 180度: 水平预测,直接复制左侧像素
-
插值计算
- 使用导数表(
Dr_Intra_Derivative)计算插值权重 - 对参考像素进行线性插值生成预测值
- 使用导数表(
总结
方向帧内预测是AV1中最复杂的预测模式,通过8个方向的角度预测和角度微调,能够精确捕捉图像的方向性特征。它适合处理有方向性的纹理,是AV1帧内预测的核心技术之一。
参考资源:
- AV1规范文档
- 源码实现: GitHub - av1_learning
- 预测实现:
src/reconstruction/prediction.py
- 预测实现:

浙公网安备 33010602011771号