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: 水平平滑插值

预测流程

  1. 计算权重

    • 根据像素位置计算权重
  2. 插值计算

    # 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(水平),通过距离加权确保预测值的平滑过渡。


参考资源:

上一篇: DC帧内预测
下一篇: 递归帧内预测

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