手写Bundle Adjustment(一)

这个题目是在“第一届SLAM论坛”中沈劭劼老师的发言中学到的,手写Bundle Adjustment是在不使用各种库(可以使用Eigen矩阵运算库)的条件下实现Bundle Adjustment。博客是为了记录这一过程,也是为了能够更好地理解。

开篇简单介绍一下Bundle Adjustment是什么,以及SLAM的关系。另外,本博客主要是为了动手去实现一个简易的Bundle Adjustment,不会花太多的精力在理论上,只是对已有的理论进行实现。所有代码可见https://github.com/YCJin9/sparse_BA

一、什么是Bundle Adjustment

Bundle Adjustment中文译作光束平差法、捆集调整等,是指从视觉重建中提炼出最优的3D模型和相机参数(内参和外参)。从每个特征点反射出来的几束光线(bundles of light rays),在我们把相机姿态和特征点的位置做出最优的调整(adjustment)之后,最后收束到光心的这个过程,简称BA。

二、Bundle Adjustment与SLAM的关系

Bundle Adjustment是SLAM中图优化框架的模型,可以看作是SLAM问题的一种解法,同时,SLAM也可以看做成一个BA,SLAM的目的就是求解相机的运动参数,这与BA的目的是相同的。

 

接下来是如何实现Bundle Adjustment,从哪里出发,如何一步步实现一个简单结构的Bundle Adjustment 。

Bundle Adjustment实际上是一个非线性优化问题,可以看做是一个目标函数为重投影误差的最小二乘问题。

既然BA可以看做是一个非线性最小二乘问题,那么我们可以先实现一个简单的非线性最小二乘,然后在这个非线性最小二乘的框架上逐步完善,实现仅求解一个相机位姿的最简结构的Bundle Adjustment,这也是PnP问题的一种求解方法。然后将其完善成一个简易的结构的Bundle Adjustment即优化四个三维点和三个相机位姿(假设四个三维点在三个相机中都是可见的)。

 

 

猜你喜欢

转载自blog.csdn.net/qq_41814939/article/details/82346858