5.4 复合预测混合
作者:chai51
出处:https://www.cnblogs.com/chai51
版权:本文版权归作者和博客园共有
转载:欢迎转载,但未经作者同意,必须保留此段声明;必须在文章中给出原文连接;否则必究法律责任
引言
复合预测混合是帧间预测生成过程的重要步骤,它通过组合两个参考帧的预测来提高精度。AV1支持5种不同的复合类型:简单平均、距离加权、Wedge mask、Inter-Intra混合和差异加权。
源码说明: 本文档基于作者自己编写的AV1解码器Python实现,所有代码示例和实现细节均来自实际可运行的源码。源码仓库:GitHub - av1_learning
复合预测混合概述
功能说明
复合预测混合通过组合两个参考帧的预测来提高精度。不同的复合类型适用于不同的场景,能够提高预测质量。
复合类型
-
简单平均(COMPOUND_AVERAGE)
pred[i][j] = Round2((preds[0][i][j] + preds[1][i][j]) / 2, InterPostRound) -
距离加权(COMPOUND_DISTANCE)
FwdWeight = get_distance_weight(RefFrame[0]) BckWeight = get_distance_weight(RefFrame[1]) pred[i][j] = Round2(FwdWeight * preds[0][i][j] + BckWeight * preds[1][i][j], 4 + InterPostRound) -
Wedge Mask(COMPOUND_WEDGE)
mask = get_wedge_mask(MiSize, wedge_index, wedge_sign) pred[i][j] = Round2(preds[0][i][j] * mask[i][j] + preds[1][i][j] * (64 - mask[i][j]), 6) -
Inter-Intra混合(COMPOUND_INTRA)
intra_pred = predict_intra(interintra_mode, ...) mask = get_intra_mode_variant_mask(interintra_mode, ...) pred[i][j] = Round2(intra_pred[i][j] * mask[i][j] + preds[0][i][j] * (64 - mask[i][j]), 6) -
差异加权(COMPOUND_DIFFWTD)
diff = abs(preds[0][i][j] - preds[1][i][j]) mask = get_diffwtd_mask(diff) pred[i][j] = Round2(preds[0][i][j] * mask[i][j] + preds[1][i][j] * (64 - mask[i][j]), 6)
复合预测类型对比
| 复合类型 | 说明 | 适用场景 |
|---|---|---|
| COMPOUND_AVERAGE | 简单平均 | 两个参考帧质量相近 |
| COMPOUND_DISTANCE | 距离加权 | 利用时间距离信息 |
| COMPOUND_WEDGE | Wedge mask | 需要空间自适应混合 |
| COMPOUND_INTRA | Inter-Intra混合 | 结合帧间和帧内优势 |
| COMPOUND_DIFFWTD | 差异加权 | 根据预测差异自适应 |
总结
复合预测混合通过组合两个参考帧的预测来提高精度,支持5种不同的混合方式。不同的复合类型适用于不同的场景,能够提高预测质量,是AV1帧间预测的重要技术。
参考资源:
- AV1规范文档
- 源码实现: GitHub - av1_learning
- 预测实现:
src/reconstruction/prediction.py
- 预测实现:

浙公网安备 33010602011771号