束平差原理与基础实现如何详解15个细节?
摘要:系统阐述了束平差(Bundle Adjustment)的几何模型、非线性最小二乘建模、稀疏结构特性及基于 Schur 补的高效求解策略,并通过 Ceres Solver 实现了一个完整的 BA 优化案例,验证了其在全局一致重建中的强大能力。
1 引言
在本系列(《最小二乘问题详解:目录》)的前几篇文章中,我们系统探讨了运动恢复结构(Structure from Motion, SFM)中的三个核心子问题:
PnP 问题(《最小二乘问题详解 10:PnP 问题求解》与《最小二乘问题详解 11:基于李代数的 PnP 优化》):在已知部分 3D 结构的前提下,通过 2D-3D 对应关系求解新图像的相机位姿;
三角化(《最小二乘问题详解 12:三角化中的非线性优化》):在已知相机位姿的前提下,通过多视角 2D 观测反推空间点的 3D 位置。
对极几何与本质矩阵 E(《最小二乘问题详解13:对极几何中本质矩阵求解》与《最小二乘问题详解14:鲁棒估计与5点算法求解本质矩阵》):在相机内参已知的前提下,从两视图的 2D-2D 匹配点对中恢复相机间的相对位姿(旋转 \(\mathbf{R}\) 与平移方向 \(\mathbf{t}\))。
其实,这些方法构成了增量式 SFM 的基本流程:先用对极几何初始化两帧,再交替使用三角化和 PnP 逐步扩展重建规模。然而,它们本质上都是局部优化方法——每一步仅利用当前可用的信息进行独立求解,无法感知全局几何一致性。例如:
初始两帧的 E 矩阵分解可能存在错误解或尺度模糊;
三角化结果受位姿误差和图像噪声影响;
PnP 的位姿估计会继承并放大前期误差。
随着图像数量增加,这些局部误差会不断累积,导致最终重建结果出现尺度漂移、结构扭曲甚至拓扑错误。要解决这一问题,我们需要一种全局优化机制,能够同时调整所有相机位姿和所有 3D 点,使得整个观测系统在统一的几何模型下达到最优自洽。这就是束平差(Bundle Adjustment, BA) :一种非线性最小二乘优化方法,它将所有相机位姿和所有 3D 点作为联合变量,最小化所有观测点的重投影误差总和,从而实现全局一致的高精度重建。
BA 并不取代上述局部方法,而是作为 SFM 流程的最终全局优化阶段,对由 PnP 与三角化逐步构建的初始重建结果进行一致性精修。在本文中,我们将建立 BA 的完整数学模型,分析其稀疏结构,并基于 Ceres Solver 实现一个基础但可运行的 BA 系统。
2 几何模型
束平差建立在针孔相机成像模型基础之上。考虑一个由 \(N\) 个相机和 \(M\) 个 3D 空间点构成的多视图系统。对于任意一个被第 \(i\) 个相机观测到的第 \(j\) 个 3D 点,其成像过程可描述如下:
世界坐标系中的 3D 点:记为 \(\mathbf{X}_j \in \mathbb{R}^3\);
变换至第 \(i\) 个相机坐标系:
\[\mathbf{X}_j^{(i)} = \mathbf{R}_i \mathbf{X}_j + \mathbf{t}_i
\]
其中 \(\mathbf{R}_i \in SO(3)\) 和 \(\mathbf{t}_i \in \mathbb{R}^3\) 分别表示第 \(i\) 个相机的旋转矩阵和平移向量(即外参);
透视投影至归一化平面:
\[\mathbf{x}_{ij}^{\text{norm}} = \frac{1}{Z_j^{(i)}} \begin{bmatrix} X_j^{(i)} \\ Y_j^{(i)} \end{bmatrix}
\]
应用内参得到像素坐标(假设相机内参 \(\mathbf{K}\) 已知且固定):
\[\hat{\mathbf{x}}_{ij} = \mathbf{K} \begin{bmatrix} \mathbf{x}_{ij}^{\text{norm}} \\ 1 \end{bmatrix}
= \pi\left( \mathbf{K} [\mathbf{R}_i \mid \mathbf{t}_i] \begin{bmatrix} \mathbf{X}_j \\ 1 \end{bmatrix} \right)
\]
其中 \(\pi(\cdot)\) 表示齐次坐标到非齐次坐标的转换操作。
在理想无噪声情况下,重投影点 \(\hat{\mathbf{x}}_{ij}\) 应与图像中实际检测到的特征点 \(\mathbf{x}_{ij}\) 完全重合。然而,由于特征提取误差、初始位姿不准、三角化偏差等因素,二者通常存在偏差。BA 的目标正是通过调整所有 \(\{\mathbf{R}_i, \mathbf{t}_i\}\) 与 \(\{\mathbf{X}_j\}\),使这一偏差全局最小化。
