英文:Bundle Adjustment in the Large
BAL是一种文本格式,SLAM可用它存储观测到的路标投影,位姿,路标的三维坐标,等等。它可作为后端非线程优化的输入,以及生成*.ply,然后用Mashlab进行查看。
BAL中内容包括四个部分。1)第一行;描述相机数、路标个数,观测方程个数。2)观测方程。3)相机参数。4)路标在世界坐标系下坐标。
一、示例
摘自《视觉SLAM十四讲--从理论到实践(第二版)》的第9章中的problem-16-22106-pre.txt。为便好理解当中意义,可参考“第十章g2ocustombundle/common/BALProblem类”。
<slambook2>/ch9/problem-16-22106-pre.txt ================== =={1/4}相机数(位姿数) 路标个数 观测方程个数 16 22106 83718 =={2/4}观测方程。记录第i个相机观测第j个路标所看到的像素坐标(投影) 0 0 -3.859900e+02 3.871200e+02 1 0 -3.844000e+01 4.921200e+02 2 0 -6.679200e+02 1.231100e+02 7 0 -5.991800e+02 4.079300e+02 12 0 -7.204300e+02 3.143400e+02 13 0 -1.151300e+02 5.548999e+01 0 1 3.838800e+02 -1.529999e+01 1 1 5.597500e+02 -1.061500e+02 10 1 3.531899e+02 1.649500e+02 0 2 5.915500e+02 1.364400e+02 1 2 8.638600e+02 -2.346997e+01 2 2 4.947200e+02 1.125200e+02 6 2 4.087800e+02 2.846700e+02 7 2 4.246100e+02 3.101700e+02 9 2 2.848900e+02 1.928900e+02 10 2 5.826200e+02 3.637200e+02 12 2 4.940601e+02 2.939500e+02 13 2 7.968300e+02 -7.853003e+01 15 2 7.798900e+02 4.082500e+02 ...... 14 22103 1.808000e+02 -5.225200e+02 15 22103 -2.593700e+02 4.393600e+02 14 22104 8.235999e+01 -5.621600e+02 15 22104 -3.864900e+02 3.803600e+02 14 22105 2.212600e+02 -4.689200e+02 15 22105 -1.963200e+02 5.126800e+02 =={3/4}相机参数。一个相机9参数:旋转向量(3)、平移(3)、焦距(1)、畸变(2)。(144行) [相机#0的9参数] -1.6943983532198115e-02 1.1171804676513932e-02 2.4643508831711991e-03 7.3030995682610689e-01 -2.6490818471043420e-01 -1.7127892627337182e+00 1.4300319432711681e+03 -7.5572758535864072e-08 3.2377569465570913e-14 [相机#1的9参数] 1.5049725341485708e-02 -1.8504564785154357e-01 -2.9278402790141456e-01 -1.0590476152349551e+00 -3.6017862414345798e-02 -1.5720340175803784e+00 1.4321374541298685e+03 -7.3171919892612292e-08 3.1759419019880947e-14 ... =={4/4}路标在空间坐标系的三维坐标 [路标#0的坐标] -1.2055995050700867e+01 1.2838775976205760e+01 -4.1099369264082803e+01 [路标#2的坐标] 6.4168905904672933e+00 3.8897031177598462e-01 -2.3586282709150449e+01 ... [路标#22105的坐标] -3.7719680164031812e+00 1.1022501903417394e+01 -4.7349911639646528e+01
problem-16-22106-pre.txt数据集对应的图优化

运动方程:
观测方程:
SLAM中若以problem-16-22106-pre.txt作为输入,后端优化问题描述:我们有运动方程和观测方程,并且知道了每个时刻的输入,以及每个时刻的观测值
,在知道
、
,如何去最好估计
到
,以及
到
。
待估计变量:。其中
是路标在世界坐标系下坐标,要由它构建点云图。
两个关于SLAM后端的视频
二、中文(机翻)
近来在运动恢复结构(SFM)方法工作已经解释了从大规模社区收集图片重建几何的可能性,BA(Bundle Adjustment),把相机和点参数绑在一起非线性优化是大多数SFM系统中的关键部分,而且解决这问题,须要消耗大量时间。随着此类集合中的照片数量持续增长到数十万甚至数百万,BA算法的可扩展性成为关键问题。
在这个项目中,我们考虑新的不精确牛顿型BA的设计与实现,该算法使用的时间和内存比基于标准Schur消元的方法少的多,而而不影响解决方案的质量。我们使用共额梯度算法来计算牛顿,它的性能作为一些简单和计算有效的预处理器的功能,它而且还表明,Schur消元的使用不仅限于基于因子分解的方法,如何被用作共额梯度方法的一部分,而不会产生实际计算和存储在内存中的计算成本,这种用法相当于特定预处理器的选择。
该研究是华盛顿大学GRAIL实验室社区照片收藏项目的一部分,其中探索了使用大规模互联网图像集合进一步研究计算机视觉和图形。
作为该项目的一部分,我们将发布论文中报告的所有测试问题,软件和性能数据。 目前我们有可供下载的测试问题。 代码很快就会提供。
我们的实验有两个数据的来源:
1、使用安装在移动车辆上的相机以常规速率拍摄的图像。 通过利用图像的时间顺序和在图像捕获时捕获的GPS信息来完成图像匹配。
2、图像从Flickr.com下载并使用一天中构建罗马中描述的系统进行匹配。 我们使用了特拉法加广场以及杜布罗夫尼克,威尼斯和罗马等城市的图片。
相机模型
使用针孔相机模型,为每个相机估计了一些参数:旋转矩阵R,平移矩阵t,焦距f,径向畸变参数K1、K2。将3D点投影到相机中的公式为:
P = R * X + t (conversion from world to camera coordinates)//把世界坐标转换为相机坐标 p = -P / P.z (perspective division)//相机坐标归一化处理 p' = f * r(p) * p (conversion to pixel coordinates)//转换得到像素坐标
其中P.z是P的第三个(z)坐标。在最后一个方程中,r(p) 是计算缩放因子以消除径向畸变的函数:
r(p) = 1.0 + k1 * ||p||^2 + k2 * ||p||^4
这给出了像素投影,其中图像的原点是图像的中心,正x轴指向右,正y轴指向上(此外,在相机坐标系中,正z- 轴向后指向,因此相机正在向下看负z轴,如在OpenGL中那样。
数据格式
<num_cameras> <num_points> <num_observations> <camera_index_1> <point_index_1> <x_1> <y_1> ... <camera_index_num_observations> <point_index_num_observations> <x_num_observations> <y_num_observations> <camera_1> ... <camera_num_cameras> <point_1> ... <point_num_points>