Bundle Adjustment光束平差法概述
http://blog.csdn.net/abcjennifer/article/details/7588865
http://blog.csdn.net/ximenchuixuezijin/article/details/7246663
http://blog.csdn.net/peterli_xue/article/details/7528624
给出从不同视角拍摄的,描述同一个场景的一系列图片,bundle adjustment可以根据所有点在图像中的投影作为标准,同时提炼出描述场景结构的3D点坐标、相对运动参数和相机的光学参数。
通常在每个基于feature的3D场景重建算法中都要用到Bundle Adjustment,作为每个基于特征的多视重建视觉算法的最后一步,它是基于3D结构和视角参数(即相机位置,朝向,固有标定和径向畸变)的优化问题,用来获得最佳的三维结构和运动(如相机矩阵)参数估计。提供初始估计,BA同时精化运动和结构参数,通过最小化观测和预测的图像点之间的投影误差。在假定所获得的图像特征中有一些noise的基础上获得最佳重构效果:如果图像feature error服从标准高斯分布,那么Bundle Adjustment就基于最大似然估计。Bundle
Adjustment的名字由来于每个3D特征和相机光学中心“发射”出的光束,而这些光束可以根据结构和视角参数进行最佳调节。
径向畸变:
BundleAdjustment可以将所观测的图像位置和预测的图像位置点进行最小error的映射(匹配),由很多非线性函数的平方和表示(error)。因此,最小化error由非线性最小二乘法实现,Levenberg-Marquardt由其简单实现性和阻尼策略(这样就能使其从初始假设值很快converge到稳定状态)成为最好的方法。通过迭代observed image和predicted image之间的最小距离,L-M方法在线性系统中通过正态方程解决了该问题。
用下式表示BundleAdjustment的工作过程:
其中假设:
n个3D点在m个view(拍摄场景)中,
向量Xij:imgj上的第i个点projection(坐标)这个是实际点坐标
值vij:如果点i在imgj上有映射,则vij=1; elsevij=0;
每个imgj由向量aj参数化 每个3D点由bi参数化
Q(ai,bj):点i在imgj上的predicted projection 这个是理想点坐标
d(x,y):向量x,y的欧式距离
可见,BundleAdjustment可以容忍特征点的丢失。
这个公式的意义就是最小化n个点在两幅图上投影的误差
光束平差法的最终目的归结为:减少观测图像的点和参考图像(预测图像)的点之间位置投影变换(再投影)误差。这最小化误差算法使用的是最小二乘算法,目前使用最为成功是Levenberg-Marquardt, 它具有易于实现,对大范围的初始估计能够快速收敛的优点。
光束法平差(BA)最小化一般通过Levenberg-Marquardt (LM)算法来辅助完成。然而,由于许多未知的因素作用于最小投影误差,一个通用的LM算法的实现(如MINPACK的 lmder)当应用于BA背景下的定义的最小化问题时,会带来极高的计算代价。
在基本的法方程中不同的三维点和相机参数相互之间影响较小,呈现一种稀疏的块结构(如图)。
一个基于Levenberg-Marquardt(LM)算法的通用稀疏光束法平差Sba利用这种稀疏的特性,使用LM算法的简化的稀疏变量来降低计算的复杂度。Sba是通用的,因为它保证了用户对于相机和三维结构的描述参数的定义的完全控制。因此,它事实上可以支持任何多视重建问题的显示和参数化。比如任意投影相机,部分的或完全标定的相机,由固定的三维点进行外方位元素(即姿态)的估计,精化本征参数,等等。用户要想在这类问题中使用sba,只需要提供合适的程序对这些问题和参数来计算估计的图像投影和他们的函数行列式(Jacobian)。sba包含了检查用户提供的函数行列式的一致性的程序。
Bundle Adjustment光束平差法概述的更多相关文章
- 机器人学 —— 机器人视觉(Bundle Adjustment)
今天完成了机器人视觉的所有课程以及作业,确实是受益匪浅啊! 最后一个话题是Bundle Adjustment. 机器人视觉学中,最顶尖的方法. 1.基于非线性优化的相机位姿估计 之前已经在拟合一篇中, ...
- bundle adjustment原理(1)
那些光束平差的工具,比如SBA.SSBA之类的虽然好,然而例子和教程都不够多且不够详细,让初学者难以上手. 要传入的参数虽然有解释,然而却也不是十分清楚其含义,具体要怎么生成,生成为什么形式. 我在折 ...
- bundle adjustment原理(1)转载
转自菠菜僵尸 http://www.cnblogs.com/shepherd2015/p/5848430.html bundle adjustment原理(1) 那些光束平差的工具,比如SBA.SSB ...
- bundle adjustment 玩具程序
结合 bundle adjustment原理(1) 和 Levenberg-Marquardt 的 MATLAB 代码 两篇博客的成果,调用MATLAB R2016a中 bundleAdjustmen ...
- 数据结构Java实现01----算法概述
[声明] 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/4 ...
- VIO的Bundle Adjustment推导
IMU模型和运动积分 $R_{\tiny{WB}} \left( t +\Delta{t} \right) = R_{\tiny{WB}} \left( t \right) Exp\left( \in ...
- SLAM学习笔记(1)基本概念
SLAM (simultaneous localization and mapping),也称为CML (Concurrent Mapping and Localization), 即时定位与地图构建 ...
- SLAM论文阅读笔记
[1]陈卫东, 张飞. 移动机器人的同步自定位与地图创建研究进展[J]. 控制理论与应用, 2005, 22(3):455-460. [2]Cadena C, Carlone L, Carrillo ...
- Ceres Solver: 高效的非线性优化库(二)实战篇
Ceres Solver: 高效的非线性优化库(二)实战篇 接上篇: Ceres Solver: 高效的非线性优化库(一) 如何求导 Ceres Solver提供了一种自动求导的方案,上一篇我们已经看 ...
随机推荐
- 《TCP/IP具体解释卷2:实现》笔记--UDP:用户数据报协议
用户数据报协议.即UDP,是一个面向数据报的简单运输层协议:进程的每次输出操作仅仅产生一个UDP数据报,从而发送 一个IP数据报. 进程通过创建一个Internet域内的SOCK_DGRAM类型的插口 ...
- .Net——实现IConfigurationSectionHandler接口定义处理程序处理自定义节点
除了使用.net里面提供的内置处理程序来处理我们的自定义节点外,我们还可以通过多种方法,来自己定义处理类处理我们的自定义节点,本文主要介绍通过实现IConfigurationSectionHandle ...
- 九度OJ 1135:字符串排序 (排序)
时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:1559 解决:807 题目描述: 先输入你要输入的字符串的个数.然后换行输入该组字符串.每个字符串以回车结束,每个字符串少于一百个字符. 如 ...
- 区分:AndroidDriver, iOSDriver, AppiumDriver and Remote WebDriver
区分:AndroidDriver, iOSDriver, AppiumDriver and Remote WebDriver 原文地址:https://discuss.appium.io/t/what ...
- DNS常见攻击与防范
DNS常见攻击与防范 转自:http://www.williamlong.info/archives/3813.html 日期:2015-7-10 随着网络的逐步普及,网络安全已成为INTERNET路 ...
- ARM编译器中预定义的宏
arm系列目前支持三大主流的工具链,realview的armcc,iar ewarm的iccarm,gnu的gcc,编译器在编译的时候会预定义一些宏,这些宏在工程中起到不可或缺的作用. 例如 /* d ...
- Linux下配置Objective-C编译环境
Ubuntu环境下Objective-C编译环境配置参考这里. CentOS环境下Objective-C编译环境配置参考这里. 还在继续探索中.
- windows 下python搭建环境
一.python安装 1,首先访问https://www.python.org/downloads/windows/去下载python版本. 2. 选择3.5版本,installer文件类型(因为3. ...
- poj图论解题报告索引
最短路径: poj1125 - Stockbroker Grapevine(多源最短路径,floyd) poj1502 - MPI Maelstrom(单源最短路径,dijkstra,bellman- ...
- Android工程的目录结构
1.最大限度的将不需要出现在Java代码中的文件和代码本身分离开来 2.使用XML标记语言定义UI和数据结构 3.对于工程中的文件存储在工程目录中的那个位置有着严格的规定,在编译过程中Android会 ...