关于sba(sparse bundle adjustment)的30个常见问题

sba FAQ

Q1 -- 什么是sba

sba是一个C/C++软件包对广义稀疏光束平差,在GNU公共许可证下分发。sba是通用的,提供关于定义涉及光束法平差的图像投影的参数选择和函数关系增强的灵活性。

Q2 -- 什么是光束法平差?

假设给定一系列图像中观测到的一组对应点集相应的三维坐标的初始估计,以及关于每张图像的viewing参数的初始估计。光束法平差(BA)是一个大的最优化的问题,包括同时精化三维结构和viewing参数(即相机姿态和可能的本征校准和径向畸变),为了获得一个在特定的假设下最优化的重建,考虑与观测的图像特征有关的噪声:如果图像误差满足均值为零的正态分布,那么BA是最大似然法估计。它的名字“bundles(光束)源于每个三维特征聚焦于每个相机的光学中心,这些光学中心相对于结构和viewing参数进行最优化的调整。sba使用Levenberg-Marquardt非线性最小二乘算法的常规实现来解决与BA相联系的稀疏的大规模的优化问题。

Q3 -- “稀疏”是什么意思?

由于不同的三维点和相机之间没有相互影响,BA过程中必须解决的线性系统(即法方程)包含许多零并且形成了一个稀疏的块结构特征。这种结构可以通过避免存储和处理零元素来利用,从而获得可观的计算效益。

Q4 -- 为什么通用的优化代码不能用于实现BA

BA涉及大规模最小化问题的解决,一般涉及上千个变量。优化算法通过迭代的进行函数的线性化,在当前估计的周围进行最小化并且获得线性系统(它的解确定了当前估计的一个增量)。大多数优化代码(如,minpack, nl2sol/n2g )假设这些线性系统是稠密的,即包含很多非零元素。已知的几个这种系统的计算复杂度是On**3)。调用BA涉及到大规模最小化问题的解(一般涉及上千个变量),所以很明显大多数通用的优化代码在应用BA时会引起运行效率降低和存储容量增大。

Q5 -- 在哪里可以找到更多的关于光束法平差的信息?

关于BA的在基于视觉的重建中的应用的一个优秀的综述:Triggs 等人的Bundle Adjustment: A Modern Synthesis。更简短的说明,可参考 bundle adjustment article in Wikipedia

Q6 -- 在哪里可以找到更多关于Levenberg-Marquardt算法的信息?

参考讲稿Methods for Non-Linear Least Squares Problems, by K. Madsen, H.B. Nielsen and O. Tingleff, Technical University of Denmark, 2004.

Q7 -- sba支持哪些类型的光束法平差?

Sba 给它的用户对于描述相机和三维结构的参数定义的完全的控制。因此,它可以支持不同的多视重建问题的实例,如投影重建,几何重建,本征相机参数精化,等等。Sba也提供了程序处理前方交会和后方交会问题,其中相机姿态和场景结构分别保持不变。

Q8 -- 谁在使用sba

Sba对于计算机视觉、机器人、基于图像的图形学、摄影测量、测量、制图等领域的研究者和从业者是无价的。它已经在全球许多实验室中使用,并且也是世界范围内以源代码方式提供的GNU GPL许可证而且授权商用的软件。如果你想要知道更多关于sba的用途方面的信息,以下是我们列出的使用了sba的论文列表here

Q9 -- 使用sba时我需要什么?

为了能够使用所有的sba函数,必须安装LAPACK或者等价的库,检查http://www.netlib.org/clapackf2c'ed的免费版本。据报告上述站点上的预编译的MSWin库损坏了,需要使用工程文件重新构建。你也可以尝试这些预编译的MSWin LAPACK/BLAS 库。

Q10 -- 我怎么样编译sba

首先,你必须保证在本地安装了LAPACK。如果你必须安装它,请遵循以下安装说明包括LAPACK的分发。第二步是编译sba本身。tar压缩包包含Unix/Linux下使用gccmakefile文件以及MSWin下使用Visual StudioMakefile.vc。请阅读这些文件中的注释以获得更多信息。基于提供的makefile文件,它可以使用任何符合ANSI的编译器来直接编译。

Q11 -- 为什么我得到一个未确定的外部符号dgesdd的链接错误?

可能是因为你的LAPACK是旧的版本。DgesddLAPACK3.0中引入。如果你不想升级,你可以选择使用稍微慢一点的dgesvdSba_lapack.c对于注释中的dgesvd有类似的调用。

Q12 -- 不同的事物参数在哪里有详细的解释?

参考 ICS/FORTH TR-340: The Design and Implementation of a Generic Sparse Bundle Adjustment Software Package Based on the Levenberg-Marquardt Algorithm, by M.I.A. Lourakis and A.A. Argyros, 2004. 源代码中也包含了每个函数的每个参数的注释。

Q13 -- 怎样把sba改编为我自己的BA变体?

如上所述,sba在选择描述相机、三维结构和图像投影的函数关系和参数时非常灵活。因此,它可以支持许多种类的BA,包括任意投影或者仿射相机,部分地活着完全的本征标定相机,外方位元素(即姿态)估计,从特定的三维点、本征标定图像的三维重建,本征标定参数的精化,等等。为了把sba改编为一个特定的问题,用户必须对相机和三维结构选择一个合适的参数化方法,然后提供相应的投影函数以及它的函数行列式的实现代码。包括sba的演示程序更详细的阐述了处理几何BA问题的细节。

Q14 -- 如何计算sba重建的初始点?

由于BA涉及一个迭代最小化问题的解,不同参数的初始估计应该提供给sba。这种估计定义了一个初始的三维重建并且可以使用任何结构或者运动估计视觉算法来计算,如 Hartley and Zisserman's 的书里面描述的方法。

你可能感兴趣的:(算法)