4.3.2 DC帧内预测

作者:chai51
出处:https://www.cnblogs.com/chai51
版权:本文版权归作者和博客园共有
转载:欢迎转载,但未经作者同意,必须保留此段声明;必须在文章中给出原文连接;否则必究法律责任

引言

DC帧内预测(DC Intra Prediction)是AV1帧内预测中最简单的预测模式,使用参考像素的平均值来预测整个块,适合平坦区域。虽然简单,但非常有效。

源码说明: 本文档基于作者自己编写的AV1解码器Python实现,所有代码示例和实现细节均来自实际可运行的源码。源码仓库:GitHub - av1_learning


DC帧内预测概述

位置: src/reconstruction/prediction.py - _dc_intra_prediction_process()

规范文档: 7.11.2.5 DC intra prediction process

功能说明

DC预测使用参考像素的平均值来预测整个块,适合平坦区域。这是最简单但非常有效的预测模式。

预测流程

  1. 计算平均值

    if haveLeft == 1 and haveAbove == 1:
        sum = sum(LeftCol) + sum(AboveRow)
        avg = (sum + (w + h) // 2) // (w + h)
    elif haveLeft == 1:
        leftAvg = sum(LeftCol) // h
    elif haveAbove == 1:
        aboveAvg = sum(AboveRow) // w
    else:
        avg = 1 << (BitDepth - 1)  # 中间值
    
  2. 填充预测块

    • 所有像素值 = 计算的平均值

DC预测流程图

graph TD A[DC帧内预测开始] --> B{参考像素可用性} B -->|上方和左侧都可用| C[计算总和<br/>sum = sum AboveRow + sum LeftCol] B -->|仅左侧可用| D[计算左侧平均值<br/>leftAvg = sum LeftCol 右移log2H] B -->|仅上方可用| E[计算上方平均值<br/>aboveAvg = sum AboveRow 右移log2W] B -->|都不可用| F[使用中间值<br/>1左移BitDepth-1位] C --> G[计算平均值<br/>avg = sum + w+h除以2 再除以w+h] G --> H[填充预测块<br/>所有像素 = avg] D --> I[填充预测块<br/>所有像素 = leftAvg] E --> J[填充预测块<br/>所有像素 = aboveAvg] F --> K[填充预测块<br/>所有像素 = 中间值] H --> L[DC预测完成] I --> L J --> L K --> L style A fill:#e1f5ff style B fill:#fff9c4 style L fill:#c8e6c9

总结

DC帧内预测是AV1帧内预测中最简单的预测模式,通过计算参考像素的平均值来预测整个块。它适合平坦区域,虽然简单但非常有效,是AV1帧内预测的重要组成部分。


参考资源:

上一篇: 方向帧内预测
下一篇: 平滑帧内预测

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