三角法求深度(triangulation)

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

   对于三维空间中的一点 PP,我们假设第一个摄像机坐标系C1C_{1}就是世界坐标系,P在世界坐标系下的表示为P=(x,y,z,1)TP=(x,y,z,1)^T,这时,摄像机坐标系C1C_{1}的外参数矩阵M1M_{1}为单位矩阵。 点PP和光心的连线交第一个图像平面于点p1p_{1} ,注意这里的p1p_{1}是在摄像机坐标系的坐标表示,不是在图像坐标系下,这在上一篇博客中已经强调。同理,和第二个摄像机光心连线交第二幅图像于点p2p_{2} 。 pip_{i}在各自摄像机坐标系中的表示为:
p1=⎛⎝⎜x1y11⎞⎠⎟c1p_{1} =\begin{pmatrix} x_{1}\\ y_{1}\\ 1 \end{pmatrix}_{c_{1}}  和  p2=⎛⎝⎜x2y21⎞⎠⎟c2p_{2} =\begin{pmatrix} x_{2}\\ y_{2}\\ 1 \end{pmatrix}_{c_{2}} 摄像机坐标系C2C_{2}的外参数矩阵为M2M_{2},由于摄像机坐标系C1C_{1}就是世界坐标系,所以有 在推导本征矩阵EE的时候,我们说RR是从坐标系C2C_{2}到坐标系C1C_{1}的旋转变换矩阵,即12R_2^1R。t是平移,更确却的说是光心C2C_{2}在C1C_{1}中的坐标表示,即 1t2^1t_2。所以在通过8点法求出的R,T以后,得到的从摄像机坐标2变换到到摄像机坐标系1的变换矩阵为
12H=[R3×30t3×11]_{2}^{1}H = \begin{bmatrix} R_{3\times3} & t_{3\times1}\\ 0& 1\end{bmatrix} 而这里的外参数矩阵M2M_{2}是将世界坐标系中的一点P投影到摄像机坐标系C2C_{2}。所以M2=21H=12H−1M_2=_{1}^{2}H=_{2}^{1}H^{-1},只需去掉H矩阵的最下面一行齐次坐标就行了。所以,通过本征矩阵得到R,t以后,要计算摄像机坐标系C2C_{2}外参数矩阵的程序如下:   有了外参矩阵,我们就可以得到这些点坐标的关系: 由于光心CiC_{i},三维坐标点P,以及pip_{i}三点共线,所以向量Cipi、CiPC_{i}p_{i}、C_{i}P的叉乘应该为0,上述方程又可以转化为: 这又是一个要用最小二乘求解的线性方程方程组 ,和求本征矩阵一样,计算矩阵A的SVD分解,然后奇异值最小的那个奇异向量就是三维坐标P的解。程序如下:   计算出来的P的坐标就是P在世界坐标系中的坐标,这里就是P在摄像机坐标系C1C_{1}中的表示。并且注意上篇博客中强调过的: p1=K−1⎛⎝⎜u1v11⎞⎠⎟p_1=K^{-1}\begin{pmatrix} u_{1}\\ v_{1}\\ 1 \end{pmatrix}、p2=K−1⎛⎝⎜u2v21⎞⎠⎟p_2=K^{-1}\begin{pmatrix} u_{2}\\ v_{2}\\ 1 \end{pmatrix}
上篇博客中还提到本征矩阵恢复的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》

Monocular slam 中的理论基础(2)相关推荐

  1. 舒尔补在SLAM中的应用

    舒尔补在SLAM中的应用 1.舒尔补的定义 2.舒尔补的由来 3.舒尔补在多元高斯分布中的应用 3.1 多元变量的高斯分布 3.2 边缘概率和条件概率的协方差矩阵 3.3 边缘概率和条件概率的信息矩阵 ...

  2. 视觉SLAM总结——LSD SLAM中关键知识点总结

    视觉SLAM总结--LSD SLAM中关键知识点总结 视觉SLAM总结--LSD SLAM中关键知识点总结 1. LSD SLAM的创新点/关键点是什么? 2. LSD SLAM的整体框架是怎样的? ...

  3. 《论文笔记》Multi-UAV Collaborative Monocular SLAM

    时间:2017 作者: 实现条件:   多agent+一中心服务器.每一个agent自带单目摄像头,中心服务器可与所有agent通信.agent没有任何先验知识.不考虑任何的传输延时所带来的不良影响. ...

  4. 作为SLAM中最常用的闭环检测方法,视觉词袋模型技术详解来了

    摘自:https://mp.weixin.qq.com/s/OZnnuA31tEaVt0vnDOy5hQ 作为SLAM中最常用的闭环检测方法,视觉词袋模型技术详解来了 原创 小翼 飞思实验室 今天 基 ...

  5. Probabilistic Volumetric Fusion for Dense Monocular SLAM

    论文标题:Probabilistic Volumetric Fusion for Dense Monocular SLAM 论文链接:https://arxiv.org/pdf/2210.01276. ...

  6. 【论文翻译】ORB-SLAM: A Versatile and Accurate Monocular SLAM System

    摘要 本文介绍了ORB-SLAM,一种基于特征的单目SLAM系统,该系统可在大小场景和室内外环境中实时运行.该系统对复杂的剧烈运动具有鲁棒性,允许宽基线闭环和重定位,且包含完整的自动初始化.在近年来优 ...

  7. 翻译:ORB-SLAM: a Versatile and Accurate Monocular SLAM System

    本文为ORB-SLAM的翻译,转载自:http://qiqitek.com/blog/?p=102 ORB-SLAM: a Versatile and Accurate Monocular SLAM ...

  8. 深度学习结合SLAM的研究思路/成果整理之(一)使用深度学习方法替换SLAM中的模块

    整理了部分近两年深度学习结合SLAM的一些研究成果(参考知乎帖子https://www.zhihu.com/question/66006923 和泡泡机器人公众号,附上论文链接和已找到的源代码/数据集 ...

  9. Robust Monocular SLAM in Dynamic Environments(浙大章国锋)

    Robust Monocular SLAM in Dynamic Environments Abstract 我们提出了一种新的实时单目SLAM系统,该系统能够在动态环境中鲁棒地工作.与传统方法不同, ...

最新文章

  1. NVIDIA TensorRT高性能深度学习推理
  2. 金蝶K3很有意义的数字3
  3. javaScript 里面的cookies
  4. java c 效率_吐槽一下java的效率。。。比起C差的真的好远。。。
  5. Labview 2017安装教程
  6. JS输出范围内中所有质数
  7. 二分查找——A-B数对(洛谷 P1102)
  8. 单引号、双引号和不加引号区别
  9. gitee怎么仓库间传文件_薄书的Gitee 码云使用教程学习纪录 - 薄书
  10. c语言实验报告模板电子版,C语言实验报告模板.doc
  11. 解决The following packages have unmet dependencies问题!!!
  12. 多益网络二笔两个编程题
  13. LOGO设计辅助图形的人性化设计
  14. 港科夜闻|香港科大商学院举办在线网络研讨会
  15. 大数据采集的几点问题的思考
  16. 四极管:IIC之AVR 24c64读写
  17. 音游手台中--EC11编码器的控制[2]
  18. 基于 Arduino 的智能投石机制作
  19. rust休闲玩家_《Rust》坚持强制限定角色性别 玩家怒喷开发商傻蛋
  20. python3爬取巨潮资讯网的年报数据

热门文章

  1. python numpy中对ndarry按照index(位置下标)增删改查
  2. Linux赋予目录或文件任何人都可以读、写、执行的操作
  3. Mac typora自定义编辑界面的配置
  4. python tqdm自定义更新进度条
  5. Python 简写操作(for、if简写、匿名函数)
  6. idea怎么找到路径下面的js_怎么找到Win7桌面存储路径?怎么把Win7桌面转到D盘?...
  7. 模板三连击:树状数组+线段树+主席树
  8. 超外差和超再生模块有何区别?
  9. DataNode之DirectoryScanner分析
  10. 全志t3linux驱动_全志A20GPIO驱动分析|Android驱动及系统开发交流区|研发交流|雨滴科技技术论坛 - Powered by Discuz!...