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 空间点构成的多视图系统。
