5.4 复合预测混合

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

引言

复合预测混合是帧间预测生成过程的重要步骤,它通过组合两个参考帧的预测来提高精度。AV1支持5种不同的复合类型:简单平均、距离加权、Wedge mask、Inter-Intra混合和差异加权。

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


复合预测混合概述

功能说明

复合预测混合通过组合两个参考帧的预测来提高精度。不同的复合类型适用于不同的场景,能够提高预测质量。

复合类型

  1. 简单平均(COMPOUND_AVERAGE)

    pred[i][j] = Round2((preds[0][i][j] + preds[1][i][j]) / 2, InterPostRound)
    
  2. 距离加权(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)
    
  3. 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)
    
  4. 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)
    
  5. 差异加权(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帧间预测的重要技术。


参考资源:

上一篇: Warp预测
下一篇: 重叠块运动补偿

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