光束平差(Bundle Adjustment)算法

来源:互联网 发布:淘宝销售宣传标语 编辑:程序博客网 时间:2024/05/14 13:59

    光束平差法(bundle adjustment ,BA)是一种优化问题算法,通过最小化观测图像和预测图像的对应点之间的位置投影误差而同时得到摄像机相关参数(摄像机参数矩阵、标定参数等)和空间结构的最优解。它的名字来源于将空间三维点投影到成像平面过程中,所有三维点与成像面二维点的连线都聚焦于一点:光心。
光束平差法有几个要素:目标函数,数值优化方法(如牛顿法),迭代与更新的方法,质量检验。总的来说,目标函数通常是一系列平方和,然后采用最小二乘法进行优化。
其中Levenberg-Marquardt(LM) 算法是常用的BA算法,其形式如下:

其中:
xij表示第j帧图像(或第j个视场)中的第i个特征点在图像中的二维坐标
vij表示该特征点是否可见,不可见为0,可见为1
aj表示第j帧的摄像机相关参数
bi表示第i个特征点(路标)的三维坐标
Q为将三维点投影到像平面的投影关系
d(x,y)表示x与y间的欧式距离。

对大范围的初始估计,LM也可以很快收敛。由于特征大多不会永远存在所有视场中,特别如SLAM 等移动建图的过程中,一个路标只出现在一小部分图像里,所以联系不同 视场的矩阵是一个稀疏矩阵,因此计算量上使得采用所有信息进行全局优化(global optimization)成为可能。

常用BA库:
sba: A Generic Sparse Bundle Adjustment C/C++

Apero/MicMac, a free open source photogrammetric
software. Cecill-B licence.

Package Based on the Levenberg–Marquardt Algorithm (C, MATLAB). GPL.

cvsba: An OpenCV wrapper for sba library (C++). GPL.

ssba: Simple Sparse Bundle Adjustment package based on the Levenberg–Marquardt Algorithm (C++). LGPL.

OpenCV: Computer Vision library in the contrib module. BSD license.

mcba: Multi-Core Bundle Adjustment (CPU/GPU). GPL3.

libdogleg: General-purpose sparse non-linear least squares solver, based on Powell’s dogleg method. LGPL.

ceres-solver: A Nonlinear Least Squares Minimizer. BSD license.

g2o: General Graph Optimization (C++) - framework with solvers for sparse graph-based non-linear error functions. LGPL.

DGAP: The program DGAP implement the photogrammetric method of bundle adjustment invented by Helmut Schmid and Duane Brown. GPL.

0 0
原创粉丝点击