4.3.4 递归帧内预测(Filter Intra)
作者:chai51
出处:https://www.cnblogs.com/chai51
版权:本文版权归作者和博客园共有
转载:欢迎转载,但未经作者同意,必须保留此段声明;必须在文章中给出原文连接;否则必究法律责任
引言
递归帧内预测(Filter Intra / Recursive Intra Prediction)是AV1帧内预测中的一种特殊模式,使用滤波器对参考像素进行加权求和,适合复杂纹理。它将块分成子块,按光栅扫描顺序递归处理。
源码说明: 本文档基于作者自己编写的AV1解码器Python实现,所有代码示例和实现细节均来自实际可运行的源码。源码仓库:GitHub - av1_learning
递归帧内预测概述
位置: src/reconstruction/prediction.py - _recursive_intra_prediction_process()
规范文档: 7.11.2.3 Recursive intra prediction process
功能说明
递归预测使用滤波器对参考像素进行加权求和,适合复杂纹理。它将块分成子块,按光栅扫描顺序递归处理。
预测流程
-
分块处理
- 将块分成4x2的子块
- 按光栅扫描顺序处理
-
选择参考像素
- 选择7个参考像素(上方、左侧、已解码子块)
-
应用滤波器
pred = sum(Intra_Filter_Taps[filter_intra_mode][i] * ref[i] for i in range(7)) -
裁剪到有效范围
pred = Clip1(pred, BitDepth)
滤波器类型
AV1定义了5种滤波器内模式,每种模式使用不同的滤波器抽头系数:
FILTER_DC_PREDFILTER_V_PREDFILTER_H_PREDFILTER_D157_PREDFILTER_PAETH_PRED
递归预测流程图
graph TD
A[递归帧内预测开始] --> B[获取滤波器内模式]
B --> C[分块处理<br/>4x2子块]
C --> D[遍历子块<br/>光栅扫描顺序]
D --> E[选择7个参考像素]
E --> E1[上方参考像素]
E --> E2[左侧参考像素]
E --> E3[已解码子块像素]
E1 --> F[应用滤波器<br/>Intra_Filter_Taps]
E2 --> F
E3 --> F
F --> G[加权求和<br/>生成预测值]
G --> H[裁剪到有效范围<br/>Clip1]
H --> I{还有子块?}
I -->|是| D
I -->|否| J[递归预测完成]
style A fill:#e1f5ff
style F fill:#fff9c4
style J fill:#c8e6c9
总结
递归帧内预测适合复杂纹理,使用滤波器进行递归处理,能够适应复杂的图像模式。它通过将块分成子块并按光栅扫描顺序处理,利用已解码的子块像素作为参考,实现了高效的递归预测。
参考资源:
- AV1规范文档
- 源码实现: GitHub - av1_learning
- 预测实现:
src/reconstruction/prediction.py
- 预测实现:

浙公网安备 33010602011771号