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),已知在不同位置处观察 ...
随机推荐
- VS2013没有安装部署,安装图解
自vs2012后就已经没有安装向导了,VS2013安装是不带安装部署的,用 InstallShield Limited Edition for Visual Studio 解决安装部署问题 第一步:“ ...
- CF#538(div 2) C. Trailing Loves (or L'oeufs?) 【经典数论 n!的素因子分解】
任意门:http://codeforces.com/contest/1114/problem/C C. Trailing Loves (or L'oeufs?) time limit per test ...
- 持续集成之Jenkins+Gitlab实现持续集成
项目使用git+jenkins实现持续集成 开始构建 General 源码管理 我们安装的是Git插件,还可以安装svn插件 我们将git路径存在这里还需要权限认证,否则会出现error 我们 ...
- java 编写小工具 尝试 学习(五)
1.今天 学习 标签 的 控件 的使用 ,学习 视频教程 参考 :http://edu.51cto.com/lesson/id-17733.html 常用控件如下截图: import javax.s ...
- 提示AttributeError: 'module' object has no attribute 'HTTPSHandler'解决方法
今天在新机器上安装sqlmap,运行提示AttributeError: 'module' object has no attribute 'HTTPSHandler' 网上找了找资料,发现一篇文章ht ...
- JQuery给一个元素绑定两次点击事件(第二次点击事件)
由于项目的要求,需要给复选框设置样式,初始样式:,第一次点击的时候显示,第二次点击时候需要改变该样式:. 设计思路: 当点击次数为奇数时显示带有颜色的图片 当点击次数为偶数时显示没有颜色的图片 下边是 ...
- String的非空判断、Integer的非空判断、list的大小判断,对象的非空判断
1.String的非空判断. StringUtils.isNotEmpty(String str); 2.Integer的非空判断. null != Integer ; 3.list的大小判断. li ...
- MongoTemplate复合条件查询
分. 排序.按时间查询 Query query = new Query(); //必须条件 Criteria c = Criteria.where("VINID& ...
- 360极速浏览器用ie8模式打开网页(360浏览器同理)
在访问年代久远的的网页时经常会遇到兼容性的问题,用360浏览器(或360极速浏览器)中通过设置可解决. 在360极速浏览器中分别依次选择:选项->高级设置->内核模式->内核切换设置 ...
- CGAffineTransform 视频旋转(转)
记录下视频旋转 ////////////////////////////////////////////// - (void)test:(NSURL *)url transformUrl:(NSURL ...