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

功能说明

递归预测使用滤波器对参考像素进行加权求和,适合复杂纹理。它将块分成子块,按光栅扫描顺序递归处理。

预测流程

  1. 分块处理

    • 将块分成4x2的子块
    • 按光栅扫描顺序处理
  2. 选择参考像素

    • 选择7个参考像素(上方、左侧、已解码子块)
  3. 应用滤波器

    pred = sum(Intra_Filter_Taps[filter_intra_mode][i] * ref[i] for i in range(7))
    
  4. 裁剪到有效范围

    pred = Clip1(pred, BitDepth)
    

滤波器类型

AV1定义了5种滤波器内模式,每种模式使用不同的滤波器抽头系数:

  • FILTER_DC_PRED
  • FILTER_V_PRED
  • FILTER_H_PRED
  • FILTER_D157_PRED
  • FILTER_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

总结

递归帧内预测适合复杂纹理,使用滤波器进行递归处理,能够适应复杂的图像模式。它通过将块分成子块并按光栅扫描顺序处理,利用已解码的子块像素作为参考,实现了高效的递归预测。


参考资源:

上一篇: 平滑帧内预测
下一篇: 基本帧内预测

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