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两种模式。
过程
-
Warp参数设置
if useWarp == 1: # 局部warp warp_params = _LocalWarpParams elif useWarp == 2: # 全局warp warp_params = gm_params[refFrame] -
坐标变换
# 将当前块坐标变换到参考帧坐标 dstX, dstY = warp_transform(x, y, warp_params) -
Setup Shear
alpha, beta, gamma, delta = _setup_shear(warp_params) -
水平Warp插值
# 使用Warped_Filters进行水平插值 intermediate = horizontal_warp_interpolation(...) -
垂直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两种模式,是帧间预测生成过程中的高级技术。
参考资源:
- AV1规范文档
- 源码实现: GitHub - av1_learning
- 预测实现:
src/reconstruction/prediction.py
- 预测实现:

浙公网安备 33010602011771号