3D图像重建中Bundle Adjustment的推导与实现
介绍
捆集调整(Bundle Adjustment),也称为光束平差法,是一种利用来自多台相机的图像数据同时优化相机位置和姿态以及 3D 点位置的技术。该技术历史相当悠久,于 1958 年由 DC Brown1 首次提出。
最初这是美国空军正在进行的从航拍照片中恢复环境的研究,随着视觉SLAM和SfM的传播,它在日常生活中得到了更广泛的应用。
流行的视觉 SLAM(例如 orb-slam2 和 VINS-Mono)使用图形优化库(例如 ceres、gtsam 和 g2o)来解决捆集调整问题。然而,如果没有正确理解内部原理,很有可能无法改善问题或导致原创研究或开发。
在本文中,再一次介绍捆集调整的理论并推导其方程,同时在不依赖库的情况下理解该理论并从头开始在 Python 中实现它,以加深理解。
什么是捆集调整?
下图显示了从多个摄像机(或多次移动同一台摄像机)捕捉物体的情况。该物体具有在每个摄像机图像中可见的特征点*(例如角落)(红点)。
另一方面,如果我们知道这些特征点在3D空间中的3D位置(3D点)和相机姿态,我们就可以进行计算,将3D空间点投影到相机的2D图像平面上(浅蓝色点)。
然而,最初我们只知道 3D 点位置和相机位姿的近似值。因此,投影出的浅蓝色点和实际的红点不匹配。这个错误被称为重投影错误,用红色虚线表示。捆集调整是一种通过最小化该新投影误差来联合优化 3D 点云位置和每个相机位姿的技术。