光流 (Optical flow or optic flow)是关于视域中的物体运动检测 中的概念。用来描述相对于观察者的运动所造成的观测目标、表面或边缘的运动。光流法在样型识别 、计算机视觉 以及其他影像处理 领域中非常有用,可用于运动检测、物件切割、碰撞时间与物体膨胀的计算、运动补偿编码,或者通过物体表面与边缘进行立体的测量等等。
光流法实际是通过检测图像像素点的强度随时间的变化进而推断出物体移动速度及方向的方法。
假设该移动很小,那么可以根据泰勒级数 得出:
I
(
x
+
Δ
x
,
y
+
Δ
y
,
t
+
Δ
t
)
=
I
(
x
,
y
,
t
)
+
∂
I
∂
x
Δ
x
+
∂
I
∂
y
Δ
y
+
∂
I
∂
t
Δ
t
+
{\displaystyle I(x+\Delta x,y+\Delta y,t+\Delta t)=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+}
Higher-order terms (HOTs)
因此可以推出:
∂
I
∂
x
Δ
x
+
∂
I
∂
y
Δ
y
+
∂
I
∂
t
Δ
t
=
0
{\displaystyle {\frac {\partial I}{\partial x}}\Delta x+{\frac {\partial I}{\partial y}}\Delta y+{\frac {\partial I}{\partial t}}\Delta t=0}
或
∂
I
∂
x
Δ
x
Δ
t
+
∂
I
∂
y
Δ
y
Δ
t
+
∂
I
∂
t
Δ
t
Δ
t
=
0
{\displaystyle {\frac {\partial I}{\partial x}}{\frac {\Delta x}{\Delta t}}+{\frac {\partial I}{\partial y}}{\frac {\Delta y}{\Delta t}}+{\frac {\partial I}{\partial t}}{\frac {\Delta t}{\Delta t}}=0}
最终可得出结论:
∂
I
∂
x
V
x
+
∂
I
∂
y
V
y
+
∂
I
∂
t
=
0
{\displaystyle {\frac {\partial I}{\partial x}}V_{x}+{\frac {\partial I}{\partial y}}V_{y}+{\frac {\partial I}{\partial t}}=0}
这里的
V
x
,
V
y
{\displaystyle V_{x},V_{y}}
是
x
{\displaystyle x}
和
y
{\displaystyle y}
方向上的速率,或称为
I
(
x
,
y
,
t
)
{\displaystyle I(x,y,t)}
的光流。而
∂
I
∂
x
{\displaystyle {\tfrac {\partial I}{\partial x}}}
,
∂
I
∂
y
{\displaystyle {\tfrac {\partial I}{\partial y}}}
和
∂
I
∂
t
{\displaystyle {\tfrac {\partial I}{\partial t}}}
则是图像
(
x
,
y
,
t
)
{\displaystyle (x,y,t)}
在对应方向上的偏导数 。
I
x
{\displaystyle I_{x}}
、
I
y
{\displaystyle I_{y}}
和
I
t
{\displaystyle I_{t}}
的关系可用下式表述:
I
x
V
x
+
I
y
V
y
=
−
I
t
{\displaystyle I_{x}V_{x}+I_{y}V_{y}=-I_{t}}
或
∇
I
T
⋅
V
→
=
−
I
t
{\displaystyle \nabla I^{T}\cdot {\vec {V}}=-I_{t}}
这是两个未知数中的一个方程,不能这样求解。这被称为光流算法的孔径问题。为了找到光流,需要另一组方程,由附加的约束给出。所有光流方法都引入了估算实际流量的附加条件.