光流(Optical Flow)是像素在图像平面上的瞬时运动速度,用于运动估计、目标跟踪、视频稳像等任务。
基本概念
光流假设像素亮度在短时间内恒定:
$$I(x, y, t) = I(x + dx, y + dy, t + dt)$$
泰勒展开后得到光流约束方程:
$$I_x u + I_y v + I_t = 0$$
其中$(u, v)$是光流向量,$(I_x, I_y)$是图像梯度,$I_t$是时间梯度。
光流方法分类
| 类型 | 方法 | 特点 |
|---|---|---|
| 稀疏光流 | Lucas-Kanade | 角点追踪,计算快 |
| 稠密光流 | Horn-Schunck, FlowNet | 逐像素估计,计算量大 |
| 深度学习方法 | RAFT, PWC-Net | 精度高,端到端训练 |
Lucas-Kanade 算法
假设局部窗口内光流恒定,通过最小二乘求解:
$$\begin{bmatrix} u \ v \end{bmatrix} = \begin{bmatrix} \sum I_x^2 & \sum I_x I_y \ \sum I_x I_y & \sum I_y^2 \end{bmatrix}^{-1} \begin{bmatrix} -\sum I_x I_t \ -\sum I_y I_t \end{bmatrix}$$
OpenCV 实现:
| |
应用场景
- 目标跟踪:追踪特征点运动轨迹
- 动作识别:光流场作为时序特征
- 视频稳像:估计相机运动进行补偿
- 自动驾驶:检测运动物体、估计深度
张芷铭的个人博客
Comments