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预测使用参考像素的平均值来预测整个块,适合平坦区域。这是最简单但非常有效的预测模式。
预测流程
-
计算平均值
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) # 中间值 -
填充预测块
- 所有像素值 = 计算的平均值
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帧内预测的重要组成部分。
参考资源:
- AV1规范文档
- 源码实现: GitHub - av1_learning
- 预测实现:
src/reconstruction/prediction.py
- 预测实现:

浙公网安备 33010602011771号