ORB-SLAM (四)Initializer单目初始化
一. 通过对极约束并行计算F和H矩阵初始化
VO初始化目的是为了获得准确的帧间相对位姿,并通过三角化恢复出初始地图点。初始化方法要求适用于不同的场景(特别是平面场景),并且不要进行人为的干涉,例如选取视差大(large parallax)的场景(视差大代表相机移动会带来明显的图像变化,通常距离相机距离越远,距离相机光轴越近,视差越小)。ORB-SLAM中并行计算了适用于平面场景的单应性矩阵H和一般场景下的基础矩阵F,然后通过打分选取合适的。ORB-SLAM的初始化要求是比较高的,只有在确定初始化安全的情况下,才会去初始化。
首先复习一下对极约束
F矩阵适用于3D点不共面的情况,我们以左侧相机为参考系,约定
相机内参K,
空间点坐标P = [X, Y, Z]T; 齐次坐标为[X, Y, Z, 1]T
在Z=1归一化平面上的坐标为xi = [X/Z, Y/Z, 1]T,i=1, 2
图像平面坐标为pi = [u, v],i=1, 2; 齐次坐标为[u, v, 1]
可以推出pi = Kxi
对极约束就是满足:
p2T K-T t^R K-1 p1=0
x2T t^R x1 = 0
其中 E = t^R 称为本质矩阵(Essential Matrix),F = K-T t^R K-1基础矩阵(Fundamental Matrix),根据匹配点的坐标p1, p2可以计算出F矩阵和E矩阵,E矩阵可以通过8点法求解线性方程组得到,然后通过对E矩阵奇异值分解E = UΣVT,注意其中奇异值应该是[σ, σ, 0]的形式,表示图像仅在2维空间中经过了缩放。如果发现获得奇异值不满足,需要将矩阵投影到E所满足的流形上。最后通过U, Σ, V计算出t和R
H矩阵适用于3D点共面的情况
设P点所在平面满足 nTP+d=0
将其结合对极约束p2 = K(RP+t)

可以得到H矩阵与匹配点坐标p1,p2之间的关系,同样可以通过求解线性方程然后分解矩阵的方法来获取t和R
二. 步骤
1. 在金字塔0层上提取特征点,匹配前后两帧,得到像素坐标下的匹配点。
2. 并行计算H矩阵和F矩阵,其中H矩阵使用归一化的DLT(直接线性变换)方法,F矩阵使用8-点法,具体可以参考[1], H矩阵使用8个点,F矩阵使用4个点,迭代次数设定为相同,打分机制也设定平衡。
3. 如果场景接近平面,或者视差较小,可以使用单应性矩阵来解释。通过打分机制选择模型。
4. 利用选择的模型,恢复运动和地图点。分解H矩阵可以恢复出8种姿态,SVD分解E矩阵也可以恢复出4种姿态,通过深度值以及场景的先验信息,一般可以得到唯一满足要求的。但是小视角情况下会出现判断错误的情况出现,因此ORB-SLAM中选择使用这些备选姿态直接三角化出地图点,再通过视角,深度以及重投影误差来判定是否有唯一解,若没有,则放弃,重新回到第一步去初始化。
5. 若初始化成功,则进行GlobalBundleAdjustment
相比于PTAM和LSD-SLAM,ORB在NewCollege的室外平面场景中初始化鲁棒性是比较出色的。
[1] 高翔,视觉SLAM十四讲
ORB-SLAM (四)Initializer单目初始化的更多相关文章
- ORB-SLAM (四)tracking单目初始化
单目初始化以及通过三角化恢复出地图点 单目的初始化有专门的初始化器,只有连续的两帧特征点均>100个才能够成功构建初始化器. ); 若成功获取满足特征点匹配条件的连续两帧,并行计算分解基础矩阵和 ...
- ORBSLAM2单目初始化过程
ORBSLAM2单目初始化过程 转自博客:https://blog.csdn.net/zhubaohua_bupt/article/details/78560966 ORB单目模式的初始化过程可以分为 ...
- ORB-SLAM3 细读单目初始化过程(上)
作者:乔不思 来源:微信公众号|3D视觉工坊(系投稿) 3D视觉精品文章汇总:https://github.com/qxiaofan/awesome-3D-Vision-Papers/ 点击上方&qu ...
- ORB-SLAM2 论文&代码学习 —— 单目初始化
转载请注明出处,谢谢 原创作者:Mingrui 原创链接:https://www.cnblogs.com/MingruiYu/p/12358458.html 本文要点: ORB-SLAM2 单目初始化 ...
- 单目、双目和RGB-D视觉SLAM初始化比较
无论单目.双目还是RGB-D,首先是将从摄像头或者数据集中读入的图像封装成Frame类型对象: 首先都需要将彩色图像处理成灰度图像,继而将图片封装成帧. (1) 单目 mCurrentFrame = ...
- Semantic Monocular SLAM for Highly Dynamic Environments面向高动态环境的语义单目SLAM
一.摘要 当前单目SLAM系统能够实时稳定地在静态环境中运行,但是由于缺乏明显的动态异常处理能力,在动态场景变化与运动中往往会失败.作者为解决高度动态环境中的问题,提出一种语义单目SLAM架构,结合基 ...
- iOS: 聊聊 Designated Initializer(指定初始化函数)
iOS: 聊聊 Designated Initializer(指定初始化函数) 一.iOS的对象创建和初始化 iOS 中对象创建是分两步完成: 分配内存 初始化对象的成员变量 我们最熟悉的创建NSOb ...
- 从零开始一起学习SLAM | 神奇的单应矩阵
小白最近在看文献时总是碰到一个奇怪的词叫“homography matrix”,查看了翻译,一般都称作“单应矩阵”,更迷糊了.正所谓:“每个字都认识,连在一块却不认识”就是小白的内心独白.查了一下书上 ...
- 三角化---深度滤波器---单目稠密重建(高翔slam---十三讲)
一.三角化 [1]三角化得到空间点的三维信息(深度值) (1)三角化的提出 三角化最早由高斯提出,并应用于测量学中.简单来讲就是:在不同的位置观测同一个三维点P(x, y, z),已知在不同位置处观察 ...
随机推荐
- excel 在web导入到数据库的操作方法
这个操作的大致步骤是把本地文件存入到服务器端,然后再读取服务端的文件并且使用NPOI这个第三方的插件去读取文件导入到数据库批量插入需要注意的是,前端需要使用form包裹type=file的文件标签,并 ...
- 郝斌 SqlServer2005 学习笔记
1.0 什么是数据库 狭义:存储数据的仓库. 广义:可以对数据进行存储和管理的软件以及数据本身统称为数据库. 另外一种说法:数据库是由表.关系.操作组成. 2.0 为什么要学习数据库 几乎所有的应用软 ...
- JSON解析问题
版权声明:本文为博主原创文章,未经博主同意不得转载. https://blog.csdn.net/quanqinayng/article/details/25121955 这是data.chatFil ...
- Adobe flash player 因过期而遭到阻止解决办法
最近使用谷歌浏览器时总是提示Adobe flash player 因过期而遭到阻止,这让人很头痛,基本上就是打开一个网页就会弹出一个提示,下面是解决办法. 问题的截图界面: 解决方法:在chrome浏 ...
- Selenium应用代码(读取mysql表数据登录)
1. 封装链接数据库的类: import java.sql.ResultSet; import java.sql.Connection; import java.sql.DriverManager; ...
- CUDA与OpenGL互操作实例
本文要解决的问题是如何实现CUDA和OpenGL的互操作,使得GPU能够将通用计算的运算结果交给OpenGL进行绘制. 本文的应用程序主要包括两个方面: 1. 使用CUDA核函数生成图像数据 ...
- [node.js学习]为node.js写的一个操作mysql的类
不支持一个对象在不同异步中使用,模仿的php框架 speedphp中的model模块 GaryMysql.js var mysql = require('mysql'); var pool = nul ...
- C#中Lambda表达式类型Expression不接受lambda函数
在EF Core中我们经常会用System.Linq.Expressions系统命名空间的Expression<TDelegate>类型来作为EF Core的查询条件,比如: using ...
- etcd部署说明
etcd是一个K/V分布式存储,每个节点都保存完成的一份数据.有点类似redis.但是etcd不是数据库. 1.先说废话.之所以会用etcd,并不是实际项目需要,而是前面自己写的上传的DBCacheS ...
- OC - KVO实现原理
1.KVO简介 KVO是Objective-C对观察者设计模式的一种实现,它提供一种机制,指定一个被观察对象(如A类),当对象中的某个属性发生变化的时候,对象就会接收到通知,并作出相应的处理.在MVC ...