计算机视觉中的光流技术及其数学原理
1. 什么是光流?
光流(Optical Flow)是指图像序列中像素随时间的运动模式。其核心思想是:如果场景中的物体在运动,那么图像上的像素点也会发生相应的位移,光流技术就是通过数学建模来估计这个位移。
光流在计算机视觉中的应用非常广泛,例如:
- 运动检测与目标跟踪(如视频监控、自动驾驶)
- 视频稳定(如手持相机的防抖功能)
- 动作识别(如人体姿态估计)
- 3D 结构重建(如基于单目视频的深度估计)
- 机器人视觉(如 SLAM 和路径规划)
2. 光流的基本数学原理
光流的计算基于两个核心假设:
2.1 亮度恒常性假设(Brightness Constancy Assumption, BCA)
在短时间内,移动的物体点在图像中的亮度不变:
I
(
x
,
y
,
t
)
=
I
(
x
+
Δ
x
,
y
+
Δ
y
,
t
+
Δ
t
)
I(x, y, t) = I(x+\Delta x, y+\Delta y, t+\Delta t)
I(x,y,t)=I(x+Δx,y+Δy,t+Δt)
其中:
- I ( x , y , t ) I(x, y, t) I(x,y,t) 是图像上点 ( x , y ) (x, y) (x,y) 处在时间 t t t 时的像素强度(灰度值)。
- ( x + Δ x , y + Δ y ) (x+\Delta x, y+\Delta y) (x+Δx,y+Δy) 是该点在下一帧中的位置。
2.2 小运动假设(Small Motion Assumption)
假设物体的运动幅度较小,可以对亮度变化进行泰勒展开:
I
(
x
+
Δ
x
,
y
+
Δ
y
,
t
+
Δ
t
)
≈
I
(
x
,
y
,
t
)
+
∂
I
∂
x
Δ
x
+
∂
I
∂
y
Δ
y
+
∂
I
∂
t
Δ
t
I(x+\Delta x, y+\Delta y, t+\Delta t) \approx I(x, y, t) + \frac{\partial I}{\partial x} \Delta x + \frac{\partial I}{\partial y} \Delta y + \frac{\partial I}{\partial t} \Delta t
I(x+Δx,y+Δy,t+Δt)≈I(x,y,t)+∂x∂IΔx+∂y∂IΔy+∂t∂IΔt
根据亮度恒常性假设,上式右边等于
I
(
x
,
y
,
t
)
I(x, y, t)
I(x,y,t),因此:
∂
I
∂
x
Δ
x
+
∂
I
∂
y
Δ
y
+
∂
I
∂
t
Δ
t
=
0
\frac{\partial I}{\partial x} \Delta x + \frac{\partial I}{\partial y} \Delta y + \frac{\partial I}{\partial t} \Delta t = 0
∂x∂IΔx+∂y∂IΔy+∂t∂IΔt=0
令:
- u = Δ x Δ t u = \frac{\Delta x}{\Delta t} u=ΔtΔx(光流在 x x x 方向上的分量)
- v = Δ y Δ t v = \frac{\Delta y}{\Delta t} v=ΔtΔy(光流在 y y y 方向上的分量)
得到 光流约束方程(Optical Flow Constraint Equation, OFCE):
I
x
u
+
I
y
v
+
I
t
=
0
I_x u + I_y v + I_t = 0
Ixu+Iyv+It=0
其中:
- I x = ∂ I ∂ x I_x = \frac{\partial I}{\partial x} Ix=∂x∂I 是图像的 x x x 方向梯度。
- I y = ∂ I ∂ y I_y = \frac{\partial I}{\partial y} Iy=∂y∂I 是图像的 y y y 方向梯度。
- I t = ∂ I ∂ t I_t = \frac{\partial I}{\partial t} It=∂t∂I 是图像的时间梯度。
2.3 盲点问题
光流约束方程只有一个方程,但 u , v u, v u,v 有两个未知数,因此这是一个 欠约束问题(Ill-posed Problem),需要额外约束条件来求解。
3. 经典光流求解方法
由于光流约束方程有多个解,因此需要引入额外假设。以下是两种经典方法:
3.1 Lucas-Kanade 方法(局部方法)
Lucas-Kanade 方法(1981)假设在一个小窗口内所有像素点的光流是相同的,即:
$$
A
\begin{bmatrix}
u \
v
\end{bmatrix}
b
其中:
其中:
其中:
A =
\begin{bmatrix}
I_{x1} & I_{y1} \
I_{x2} & I_{y2} \
\vdots & \vdots \
I_{xn} & I_{yn}
\end{bmatrix}, \quad
b =
\begin{bmatrix}
-I_{t1} \
-I_{t2} \
\vdots \
-I_{tn}
\end{bmatrix}
$$
使用最小二乘法求解:
$$
\begin{bmatrix}
u \
v
\end{bmatrix}
(A^T A)^{-1} A^T b
$$
3.2 Horn-Schunck 方法(全局方法)
Horn-Schunck 方法(1981)采用全局平滑性假设,优化以下能量函数:
E
=
∬
(
(
I
x
u
+
I
y
v
+
I
t
)
2
+
λ
(
∣
∇
u
∣
2
+
∣
∇
v
∣
2
)
)
d
x
d
y
E = \iint \left( (I_x u + I_y v + I_t)^2 + \lambda \left( \left| \nabla u \right|^2 + \left| \nabla v \right|^2 \right) \right) dxdy
E=∬((Ixu+Iyv+It)2+λ(∣∇u∣2+∣∇v∣2))dxdy
通过变分法求导,得到更新公式:
u
=
u
ˉ
−
I
x
(
I
x
u
ˉ
+
I
y
v
ˉ
+
I
t
)
λ
+
I
x
2
+
I
y
2
u = \bar{u} - \frac{I_x (I_x \bar{u} + I_y \bar{v} + I_t)}{\lambda + I_x^2 + I_y^2}
u=uˉ−λ+Ix2+Iy2Ix(Ixuˉ+Iyvˉ+It)
v = v ˉ − I y ( I x u ˉ + I y v ˉ + I t ) λ + I x 2 + I y 2 v = \bar{v} - \frac{I_y (I_x \bar{u} + I_y \bar{v} + I_t)}{\lambda + I_x^2 + I_y^2} v=vˉ−λ+Ix2+Iy2Iy(Ixuˉ+Iyvˉ+It)
4. 现代光流方法
现代深度学习方法显著提升了光流估计的精度,主要包括:
- FlowNet(2015):采用 CNN 直接回归光流。
- PWC-Net(2018):引入金字塔、Warping 和 Cost Volume,提升计算效率。
- RAFT(2020):通过递归更新的 Cost Volume 和 GRU 迭代优化,实现高精度光流估计。
5. 光流的挑战
- 遮挡问题:某些区域可能在前一帧可见,但在后一帧被遮挡,导致光流计算困难。
- 亮度变化:亮度恒常性假设在实际场景中未必成立,光照变化可能影响光流估计。
- 大运动问题:基于梯度的方法在大运动情况下容易失效,需要多尺度或深度学习方法改进。
6. 总结
光流是一种重要的计算机视觉技术,核心数学原理是光流约束方程。经典方法如 Lucas-Kanade 和 Horn-Schunck 各有优缺点,而深度学习方法(如 RAFT)已成为现代光流估计算法的主流。