三维重建:SLAM的尺度和方法论问题

2023-05-16

        百度百科的定义。此文引用了其他博客的一些图像,如有侵权,邮件联系删除。作为算法的SLAM,被称为同步相机位姿确定和地图构建。作为一个工程的SLAM,有众多的算法。

        在计算机视觉中, 三维重建是指根据单视图或者多视图的图像重建三维信息的过程. 由于单视频的信息不完全,因此三维重建需要利用经验知识.。而多视图的三维重建(类似人的双目定位)相对比较容易, 其方法是先对摄像机进行标定, 即计算出摄像机的图象坐标系与世界坐标系的关系.然后利用多个二维图象中的信息重建出三维信息。

        预读:三维重建:SLAM的粒度和工程化问题  。三维重建根据时间和场景的尺度不同需要引入不同的框架和优化方法:

 

1. 对于小型物体建模

        小型物体建模可使用相机固定的包围设备,直接得到整个三维CAD模型(甚至可以使用类似于硬件级别的光线分析的方法)。

        此外,使用KinectFusion的经典深度图像获取设备,也可使用此类通用双目相机完成物体重建的方法,同时此方法也适用于小型场景重建。

        框架1 = 几帧单幅深度图像 /+  简单图像拼接(ICP算法族或者简单三角/极线测量/视差算法);

    

                  百科:三维扫描仪

    框架2 = 多帧单幅深度图像 + 相机位姿刚性变换(VO视觉里程算法族)+多个深度图像拼接(ICP+TSDF(Truncated Signed Distance Function)的方法族或者Surfel方法);

    关键元素:VO算法族、ICP算法族TSDF方法或者Surfel方法

    Change:序列图像计算VO、使用ICP方法或者Surfel方法。Kinect方法使用TSDF网格方法,而ElasticFusion使用surfel表面方法。Kinect方法使用ICP获取VO,ElasticFusion可以在VO中断时使用surfel表面重新计算VO。

 

2. 相机移动的小型场景

     2.1. 像素级别:   使用KinectFusion的经典方法,也可使用通用双目相机,完成小型场景像素级别重建。使用框架2.

     2.2. 特征点级别:   特征点级别重建,三维重建问题转化为经典的SLAM问题。引入经典的SLAM的方法——滤波方法 和 对应的地图表示的另一种方式拓扑地图

 

单目相机:

         框架3 = 多帧二维图像 + 特征点检测算法+ 特征点深度计算/相机位姿刚性变换(ICP/PNP算法)+ 滤波方法(EKF等框架(运动模型+观测模型))+ ANN/RANSAC/ICP/......;

    关键元素:特征点检测特征点匹配(ANN近邻方法)PNP算法(三维位姿计算)、滤波方法族、RANSAC算法。

         Change:(1)基于特征点引入特征提取和特征点模式识别方法,分别为特征点检测算法族 和近邻搜索方法族。

                        (2)基于特征点的三维位姿计算,引入PNP算法族。

                        (3)基于滤波框架,线性滤波方法族,用于同时优化相机和特征点刚性变换的误差和协方差方程。

双目相机:

        使用双目相机的优势在于可获得标准的相机基线,得到空间的绝对尺度,并同时可根据固有视差算法得到特征点的深度信息。可以使用三维稀疏重建的方法。

       框架4= 多帧成对三维图像 + 特征点检测算法/视差计算算法(特征点深度计算)+ 相机位姿刚性变换(ICP算法)+ RANSAC/ICP/......;

    关键元素:视差方法(深度计算)、稀疏匹配(RANSAC、ICP方法族)。

        Change:(1)深度计算:使用视差算法 Vs.  PNP算法。

                       (2)位姿刚性变换变换到ICP算法族。

                         注意:深度计算之后,整体框架类似于KinectFusion方法,区别在于点集变得稀疏,因此稠密点匹配算法替换为稀疏点匹配算法(ANN方法族)。

 

3. 相机移动的中型场景

      3.1. 像素级别:  正如上一篇所说的,是一个大型工程问题,不是一个算法和框架可以描述的,需要更多设备和人的配合。大型场景重建一般使用表面模型,再次不再对其进行多加描述。

      3.2. 特征点级别:  

            特征点级别重建,在可得到序列结构的VO之后,经典的SLAM的方法为滤波方法,为基于最大似然框架。而添加闭环检测之后,借鉴SFM思想的平差方法--捆集优化BABundle Adjustment)引入到SLAM中来,因此形成了另一种框架。

          框架5= 多帧二维/三维图像 +特征点检测算法+ 特征点深度计算/相机位姿刚性变换(PNP算法)+BA方法(关键帧平差方法)+ ANN/RANSAC/ICP/......+ 闭环检测(场景匹配/识别方法族);

     关键元素:BA方法(图优化方法等)、闭环检测(点集组合场景检测)。

 

        Change:(1)类似于框架3,位姿和场景同时优化的方法从滤波框架转换到BA框架,引入关键帧平差方法

                        (2)基于BA方法,使用关键帧,形式化为无向图,一般使用图优化方法。常用的基础库为G2O

                        (3)引入闭环检测,需要使用场景匹配方法(基于特征点),经典方法为使用BOW模型

 

4. 相机长期移动的大中型场景

        特征点和目标级别:   大型场景需要构建大型地图,应对长期误差累计而发展的方法闭环检测重要性增加。对此,闭环检测引入目标识别,进而引入基于目标检测的场景识别,更名为语义SLAM。

        语义SLAM:大型场景重建,已走过重复地标记-闭环检测占据更多的分量,场景识别更关注语义分析。

        框架6= 多帧二维/三维图像 + 特征点检测算法+ 特征点深度计算/相机位姿刚性变换(PNP算法)+目标检测(目标检测方法族)+目标识别(目标识别方法族) + BA方法关键帧平差方法)+ ANN/RANSAC/ICP/......+ 闭环检测(基于特征点的闭环检测+基于目标的闭环检测+场景检测);

    关键元素:目标检测(目标特征提取与目标识别)、场景检测标记(基于目标)。

        Change:(1)基于框架5或者进行改进,引入基于目标的特征提取方法(目标提取)族和模式识别方法(目标识别)族。由此根据不同的场景需要使用不同的目标检测的通用方法。由此一大批模式识别方法融入SLAM过程,从简单的ANN,到MSVM,到DNN方法。

                       (2)闭环检测之中增加基于目标的闭环检测,和场景识别。场景检测从BOG模型到基于图的场景识别模型,也可以使用DNN方法中CNN方法。

                       (3)......................................。

        参考文章:场景图像的稀疏表示总结

 

总结:

         三维重建是一个工程问题,发展到三维场景重建,SLAM问题及应对方法相应而生。经典可用的SLAM方法为把SLAM问题转化为滤波方法,是一个真正可用的解决SLAM问题的方法。而后BA方法出现,并随着计算机计算能力的提高,BA方法逐渐应用于SLAM过程。更宽范围的SLAM方法引入目标识别,模式识别的方法(从ANN到MSVM到CNN)引入SLAM,成为语义SLAM,把SLAM发展为“一切问题都可以用模式识别方法来解决”的巨坑。

 

后记:红酒塔问题

        三维重建里面有一个红酒塔问题,即是怎样使用重建算法重建出波光闪闪的透明玻璃杯红酒塔。

        其实,红酒塔问题不应该是一个重建问题,从人的感知角度分析,红酒塔也是不能只是靠双目重建的,而其本质是目标识别。识别红酒塔,然后使用模型匹配进行模型补完,重建整个红酒塔,是一个识别之后alignment的过程。

 

参考:

1. 双目相机-ElasticFusion是三维重建领域效果比较显著的开源库,其作者为Facebook Reality Labs的Thomas Whelan博士。ElasticFusion的github源码主页:https://github.com/mp3guy/ElasticFusion.git。小品文:ElasticFusion解释;

2.双目相机-KinectFusion是微软亚研院开源的一个室内深度场景重建算法,ICRA2011论文:https://www.microsoft.com/en-us/research/wp-content/uploads/2016/02/kinectfusion-uist-comp.pdf; 小品文:深度相机方案对比-KinectFusion的基本原理(尺度)。

3.单目相机-EKF-SLAM方法是经典的稀疏场景重建方法,小品文:SLAM: Inverse Depth Parametrization for Monocular SALM。EKF在GitHub下载。

4.OrbSLAM工程化良好,成为一个流行的稀疏重建框架,并应用到不同的场景中。小品文:ROS:ubuntuKylin17.04-Ros使用OrbSLAM2。GitHub下载OrbSLAM2。

5.SemanticFusion,结合了CNN方法的重建方法,在数据关联时使用CNN方法。ICRA2017论文,SemanticFusion: Dense 3D Semantic Mapping with Convolutional Neural Networks。论文解析:ElasticFusion解析。SemanticFusion开源代码依赖ElasticFusion和Caffe-CNN,使用方法:Ubuntu16使用SemanticFusion

6.VINS-Fusion,视觉惯性单目系统,香港中文大学的开源代码:https://github.com/HKUST-Aerial-Robotics/VINS-Fusion。不依赖ROS的VINS代码:安装使用VINS。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

三维重建:SLAM的尺度和方法论问题 的相关文章

随机推荐

  • SD-WAN加速保障跨国公司数据传输质量

    很多企业开启国际化业务 xff0c 跨国文件传输越来越频繁 xff0c 而且随着业务的开展 xff0c 公司规模的扩张 xff0c 很多企业都在海外设置了分支机构 不得不说 xff0c 随着经济一体化的进程不断加快 xff0c 企业跨国经营
  • 零基础视觉SLAM(一)

    文章目录 SLAM简介什么是SLAM xff1f 传感器VSLAM架构视觉里程计后端优化 SLAM应用自学参考书预备知识 SLAM简介 什么是SLAM xff1f SLAM从本质上来说它要实现的就是通过传感器去实时地估计自身位置及经过的轨迹
  • 关于Proxmox 5.x的国内有效镜像源

    官网的 http download proxmox com 有多慢我就不提了 xff0c 否则大家也不会看到这篇小文 首先需要分清楚Proxmox VE的镜像构成 1 xff09 Debian自身 这个用国内哪个镜像都可以 xff0c al
  • 多线程是否真的有必要?

    一点疑问 相比大家在投简历 面试等等过程中 xff0c 或多或少会遇到这么一个问题 xff1a 熟悉掌握多线程开发 xff1b 谈谈你对多线程的认识 其实 xff0c 我有这么一个疑问 xff0c 那就是多线程真的有必要么 xff1f 根据
  • stm32无法烧录问题分析

    1 开始能烧录 xff0c 烧录程序后就不能烧录了 原因 xff1a 升级接口IO被代码修改应用 xff0c 导致无法烧录 xff0c 解决办法 xff1a 可以让MCU进入升级模式 xff08 拉高boot0 xff0c 然后复位MCU
  • 【Git】msysgit + TortoiseGit:在 windows 上安装配置版本控制工具 Git 图形化使用

    msysgit 43 TortoiseGit xff1a 在 windows 上安装配置版本控制工具 Git 图形化使用 一 安装说明 Git 是 Linux Torvalds 为了帮助管理 Linux 内核开发而开发的一个开放源码的版本控
  • Slickedit使用记录

    Slickedit使用记录 一 快捷键二 问题和解决方法 一 快捷键 已经习惯了android studio 中的快捷键 xff0c 在slickedit上也做下修改Tools gt options gt Keyboard and mous
  • 查看.Net源代码vs版本号

    方法 xff1a 用记事本打开vs项目的 sln文件 第2行就是这个源代码包的开发软件vs版本号了 Microsoft Visual Studio Solution File Format Version 9 00 Visual Studi
  • Docker: GUI 应用,Ubuntu 上如何运行呢?

    操作系统 Ubuntu 18 04运行镜像 continuumio anaconda3 based on debian Step 1 安装 Docker span class token comment update the apt pac
  • 网络爬虫详细设计方案

    目录 网络爬虫设计方案 1 网络爬虫简介 2 Java爬虫的开发和使用流程 2 1 下载 2 2 分析 3 单点登陆与Jsoup解析 3 1 单点登陆简介 3 1 1 登陆 3 1 2 注销 3 2 Jsoup网页解析 4 网络爬虫详细设计
  • 安装 python-dev 的时候,缺少依赖关系

    sudo aptitude install python dev报错 xff1a 下列软件包有未满足的依赖关系 xff1a python dev 依赖 libpython dev 61 2 7 5 5ubuntu3 但是它将不会被安装 依赖
  • maven-replacer-plugin 静态资源打包方案js css

    解决问题 xff1a 防止浏览器缓存 xff0c 修改js css后无效 xff0c 需要强刷 两种解决方案 xff1a 1 不依赖插件 xff0c 纯代码实现 1 1 实现拦截处理器 xff1a ModelAndViewIntercept
  • 简单FTP构建及访问

    使用2台RHEL6虚拟机 xff0c 其中一台作为vsftpd服务器 xff08 192 168 4 5 xff09 另外一台作为测试用的Linux客户机 xff08 192 168 4 205 xff09 在RHEL6系统中 xff0c
  • freertos程序死机原因

    一 开机死机原因 1 一般是某任务栈溢出所致 栈溢出一般有两个原因 xff1a 1 此任务函数的代码量太大 或调用了某个比较大的函数 2 此任务的函数内有比较大的局部变量的数组 调试方法 xff1a 1 先关闭所有任务再逐个打开 xff0c
  • 安装在win10环境下的Jenkins添加本地虚拟机centos7作为从机遇到的问题,报错:SSH Connection failed with IOException: "Key exchange

    首先声明我的Jenkins版本是 xff1a 2 31版 因为不同版本页面有所不一样 安装在win10环境下的Jenkins添加本地虚拟机centos7作为从机遇到的问题 xff0c 报错情况如下 xff1a Searching for 1
  • Linux du命令和df命令区别

    1 xff0c 两者区别 du xff0c disk usage 是通过搜索文件来计算每个文件的大小然后累加 xff0c du能看到的文件只是一些当前存在的 xff0c 没有被删除的 他计算的大小就是当前他认为存在的所有文件大小的累加和 d
  • ML大杂烩:**常见机器学习算法公式梳理

    机器学习方法有一个进阶的过程 xff0c 不同的方法族 xff0c 都有其基础和逐渐进化的模型 每一个更新的模型一般是对上一个简单模型的改进 xff0c 比如SVM就直接改进了近邻方法 xff0c 降低了保留的实例个数 本文有大量修改 xf
  • libuv笔记 (一)Threads

    Threads 线程在现代程序开发中会很常见 xff0c 当然Libuv也不能缺席这一块 xff0c 记得你在使用过程中要非常认真的处理 各种原始的同步问题 线程会在内部使用 xff0c 用来在执行系统调用时伪造异步的假象 libuv通过线
  • SLAM: SLAM基本流程—VSLAM扫盲之旅

    在很多机器人的论文和书籍里面 xff0c 劈头第一页即是 xff0c 经典的SLAM视觉框架是过去十几年前已经成熟的研究结果 xff0c 这个框架和算法本身已经没有太多理论可以操作的空间 封杀了很多人的SLAM科研之路 xff0c 把SLA
  • 三维重建:SLAM的尺度和方法论问题

    百度百科的定义 此文引用了其他博客的一些图像 xff0c 如有侵权 xff0c 邮件联系删除 作为算法的SLAM xff0c 被称为同步相机位姿确定和地图构建 作为一个工程的SLAM xff0c 有众多的算法 在计算机视觉中 三维重建是指根