前言
本篇继续位姿估计,光流法,光流跟踪。
LK光流
基于特征点的位姿估计中,特征匹配是比较耗时的过程。因此,光流法常被用来替换特征匹配法,来加速特征点的跟踪。
假设相机的相邻位姿之间,空间点的亮度(像素灰度值)是不变的,则:
I
(
x
+
d
x
,
y
+
d
y
,
t
+
d
t
)
=
I
(
x
,
y
,
t
)
I(x+dx,y+dy,t+dt)=I(x,y,t) \\
I(x+dx,y+dy,t+dt)=I(x,y,t)
上面这个式子表示,空间点在
d
t
dt
dt的时间内,在图像上移动了
(
d
x
,
d
y
)
(dx,dy)
(dx,dy)的像素距离。接着泰勒展开:
I
(
x
,
y
,
t
)
+
I
x
d
x
+
I
y
d
y
+
I
t
d
t
=
I
(
x
,
y
,
t
)
s
e
t
I
x
=
∂
I
∂
x
,
I
y
=
∂
I
∂
y
t
h
e
n
I
x
d
x
+
I
y
d
y
+
I
t
d
t
=
0
s
o
I
x
d
x
d
t
+
I
y
d
y
d
t
=
−
I
t
[
I
x
I
y
]
[
d
x
d
t
d
y
d
t
]
=
−
I
t
I(x,y,t)+I_xdx+I_ydy+I_tdt=I(x,y,t) \\ \quad \\ set \quad I_x = \frac{\partial I}{\partial x},I_y=\frac{\partial I}{\partial y} \\ \quad \\ then \quad I_xdx+I_ydy+I_tdt=0 \\ \quad \\ so \quad I_x\frac{dx}{dt} + I_y\frac{dy}{dt} = -I_t \\ \quad \\ \begin{bmatrix} I_x & I_y \end{bmatrix} \begin{bmatrix} \frac{dx}{dt} \\ \frac{dy}{dt} \end{bmatrix} = - I_t
I(x,y,t)+Ixdx+Iydy+Itdt=I(x,y,t)setIx=∂x∂I,Iy=∂y∂IthenIxdx+Iydy+Itdt=0soIxdtdx+Iydtdy=−It[IxIy][dtdxdtdy]=−It
上式中,
I
x
,
I
y
I_x,I_y
Ix,Iy表示像素点在x,y方向上的梯度,
d
x
/
d
t
,
d
y
/
d
y
dx/dt,dy/dy
dx/dt,dy/dy表示像素点在x,y方向上的移动速度,
I
t
I_t
It表示像素灰度对时间的变化。
对于单个特征点的光流跟踪。容易受到噪声、光度变化等干扰,因此假设以特征点为中心的一个
w
×
w
w\times w
w×w大小的图块的运动是相同的,考虑图块的光流:
[
I
x
I
y
]
k
[
d
x
d
t
d
y
d
t
]
=
−
I
t
k
k
=
1
,
2
,
…
,
w
2
T
h
a
t
i
s
A
x
=
b
\begin{bmatrix} I_x & I_y \end{bmatrix}_k \begin{bmatrix} \frac{dx}{dt} \\ \frac{dy}{dt} \end{bmatrix} = - I_{tk} \\ k = 1,2,\dots,w^2 \\ \quad \\ That \quad is \quad Ax=b
[IxIy]k[dtdxdtdy]=−Itkk=1,2,…,w2ThatisAx=b
于是就形成了一个关于
d
x
,
d
y
dx,dy
dx,dy的超定方程组,可以通过线性最小二乘求解
x
=
−
(
A
T
A
)
−
1
A
T
b
x = -(A^TA)^{-1}A^Tb
x=−(ATA)−1ATb。
最后计算得到的 d x / d t , d y / d t dx/dt,dy/dt dx/dt,dy/dt,就是该特征点前后移动的位置。
光流金字塔
由于光流法的灰度不变假设,运动一致性假设都很严格,因此使用时如果相机运动较大,光流跟踪的结果很容易陷入局部最小。
于是,LK光流通常配合图像金字塔使用,如下图所示。将原图按照0.5倍,0.25倍,0.125倍尺寸缩小,得到图像金字塔。然后,在尺寸最小的图层上进行光流计算,把跟踪结果投影到第二张图层上进行光流计算,把跟踪结果投影到第三层,直到最后在原图上计算出跟踪结果。这种思想类似于coarse-to-refine。
由于缩小到0.125倍时,原始图像中像素的运动也被缩小了,因此就满足了图块的运动一致性假设,使得光流跟踪更加鲁棒。