视觉里程计(VO, Visual Odometry)是通过图像序列估计相机运动的技术。与特征点法不同,直接法利用图像的像素强度信息,不依赖特征点检测和匹配。直接法通常适用于纹理丰富、光照变化较小的场景。以下从直接法的引出、2D光流、LK光流到直接法的推导和讨论,逐步介绍视觉里程计中的直接法。
直接法的引出
特征点法的局限
特征点法依赖显著的特征点提取和匹配,存在以下局限性:
- 在纹理较少或光照变化剧烈的场景中,特征点提取和匹配性能下降。
- 特征点法的计算代价较高,尤其在大规模匹配时。
直接法的特点
直接法不提取特征点,而是直接利用像素强度变化估计相机运动。其优势包括:
- 对纹理丰富的区域更鲁棒。
- 能充分利用图像中的所有信息,提高精度。
2D光流
光流是描述图像中像素点随时间变化的运动。2D光流是直接法的基础。
光流的基本假设
光流算法基于亮度恒常性假设,即:
I
(
x
,
t
)
=
I
(
x
+
u
,
t
+
1
)
I(\mathbf{x},t)=I(\mathbf{x}+\mathbf{u},t+1)
I(x,t)=I(x+u,t+1)
其中:
- I(x,t) 是时间 𝑡 时像素 𝑥 的亮度。
- u 是像素的位移。
光流约束方程
对亮度恒常性假设进行一阶泰勒展开,得到光流约束方程:
∂
I
∂
x
u
x
+
∂
I
∂
y
u
y
+
∂
I
∂
t
=
0
\frac{\partial I}{\partial x}u_x+\frac{\partial I}{\partial y}u_y+\frac{\partial I}{\partial t}=0
∂x∂Iux+∂y∂Iuy+∂t∂I=0
其中:
- ∂ I ∂ x , ∂ I ∂ y \frac{\partial I}{\partial x},\frac{\partial I}{\partial y} ∂x∂I,∂y∂I是图像的空间梯度。
- ∂ I ∂ t \frac{\partial I}{\partial t} ∂t∂I是图像的时间梯度。
- u x , u y u_x,u_y ux,uy是像素的运动(光流)。
此方程描述了光流与图像亮度梯度的关系。
光流问题的求解
光流约束方程中只有一个方程,但未知数有两个 ( u x , u y ) (u_x,u_y) (ux,uy)。这是一个欠定问题,需要增加约束来求解。这种方法称为光流估计。
LK光流
基本原理
Lucas-Kanade(LK)光流通过假设一个局部窗口内的光流是一致的,从而将欠定问题转化为超定问题。
约束方程
在一个 𝑁×𝑁窗口内,累积光流约束方程:
[
∂
I
∂
x
∂
I
∂
y
]
[
u
x
u
y
]
=
−
∂
I
∂
t
\begin{bmatrix}\frac{\partial I}{\partial x}&\frac{\partial I}{\partial y}\end{bmatrix}\begin{bmatrix}u_x\\u_y\end{bmatrix}=-\frac{\partial I}{\partial t}
[∂x∂I∂y∂I][uxuy]=−∂t∂I
通过累积窗口内的方程,可写为矩阵形式:
A
u
=
b
\mathbf{Au}=\mathbf{b}
Au=b
其中:
- A = [ ∂ I ∂ x ∂ I ∂ y ] \mathbf{A}=\begin{bmatrix}\frac{\partial I}{\partial x}&&\frac{\partial I}{\partial y}\end{bmatrix} A=[∂x∂I∂y∂I]
- b = − ∂ I ∂ t \mathbf{b}=-\frac{\partial I}{\partial t} b=−∂t∂I
解法
通过最小二乘法求解光流: u = ( A ⊤ A ) − 1 A ⊤ b \mathbf{u}=(\mathbf{A}^\top\mathbf{A})^{-1}\mathbf{A}^\top\mathbf{b} u=(A⊤A)−1A⊤b
特点与应用
- 优点:对局部窗口内的小运动估计精度高。
- 局限性:不适用于大位移或快速运动场景。
直接法
直接法的推导
- 亮度恒常性
与光流相似,直接法也依赖亮度恒常性假设: I ( x , t ) = I ( x ′ , t + 1 ) I(\mathbf{x},t)=I(\mathbf{x}^{\prime},t+1) I(x,t)=I(x′,t+1)
但直接法的目标是通过像素强度估计相机的位姿变化。 - 图像配准
目标是通过优化位姿参数 𝑇,使得目标帧与参考帧之间的像素误差最小: E = ∑ x [ I 2 ( π ( T ⋅ P ) ) − I 1 ( x ) ] 2 E=\sum_{\mathbf{x}}\left[I_2(\pi(\mathbf{T}\cdot\mathbf{P}))-I_1(\mathbf{x})\right]^2 E=x∑[I2(π(T⋅P))−I1(x)]2
其中:- π ( T ⋅ P ) \pi(\mathbf{T}\cdot\mathbf{P}) π(T⋅P)是3D点 𝑃 在新位姿下投影到目标帧的坐标。
- I 1 , I 2 I_1,I_2 I1,I2分别是参考帧和目标帧的像素值。
- 梯度下降优化
通过对位姿参数 𝑇 使用梯度下降或高斯-牛顿法迭代优化,使得误差 𝐸 最小。
直接法的分类
- 稠密直接法:利用图像中所有像素强度进行优化,计算量大,但精度高。
- 半稠密直接法:仅在高梯度区域使用直接法,兼顾效率和精度。
- 稀疏直接法:仅在特定像素(如边缘点)处应用直接法,适用于实时场景。
直接法的讨论
- 优点
- 充分利用像素信息:直接法不依赖特征点提取,对纹理丰富的场景更鲁棒。
- 精度高:直接法可在亚像素级别估计相机运动。
- 局限性
- 对光照变化敏感:亮度恒常性假设在光照变化时不成立。
- 对初值敏感:直接法优化需要较好的初始值,否则可能陷入局部最优。
- 计算量大:尤其是稠密直接法,难以满足实时性需求。
- 应用场景
- 稠密直接法适用于离线、高精度的三维重建任务。
- 半稠密直接法和稀疏直接法适用于实时性要求较高的场景,如SLAM。
总结
直接法通过像素强度信息直接优化相机的运动参数,是视觉里程计的重要方法之一。从2D光流到LK光流,再到直接法的推导与应用,直接法展现出其独特的优势,特别是在纹理丰富场景下。然而,其对光照变化和初值敏感性也使得特征点法和直接法在实际应用中相辅相成,共同构成了视觉里程计的核心技术体系。