ORB-SLAM简介(三)之地图初始化

单目SLAM地图初始化的目标是构建初始的三维点云。由于不能仅仅从单帧得到深度信息,因此需要从图像序列中选取两帧以上的图像,估计摄像机姿态并重建出三维点云。

地图初始化的一种方法为追踪一个已知物体。单帧图像的每一个点都对应于空间的一条射线。通过不同角度不同位置扫描同一个物体,期望能够将三维点的不确定性缩小到可接受的范围。

另一种方法基于假设空间存在一个平面物体,选取两帧不同位置的图像,通过计算Homography或者Essential matrix来估计位姿。这类方法在视差较小或者平面上的点靠近某个主点时效果不好。

第三种方法是根据两帧之间的特征点匹配计算Fundamental matrix,进一步估计位姿。这种方法要求存在不共面的特征点。

ORB-SLAM的作者提出了一种基于统计的模型选择方法。该方法优先选择第三种方法,并期望在场景退化情形下自动选择第二种方法。如果选取的两帧不满足要求,放弃这两帧并重新初始化。

第一步:提取特征点并匹配,若匹配点足够多,尝试第二步。

第二步:利用匹配的特征点分别计算方法二和方法三。在每步迭代中,根据symmetric transfer errors分别计算两个模型的得分。如果模型内点数不够多,则放弃该模型。

第三步:根据一定的准则选择模型。

第四步:根据选择的模型计算位姿。

第五步:Full bundle adjustment。

由于ORB-SLAM对初始化的要求较高,因此初始化时可以选择一个特征丰富的场景,移动摄像机给它提供足够的视差。另外,由于坐标系会附着在初始化成功的那帧图像的位置,因此每次初始化不能保证在同一个位置。

时间: 2024-08-09 06:35:35

ORB-SLAM简介(三)之地图初始化的相关文章

android 百度地图系列之地图初始化及定位

在Android应用中,很多时候需要地图功能,回顾过去写的项目和百度地图api,开始总结一下Android百度地图的实现.首先总结一下怎么开始一个Android百度地图功能. 当使用百度地图的时候,提到一个appkey."在使用百度地图SDK为您提供的各种LBS能力之前,您需要获取百度地图移动版的开发密钥,该密钥与您的百度账户相关联.因此,您必须先有百度帐户,才能获得开发密钥.并且,该密钥与您创建的过程名称有关.Key地址为:http://lbsyun.baidu.com/apiconsole/

位置与地图(三)给地图添加覆盖层

- (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the view. self.mapView = [[MKMapView alloc] initWithFrame:self.view.bounds]; self.mapView.mapType = MKMapTypeStandard; self.mapView.scrollEnabled = YES; // 设置地图不可旋转 s

百度地图初始化时设置地图的状态(转)

//初始化地图     MapView mMapView = (MapView) findViewById(R.id.map); BaiduMap mBaidumap = mMapView.getMap(); //设定中心点坐标 LatLng cenpt = new LatLng(29.806651,121.606983);          //定义地图状态         MapStatus mMapStatus = new MapStatus.Builder()         .targ

视觉SLAM漫谈 (三): 研究点介绍

1. 前言 读者朋友们大家好!(很久很久)之前,我们为大家介绍了SLAM的基本概念和方法.相信大家对SLAM,应该有了基本的认识.在忙完一堆写论文.博士开题的事情之后,我准备回来继续填坑:为大家介绍SLAM研究的方方面面.如果前两篇文章算是"初识",接下来几篇就是"渐入佳境"了.在第三篇中,我们要谈谈SLAM中的各个研究点,为研究生们(应该是博客的多数读者吧)作一个提纲挈领的摘要.然后,我们再就各个小问题,讲讲经典的算法与分类.我有耐心讲,你是否有耐心听呢? 在&l

GameMap地图初始化

init_map(res_path) 1.初始化mapbase的基本信息 pos2d screen_area = {1000, 600}; //普通屏幕大小 m_spBase->init(screen_area.x / 3, screen_area.y / 3 , //屏幕划分成3*3格子 header.map_size_item.base_size.x, header.map_size_item.base_size.y ); //map格子单位大小 初始化了mapbase里面的map格子的大小

Android开发笔记(一百零三)地图与定位SDK

集成地图SDK 国内常用的地图SDK就是百度和高德了,二者的用法大同小异,可按照官网上的开发指南一步步来.下面是我在集成地图SDK时遇到的问题说明: 1.点击基本地图功能选项,不能打开地图,弹出"key验证出错!请在AndroidManifest.xml文件中检查key设置的"的红色字提示.查看日志提示"galaxy lib host missing meta-data,make sure you know the right way to integrate galaxy&

Nouveau源码分析(三):NVIDIA设备初始化之nouveau_drm_probe

Nouveau源码分析(三) 向DRM注册了Nouveau驱动之后,内核中的PCI模块就会扫描所有没有对应驱动的设备,然后和nouveau_drm_pci_table对照. 对于匹配的设备,PCI模块就调用对应的probe函数,也就是nouveau_drm_probe. // /drivers/gpu/drm/nouveau/nouveau_drm.c 281 static int nouveau_drm_probe(struct pci_dev *pdev, 282 const struct

【大数据技术干货】阿里云伏羲(fuxi)调度器FuxiMaster功能简介(三) 针对在线服务的资源强稳定

免费开通大数据服务:https://www.aliyun.com/product/odps 转载自xingbao 各位好,这是介绍阿里云伏羲(fuxi)调度器系列文章的第三篇,今天主要介绍针对在线服务的资源强稳定 一.FuxiMaster简介 FuxiMaster和Yarn非常相似,定位于分布式系统中资源管理与分配的角色:一个典型的资源分配流程图如下所示: 作为调度器,目前FuxiMaster支持的功能主要有: 1.多租户管理 2.支持FIFO/FAIR调度策略 3.针对在线服务保持资源强稳定(

Android百度地图SDK 导航初始化和地图初始化引起的冲突

如题,同样是百度地图SDK开发过程中遇到的一个问题,交代下背景: 开发了一款内嵌百度地图的应用,因此里面差不多将目前百度地图SDK开放的主要功能都用到了,定位,地图显示,覆盖物标示,POI搜索,行程路线规划,GPS导航..等等都有.开发最开始用到的SDK版本因为是整合版本,因此各个功能部分的SDK都不确保是最新的,也就没有遇到诸如论坛上的好多仁兄遇到的将分别下载的几个单独的SDK包集成到一个应用中引发的冲突的问题,毕竟之前用的整合包导航SDK还是1.1的定位SDK还是5.3的地图SDK则用的是3