5.3.3 Warp预测(仿射变换)

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

引言

Warp预测(Block Warp)是帧间预测生成过程中的高级技术,使用仿射变换(warp)进行运动补偿,适用于旋转、缩放等复杂运动。Warp预测支持局部warp和全局warp两种模式。

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


Warp预测概述

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

规范文档: 7.11.3.5 Block warp process

功能说明

使用仿射变换(warp)进行运动补偿,适用于旋转、缩放等复杂运动。Warp预测支持局部warp和全局warp两种模式。

过程

  1. Warp参数设置

    if useWarp == 1:  # 局部warp
        warp_params = _LocalWarpParams
    elif useWarp == 2:  # 全局warp
        warp_params = gm_params[refFrame]
    
  2. 坐标变换

    # 将当前块坐标变换到参考帧坐标
    dstX, dstY = warp_transform(x, y, warp_params)
    
  3. Setup Shear

    alpha, beta, gamma, delta = _setup_shear(warp_params)
    
  4. 水平Warp插值

    # 使用Warped_Filters进行水平插值
    intermediate = horizontal_warp_interpolation(...)
    
  5. 垂直Warp插值

    # 使用Warped_Filters进行垂直插值
    pred = vertical_warp_interpolation(intermediate, ...)
    

Warp预测详细流程图

graph TD A[Warp预测开始<br/>_block_warp] --> B[获取参考帧<br/>FrameStore refIdx] B --> C[计算子采样参数] C --> D[计算源坐标<br/>srcX srcY] D --> E{useWarp类型} E -->|1| F[使用局部Warp参数<br/>_LocalWarpParams] E -->|2| G[使用全局Warp参数<br/>gm_params] F --> H[计算目标坐标<br/>dstX dstY] G --> H H --> I[剪切过程<br/>_setup_shear<br/>计算alpha beta gamma delta] I --> J[计算整数和分数部分<br/>ix4 sx4 iy4 sy4] J --> K[水平Warp插值] K --> L[遍历中间行] L --> M[遍历中间列] M --> N[计算sx] N --> O[应用Warped_Filters<br/>水平插值] O --> P[存储中间结果<br/>intermediate] P --> Q{还有列?} Q -->|是| M Q -->|否| R{还有行?} R -->|是| L R -->|否| S[垂直Warp插值] S --> T[遍历输出行] T --> U[遍历输出列] U --> V[计算sy] V --> W[应用Warped_Filters<br/>垂直插值] W --> X[存储最终预测<br/>pred] X --> Y{还有列?} Y -->|是| U Y -->|否| Z{还有行?} Z -->|是| T Z -->|否| AA[Warp预测完成] style A fill:#e1f5ff style K fill:#fff9c4 style S fill:#fff9c4 style AA fill:#c8e6c9

总结

Warp预测使用仿射变换进行运动补偿,适用于旋转、缩放等复杂运动。它支持局部warp和全局warp两种模式,是帧间预测生成过程中的高级技术。


参考资源:

上一篇: 块间预测
下一篇: 复合预测混合

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