Bundle Adjustment (BA),中文常称为“光束法平差”或“束调整”,是一种在计算机视觉和机器人领域广泛应用的技术,特别是在三维重构(如Structure from Motion, SfM)和同时定位与建图(Simultaneous Localization and Mapping, SLAM)中起到关键作用的优化算法。BA旨在通过最小化重投影误差,联合优化场景中的三维点(landmarks)的位置以及相机的内外参数,从而获得最精确的几何模型和相机姿态。
下面将从以下几个方面详细讲解BA:
基本概念
- 重投影误差:
BA的核心是减少图像特征点从三维空间投射到不同相机视图中的实际位置与观测到的图像坐标之间的差异,即重投影误差。对于一个已知的三维点P和相机参数(包括内参如焦距、主点坐标等,以及外参如旋转矩阵R和平移向量t描述的相机位姿),可以计算出该点在图像上的投影坐标u。如果实际观测到的特征点位置为u’,则重投影误差定义为二者之差:
e = u ′ − u e = u' - u e=u′−u
BA的目标是找到一组相机参数和三维点坐标,使得所有图像上所有特征点的重投影误差之和最小。
- 优化变量:
BA优化的变量主要包括:- 相机参数:
- 内参:描述相机自身的固有属性,如焦距、主点坐标、畸变系数等,这些参数对所有图像均适用。
- 外参:包括每个相机的姿态(旋转矩阵R和位移向量t),它们决定了相机在世界坐标系中的位置和方向。
- 三维点坐标:场景中特征点在世界坐标系下的精确位置。
- 相机参数:
数学模型与优化目标
BA通常被表述为一个非线性最小二乘问题:
min X , c ∑ i = 1 N c ∑ j = 1 N i ∥ π ( X j , c i ) − u i j ′ ∥ 2 \min_{\mathbf{X}, \mathbf{c}} \sum_{i=1}^{N_c}\sum_{j=1}^{N_i} \|\pi(\mathbf{X}_j, \mathbf{c}_i) - \mathbf{u}_{ij}'\|^2 X,cmini=1∑Ncj=1∑Ni∥π(Xj,ci)−uij′∥2
其中:
- Nc 是相机总数。
- Ni 是第 ( i ) 个相机观测到的特征点数量。
- ( X j ∈ R 3 ) ( \mathbf{X}_j \in \mathbb{R}^3 ) (Xj∈R3) 是第 ( j ) 个三维点的坐标。
- ( c i = ( R i , t i , k i ) ) ( \mathbf{c}_i = (\mathbf{R}_i, \mathbf{t}_i, \mathbf{k}_i) ) (ci=(Ri,ti,ki))是第 ( i ) 个相机的参数集合,包含旋转矩阵 ( R i ) ( \mathbf{R}_i ) (Ri) 、平移向量 ( t i ) ( \mathbf{t}_i ) (ti) 和内参矩阵 ( k i ) ( \mathbf{k}_i ) (ki)。
- ( π ( ⋅ ) ) ( \pi(\cdot) ) (π(⋅)) 是从三维空间到二维图像平面的投影函数,它将三维点和相机参数映射到图像坐标。
- ( u i j ′ ) ( \mathbf{u}_{ij}' ) (uij′) 是第 ( i ) 个相机观测到的第 ( j ) 个特征点在图像上的实际观测坐标。
优化方法
解决上述非线性最小二乘问题通常采用迭代优化算法,如Levenberg-Marquardt (LM)、Gauss-Newton (GN) 或者高斯牛顿法的变种。这些方法基于泰勒展开近似目标函数,并构建雅可比矩阵和目标函数的海森矩阵,通过迭代更新优化变量以逐步减小重投影误差。
李群与李代数
在处理旋转参数时,由于旋转矩阵构成的李群SO(3)具有非线性结构,直接优化旋转矩阵会遇到病态条件和奇异性问题。因此,BA实践中通常使用对应的李代数SO(3)的表示(如旋转向量),并通过罗德里格斯公式或指数映射将旋转向量转换为旋转矩阵。这样不仅简化了优化过程,还避免了旋转矩阵正交性和行列式为1的约束问题。
图优化框架
现代BA常常在图优化框架下进行,将相机节点、三维点节点以及它们之间的观测边构成一个因子图。每个观测边对应一个重投影误差项,节点代表待优化的状态变量(相机参数和三维点坐标)。图优化利用稀疏线性代数和高效的求解器(如Cholesky分解或迭代稀疏LU分解),在保持全局一致性的同时,高效地求解大规模BA问题。
应用与效果
BA的应用广泛,包括但不限于:
- SfM:通过多张照片重建场景的三维结构和相机位置,BA用于精确化初始的SIFT/SURF等特征匹配得到的几何模型。
- SLAM:实时估计机器人或移动设备的轨迹并构建周围环境地图,BA周期性地运行以校正累积的定位误差和地图精度。
BA的效果显著,能够显著提高重建或定位的精度,消除累积误差,生成更为精确和一致的三维模型,以及更准确的相机姿态轨迹。
总结来说,Bundle Adjustment是一种强大的优化工具,通过联合优化相机参数和三维点坐标,最小化重投影误差,从而提升计算机视觉中三维重建与定位任务的精度。它结合了先进的数学模型、优化算法以及可能的李群李代数理论,在现代SfM和SLAM系统中扮演着不可或缺的角色。