4.3.3 平滑帧内预测(Smooth)
作者:chai51
出处:https://www.cnblogs.com/chai51
版权:本文版权归作者和博客园共有
转载:欢迎转载,但未经作者同意,必须保留此段声明;必须在文章中给出原文连接;否则必究法律责任
引言
平滑帧内预测(Smooth Intra Prediction)是AV1帧内预测中的一种重要模式,使用平滑插值来生成预测,适合渐变区域。它通过加权组合参考像素来创建平滑的过渡效果。
源码说明: 本文档基于作者自己编写的AV1解码器Python实现,所有代码示例和实现细节均来自实际可运行的源码。源码仓库:GitHub - av1_learning
平滑帧内预测概述
位置: src/reconstruction/prediction.py - _smooth_intra_prediction_process()
规范文档: 7.11.2.6 Smooth intra prediction process
功能说明
平滑预测使用平滑插值来生成预测,适合渐变区域。它通过加权组合参考像素来创建平滑的过渡效果。
预测类型
- SMOOTH_PRED: 二维平滑插值
- SMOOTH_V_PRED: 垂直平滑插值
- SMOOTH_H_PRED: 水平平滑插值
预测流程
-
计算权重
- 根据像素位置计算权重
-
插值计算
# SMOOTH_PRED示例 pred[i][j] = Round2( AboveRow[j] * weights_h[i] + LeftCol[i] * weights_w[j] + AboveRow[-1] * weights_c[i][j], shift)
权重计算
平滑预测使用距离加权,距离参考像素越近,权重越大。这确保了预测值的平滑过渡。
平滑预测详细流程
graph TD
A[平滑帧内预测开始] --> B{平滑模式类型}
B -->|SMOOTH_PRED| C[获取水平和垂直权重表]
B -->|SMOOTH_V_PRED| D[获取垂直权重表]
B -->|SMOOTH_H_PRED| E[获取水平权重表]
C --> F[遍历每个像素]
F --> G[计算平滑预测值<br/>结合4个参考像素]
G --> H[Round2平滑值]
H --> I{还有像素?}
I -->|是| F
I -->|否| J[SMOOTH预测完成]
D --> K[遍历每个像素]
K --> L[计算垂直平滑值<br/>结合上方和左下角]
L --> M[Round2平滑值]
M --> N{还有像素?}
N -->|是| K
N -->|否| O[SMOOTH_V预测完成]
E --> P[遍历每个像素]
P --> Q[计算水平平滑值<br/>结合左侧和右上角]
Q --> R[Round2平滑值]
R --> S{还有像素?}
S -->|是| P
S -->|否| T[SMOOTH_H预测完成]
J --> U[平滑预测完成]
O --> U
T --> U
style A fill:#e1f5ff
style B fill:#fff9c4
style U fill:#c8e6c9
总结
平滑帧内预测适合渐变区域,使用平滑插值创建平滑过渡效果。它支持三种模式:SMOOTH_PRED(二维)、SMOOTH_V_PRED(垂直)和SMOOTH_H_PRED(水平),通过距离加权确保预测值的平滑过渡。
参考资源:
- AV1规范文档
- 源码实现: GitHub - av1_learning
- 预测实现:
src/reconstruction/prediction.py
- 预测实现:

浙公网安备 33010602011771号