Monocular slam 中的理论基础(2)

三角法求深度(triangulation)

???在知道了相机的轨迹以后,使用三角法就能计算某个点的深度,在Hartley的《Multiple view Geometry》一书中第10章、第12章都是讲的这个,这里只讲解线性求解方法。

???对于三维空间中的一点 P,我们假设第一个摄像机坐标系C1就是世界坐标系,P在世界坐标系下的表示为P=(x,y,z,1)T,这时,摄像机坐标系C1的外参数矩阵M1为单位矩阵。点P和光心的连线交第一个图像平面于点p1 ,注意这里的p1是在摄像机坐标系的坐标表示,不是在图像坐标系下,这在上一篇博客中已经强调。同理,和第二个摄像机光心连线交第二幅图像于点p2 。 pi在各自摄像机坐标系中的表示为:

p1=???x1y11???c1? 和? p2=???x2y21???c2摄像机坐标系C2的外参数矩阵为M2,由于摄像机坐标系C1就是世界坐标系,所以有在推导本征矩阵E的时候,我们说R是从坐标系C2到坐标系C1的旋转变换矩阵,即12R。t是平移,更确却的说是光心C2在C1中的坐标表示,即 1t2。所以在通过8点法求出的R,T以后,得到的从摄像机坐标2变换到到摄像机坐标系1的变换矩阵为

12H=[R3×30t3×11]而这里的外参数矩阵M2是将世界坐标系中的一点P投影到摄像机坐标系C2。所以M2=21H=12H?1,只需去掉H矩阵的最下面一行齐次坐标就行了。所以,通过本征矩阵得到R,t以后,要计算摄像机坐标系C2外参数矩阵的程序如下:??有了外参矩阵,我们就可以得到这些点坐标的关系:由于光心Ci,三维坐标点P,以及pi三点共线,所以向量Cipi、CiP的叉乘应该为0,上述方程又可以转化为:这又是一个要用最小二乘求解的线性方程方程组 ,和求本征矩阵一样,计算矩阵A的SVD分解,然后奇异值最小的那个奇异向量就是三维坐标P的解。程序如下:??计算出来的P的坐标就是P在世界坐标系中的坐标,这里就是P在摄像机坐标系C1中的表示。并且注意上篇博客中强调过的:p1=K?1???u1v11???、p2=K?1???u2v21???

上篇博客中还提到本征矩阵恢复的R,T组合有四种组合形式,我们需要通过计算点的深度来判断R,T的哪种组合是正确的,和这篇博客结合起来,获得R,T正确组合的流程和代码如下:

??在以上计算P三维坐标的推导过程中,可以看到和本征矩阵E是息息相关的,E和我们的尺度紧密相连,所以计算出来的深度和尺度scale也是直接相关的。同时,根据这种三角法(triangulation )计算的深度,其实是不怎么靠谱的,一般只是拿这个做一个初始值。并且,我们还可以初略的看看深度估计误差和什么有关。

从两幅图中可以看出,两个射线夹角越小,误差协方差越大。所以点到光心连线组成的射线向量在orbslam中是有明确记录的。

??在理顺了这系列流程,有了基本的视觉基础以后,就可以开始向svo,orb_slam,lsd_slam前进了。但是这些算法的深度估计都是用概率模型来更新深度,不用怕,不变应万变,在后续的博客中,我们将一一剖析。最后,再推荐下这本书《Mastering OpenCV with Practical Computer Vision Projects》,里面有一章专门教一步步用opencv写structure from motion的程序,内容实在是牛的飞,赶紧去看看动手自己写写程序吧,祝好。

(转载请注明作者和出处:http://blog.csdn.net/heyijia0327 未经允许请勿用于商业用途)

reference:

博客主要参考了 professor William Hoff 的课件《structure from motion》

时间: 2024-10-08 09:37:27

Monocular slam 中的理论基础(2)的相关文章

论文:ORB-SLAM:a Versatile and accurate Monocular SLAM System

前言 一.介绍 PTAM(parallel tracking and Mapping)系统局限于小尺度场景中,提供简单但是有效的关键帧选择.特征匹配.三角化.重定位技术,但是具有以下缺点:(1)缺少闭环优化:(2)重定位的不稳定性:(3)需要人工初始化地图.ORB-SLAM在PTAM系统基础上构建, ORB-SLAM系统具有以下优点: (1)在追踪.建图.重定位和回环过程中采用同一种特征点-ORB,使得该系统在没有GPU加速下实时运行,并且对光照和视角变化具有良好的鲁棒性. (2)在追踪和建图过

视觉SLAM中的数学基础 第三篇 李群与李代数

视觉SLAM中的数学基础 第三篇 李群与李代数 前言 在SLAM中,除了表达3D旋转与位移之外,我们还要对它们进行估计,因为SLAM整个过程就是在不断地估计机器人的位姿与地图.为了做这件事,需要对变换矩阵进行插值.求导.迭代等操作.例如,在经典ICP问题中,给定了两组3D点,我们要计算它们之间的变换矩阵.假设第一组的3D点为$\mathbf{P}=\{ \mathbf{p}_i | i = [1,2, \ldots, N] \}$,第二组3D点为$\mathbf{Q}=\{ \mathbf{q}

视觉SLAM中的数学基础 第二篇 四元数

视觉SLAM中的数学基础 第二篇 四元数 什么是四元数 相比欧拉角,四元数(Quaternion)则是一种紧凑.易于迭代.又不会出现奇异值的表示方法.它在程序中广为使用,例如ROS和几个著名的SLAM公开数据集.g2o等程序都使用四元数记录机器人的姿态.因此,理解四元数的含义与用法,对学习SLAM来说是必须的.本节我们就来讲讲四元数. 首先,请读者不要对四元数有什么神秘的感觉.四元数仅是3D姿态的一种表达方式,我们用一个单位四元数表达原本用旋转矩阵表示的三维旋转.这样做一个直接的好处是省空间.一

SLAM中的非线性优化

总结一下SLAM中关于非线性优化的知识. 先列出参考: http://jacoxu.com/jacobian%E7%9F%A9%E9%98%B5%E5%92%8Chessian%E7%9F%A9%E9%98%B5/ http://blog.csdn.net/dsbatigol/article/details/12448627 http://www.cnblogs.com/rongyilin/archive/2012/12/21/2827898.html <视觉SLAM十四讲>. 1. 雅克比矩

SLAM中的变换(旋转与位移)表示方法

1.旋转矩阵 注:旋转矩阵标题下涉及到的SLAM均不包含位移. 根据同一点P在不同坐标系下e(e1,e2,e3)e'(e1',e2',e3')的坐标a(a1,a2,a3)a'(a1',a2',a3')有如下等式成立:   即a = eTe'a',其中eTe'设为R为旋转矩阵,即a = Ra',由此便得到P在e'坐标系下到e坐标系下的坐标变换. 在SLAM中一般a'为相机坐标系下坐标Pc,a为世界坐标系下坐标Pw.则有Pw = RPc 其中R = eTe'  →  eR = e' 如果把R分成三个

SLAM中的卡方分布

视觉slam中相邻帧特征点匹配时,动辄上千个特征点,匹配错误的是难免的,而误匹配势必会对位姿精度以及建图精度造成影响,那么如何分辨哪些是误匹配的点对儿呢?如果已知两帧的的单应矩阵,假设单应矩阵是没有误差的,那么两帧中匹配正确的特征点通过单应矩阵是重投影是不应该有误差的或者误差十分小,而误匹配的特征点的重投影误差一定十分显著.那么我们是不是可以设置一个误差门限,从而甄别出这些误匹配点?可是这个误差门限该设置为多少? 假设图像金字塔第n层中一个特征点\(\mathbf{p_c}=\begin{bma

视觉SLAM中李群李代数与四元数总结

在SLAM中经常会用到李群李代数与四元数来表示旋转变换,这些数学公式往往需要推导来推导去,分分钟搞到头都大了.但在SLAM中往往用到其中那么几个固定的性质,所以是没有必要对这些数学基础作过多深入的研究,只需要记住其中一些常用的公式及性质即可.因此,本人在这里对这些数学基础作一个简单的总结,以便日后在工程中使用. 旋转的表示方式 SLAM中,往往会使用三种方式来表达空间中的旋转变换,分别为:旋转向量.旋转矩阵.四元数. 旋转向量 旋转向量可以非常直观地表示空间中的一个旋转变换:假设空间中有一单位向

Monocular slam 的理论基础(1)

前言 ??LSD-SLAM和ORB-SLAM的出现,使得单目slam最近成为了研究热点.单目SLAM一般处理流程包括track和map两部分.所谓的track是用来估计相机的位姿.而map部分就是计算pixel的深度,如果相机的位姿有了,就可以通过三角法(triangulation)确定pixel的深度,把这些计算好深度的pixel放到map里就重建出了三维环境. 主要内容 ??在单目SLAM的学习过程中,需要较多的视觉几何的基础知识.这些基础知识中,有很多会令初学者晕头转向.比如,如何从本征矩

图优化在slam中的应用——柏拉图启示录

南山学长在纸上写下了一个公式: e=z-h(x) 小K:这是什么?南山学长:这是一个蕴含了宇宙的终极奥秘的公式.小K:怎么可能?太离谱了,这只是一个普通的公式!南山学长:那好你用尺子测量一下纸上的这条直线有多长.小K(一脸疑惑的):3.55cm南山学长:你何以如此确信这条直线就是3.55cm,我是说它可能介于3.55和3.56之间,如果你再把图像放大,也许就能精确到小数点后三位.小K(想了想):恩,是这样的,放的越大得到的数据就越精确.南山学长:那么问题来了,这条直线必然存在一个精确的长度,而且