第 9 章 运动估计 (Motion Estimation)
核心结论
-
平移对齐(§9.1):视频稳定 / 视频去抖;相位相关 / 块匹配。
-
参数化运动(§9.2):仿射 / 透视运动模型;光流约束。
-
光流(§9.3):逐像素运动估计;Lucas-Kanade / Horn-Schunck;深度学习(FlowNet / RAFT)。
-
分层运动(§9.4):运动分割;多层独立运动模型。
-
应用:视频稳定 / 视频去抖 / 动作识别 / 视觉里程计。
|
本章主旨
本章是"运动估计章"——从视频帧序列估计运动。理解光流才能做视觉里程计 / 视频稳定 / 动作识别;现代用深度学习(RAFT / FlowNet)效果远超传统方法。 |
一、核心概念
本章围绕 4 个核心概念展开:平移对齐 → 参数化运动 → 光流 → 分层运动。
| 概念 | 定义 + 重要性 | 实现提示 |
|---|---|---|
平移对齐 |
相邻帧的全局平移估计;视频稳定 / 去抖。 |
§9.1;相位相关 / 块匹配。 |
参数化运动 |
仿射 / 透视运动模型;光流约束。 |
§9.2;表达更复杂的运动。 |
光流 (optical flow) |
逐像素运动估计;Lucas-Kanade / Horn-Schunck / RAFT。 |
§9.3;动作识别 / 视觉里程计基础。 |
分层运动 |
多层独立运动模型;运动分割。 |
§9.4;复杂场景的建模。 |
二、详细笔记
2.1 平移对齐 (Translational Alignment)
What:估计相邻帧之间的全局平移;用于视频稳定。
Why:手持视频抖动;视频稳定让观看更舒适。
How:
平移估计(§9.1):
-
相位相关:FFT → 互相关 → 相位相关 → 找峰值位置 = 平移量。
-
块匹配:把图像分块;每块在相邻帧找最相似位置。
-
特征匹配:SIFT / ORB 跨帧匹配 + RANSAC 估计平移。
|
相位相关的工程优势
|
When:视频稳定;视频去抖;视频拼接(粗对齐)。
Example:cv2.phaseCorrelate(reference, current) 返回 (shift_x, shift_y);FFmpeg vidstab 模块用此技术。
2.2 参数化运动 (Parametric Motion)
What:用参数化模型(仿射 / 透视)描述帧间运动。
Why:表达旋转 / 缩放 / 透视变换;比平移更通用。
How:
运动模型(§9.2):
-
仿射 6 个自由度(2×2 矩阵 + 2 维平移)。
-
透视 8 个自由度(3×3 单应)。
光流约束(§9.3):
展开(泰勒一阶)→ 光流方程。
|
光流约束的"孔径问题"
|
When:视频稳定(仿射);视频拼接;动作识别。
Example:cv2.estimateRigidTransform(prev, curr, False);cv2.findTransformECC。
2.3 光流 (Optical Flow)
What:逐像素运动估计;输出 (u, v) 速度场。
Why:动作识别 / 视觉里程计 / 视频分割的核心特征。
How:
经典光流(§9.3):
-
Lucas-Kanade(1981):稀疏光流;假设邻域运动一致;用最小二乘。
-
Horn-Schunck(1981):稠密光流;全局平滑约束。
-
Farneback(2003):多项式展开;稠密光流。
深度学习光流:
-
FlowNet(2015):CNN 端到端估计光流。
-
RAFT(2020):迭代优化;当前 SOTA。
-
GMA(2021):全局运动聚合。
|
深度学习光流的工程优势
|
When:动作识别;视频稳定;视觉里程计;视频分割。
Example:cv2.calcOpticalFlowFarneback;mmflow / RAFT 深度学习库。