视觉三维重建第一课

news2025/1/16 14:47:50

0. 简介

对于视觉而言,想要获得比较精细的地图信息,这离不开地图的三维重建。三维重建(3D Reconstruction)的定义就是,从一堆二维图像中恢复物体的三维结构,并进行渲染,最终在计算机中进行客观世界的虚拟现实的表达。一般的步骤如下

  1. 输入无序图像 Unstructured Images

  2. 图像对齐(Assoc.),筛选图像,构建场景图(也称为连接图)。

  3. 稀疏重建(Structure from Motion,SFM),生成稀疏的3D点云结构,该步骤的贡献是建立统一的坐标系,确定

了重建物体的尺寸,提供可靠的2D-3D多对一的匹配点对。

  1. 稠密重建(Multiple View Stereo,MVS),生成稠密的3D点云结构,该步骤的贡献生成稠密的点云。

  2. 表面重建(Mesh,Model Fitting),稠密点云转化为网格(mesh)。

  3. 纹理重建(Texture Mapping) ,纹理贴图,即对网格进行纹理坐标映射,进行贴纹理。

  4. 可视化渲染

1. 常用传感器

这种偏向离线的一些高精地图构建,现在很多的视觉感知会依赖Kinect、单目多视角、双目立体视觉等完成建图,或者使用雷达+ 相机的形式完成带有像素信息的三维点云数据的获取。下面是一些常用的三维点云获取方法

  1. 无序图像:事先不知道地点和拍摄时间

  2. Li-dar:激光雷达,准确适用不同规模的场景,车载/机载/无人机雷达,无人驾驶采用激光雷达,效率高,成本高,高效便捷
    ki-nect:微软开发,小巧灵便,实时网格建模,kfusion文章,通过time flight获取周围环境的点云数据,同时得到彩色图+深度图=一帧点云,速度快,精度不高,几十cm-1,2米之间,室内场景合适,算法框架,实时建模,kucation,得到环境的mash(彩色),slam+建模框架,目标跟踪估计相机姿态,符号距离场,涵盖三维重建和slam方向的基本知识

  3. 单目多视角:运动恢复结构得到相机姿态->多视角稠密重建->半稠密点云,需要算法和计算资源,得到工业界利用较多,多视角视频/无序图像对场景建模,匹配要暴力两两匹配,但slam中有序图像不需暴力匹配,前后帧,窗口检测匹配,在回环检测匹配量较大,很难做到实时

  4. 双目立体视觉:标定两个摄像机通过视差,得到三维深度信息图,得到点云。存在很多空洞

2. 常用算法

slam最主要的作用其实是定位建图,而定位这块其实是和SFM的方法比较一致的,虽然slam属于稀疏重建的范畴,它也没有刻意要去重建某个目标,并且要求运行速度很快,通常是在线的,否则在某些场景里面就要出事故,slam要求速度大于精度,所以slam只会在关键帧间做BA,非关键帧都会使用基于filter的方法。而SFM虽然其目的也是为了求解相机姿态,同样也能得到3d的稀疏点,它和slam最大的不同在于它要求精度更高,能做BA的地方通常都会做BA。


当然这部分其实已经基本保持一致了,我们现在也可以用VIO的方法来提取出相对位置。然后下面就是三维重建的思路,它和前面两个算法最大的区别在于它需要恢复深度图出来,至少是关键帧的深度图出来。恢复深度图的通常是立体匹配,如果是rgbd的话能直接从sensor得到。

立体匹配的方法是比较成熟的,主要分为sgm还有patchmatch。个人觉得最主要的区别在于patchmatch能利用前面slam或者sfm解算出来那些稀疏的3d点,然后在全图像平面传播。sgm只能从头开始做匹配。

然后在恢复稠密点云并完成拼接后可以将稠密点云地图建立为octomap,或者构建为TSDF(Truncated Signed Distance Field)—TSDF通过将物体的表面与空间中其他点的距离进行编码来表示物体的形状。八叉树是一种数据结构,用于有效地存储和查询三维空间中的数据。


3. 常用3D地图表示方法

3.1 栅格地图

类似于2D栅格地图,3D地图相对比较占内存。

3.2 八叉树地图

如果某个位置上没有障碍物,那么可以用该位置上的大正方体表示,如果某个位置上是小障碍物,那就把大正方体切分到刚好可以包含这个障碍物的小正方形。这样就可以减少计算量,节约内存。而这刚好是八叉树这种数据结构,寻找障碍物先从最大的正方体开始找,然后再向由这个正方体平均分的八个正方体里去找。

3.3 体素地图

类似于八叉树地图,是由最小的正方体(体素)为单位构成的,每个体素存储一个SDF、颜色和权重。

3.4 TSDF地图

TSDF地图是截断符号距离函数场,这里的体素储存的是投影距离(projective distance),就是沿着传感器射线到已测量的表面的距离。

…详情请参照古月居

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/896650.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【Math】特征值和奇异值辨析

奇异值和特征值都描述了一个矩阵的一些特性,但很多情况下,对于两者之间的区别和联系都不太清楚。 本文就这两者进行解析,并对奇异值的一些简单应用进行探索。 奇异值与特征值的定义 奇异值与特征值都被用于描述矩阵作用于某些向量的标量&am…

智能排水解决方案,设备实时监控+预测分析,真正实现“无人值守”!

什么是矿山排水 随着煤炭开采深度不断增加,地质条件也愈加复杂,井下综采作业会面临越来越高的渗水风险。为确保井下综采作业安全,需要设置大量排水系统,在矿山建设和生产过程中排除进入矿山的地下水和地表水。矿井排水系统是保障…

【C++】C++ 语言对 C 语言的加强 ① ( 实用性增强 - 变量任意位置定义 | register 关键字增强 - 自动进行寄存器优化 )

文章目录 一、实用性增强 - 变量任意位置定义二、register 关键字增强 - 自动进行寄存器优化 一、实用性增强 - 变量任意位置定义 C 语言定义变量位置 : 在 C 语言中 , 函数作用域中使用到的变量 , 必须在 作用域 开始的位置定义 , 一旦开始编写代码逻辑后 , 在逻辑代码行之间 …

【100天精通python】Day39:GUI界面编程_PyQt 从入门到实战(下)_图形绘制和动画效果,数据可视化,刷新交互

目录 专栏导读 6 图形绘制与动画效果 6.1 绘制基本图形、文本和图片 6.2 实现动画效果和过渡效果 7 数据可视化 7.1 使用 Matplotlib绘制图表 7.2 使用PyQtGraph绘制图表 7.3 数据的实时刷新和交互操作 7.3.1 数据的实时刷新 7.3.2 交互操作 7.4 自定义数据可视化…

vue实现穿梭框,ctrl多选,shift多选

效果图 代码 <template><div class"container"><!--左侧--><div><div class"title">{{ titles[0] }}</div><div class"layerContainer"><div v-for"item in leftLayerArray":key"…

Flink之时间语义

Flink之时间语义 简介 Flink中时间语义可以说是最重要的一个概念了,这里就说一下关于时间语义的机制,我们下看一下下面的表格,简单了解一下 时间定义processing time处理时间,也就是现实世界的时间,或者说代码执行时,服务器的时间event time事件时间,就是事件数据中所带的时…

LSTM模型

目录 LSTM模型 LSTM结构图 LSTM的核心思想 细胞状态 遗忘门 输入门 输出门 RNN模型 LRNN LSTM模型 什么是LSTM模型 LSTM (Long Short-Term Memory)也称长短时记忆结构,它是传统RNN的变体,与经典RNN相比能够有效捕捉长序列之间的语义关联,缓解梯度消失或爆炸现象.同时LS…

iOS自定义下拉刷新控件

自定义下拉刷新控件 概述 用了很多的别人的下拉刷新控件&#xff0c;想写一个玩玩&#xff0c;自定义一个在使用的时候也会比较有意思。使应用更加的灵动一些&#xff0c;毕竟谁不喜欢各种动画恰到好处的应用呢。 使用方式如下&#xff1a; tableview.refreshControl XRef…

【CTF-web】buuctf-[CISCN2019 华北赛区 Day2 Web1]Hack World(sql盲注)

题目链接 根据上图可知&#xff0c;页面中已经告诉我们要从flag表中的flag列取出flag&#xff0c;思考是sql注入。经过抓包发现发post包中的id字段是注入点。 经测试当输入id1时&#xff0c;结果为Hello, glzjin wants a girlfriend.&#xff0c;当id2时&#xff0c;结果为Do y…

Azure共享映像库构建VM镜像

什么是Azure共享映像库 Azure共享映像库是一项在Microsoft Azure中以共享方式存储和管理映像的服务。映像是预配置的虚拟机操作系统和应用程序的快照&#xff0c;可以用来创建多个虚拟机实例。通过将映像存储在共享映像库中&#xff0c;用户可以轻松地共享映像给其他Azure订阅…

MES管理系统如何帮助制造企业打造透明化工厂

在制造型企业的运营中&#xff0c;车间现场管理至关重要。然而&#xff0c;面临着信息传递速度慢、跨部门协作困难、生产进度无法及时掌握、制造品质不良、设备故障不能及时处理等困境&#xff0c;企业需要寻求有效的解决方案。MES生产管理系统作为针对制造企业车间生产过程控制…

REC 系列 Visual Grounding with Transformers 论文阅读笔记

REC 系列 Visual Grounding with Transformers 论文阅读笔记 一、Abstract二、引言三、相关工作3.1 视觉定位3.2 视觉 Transformer 四、方法4.1 基础的视觉和文本编码器4.2 定位编码器自注意力的文本分支文本引导自注意力的视觉分支 4.3 定位解码器定位 query 自注意力编码器-解…

教你手机摄影要知道的技巧

手机摄影已经成为人们记录生活、分享瞬间的重要方式之一。随着手机摄像头技术的不断提升&#xff0c;我们每个人都有机会成为优秀的手机摄影师。然而&#xff0c;要想在手机摄影领域脱颖而出&#xff0c;掌握一些关键的技巧是必不可少的。 1. 了解你的手机摄像头&#xff1a; …

使用percona-xtrabackup备份MySQL数据

xtrabackup备份分为两种 本文参考链接1 本文参考链接2 全量备份 1.备份数据 要创建备份&#xff0c;请xtrabackup使用xtrabackup --backup option. 您还需要指定一个xtrabackup --target-dir选项&#xff0c;即备份的存储位置&#xff0c;如果InnoDB数据或日志文件未存储在同…

Electron入门,项目启动。

electron 简单介绍&#xff1a; 实现&#xff1a;HTML/CSS/JS桌面程序&#xff0c;搭建跨平台桌面应用。 electron 官方文档&#xff1a; [https://electronjs.org/docs] 本文是基于以下2篇文章且自行实践过的&#xff0c;可行性真实有效。 文章1&#xff1a; https://www.cnbl…

Tomcat 为什么要破坏 Java 双亲委派机制?

大家好&#xff0c;我是锋哥!&#xff01; 我们分为4个部分来探讨: 什么是类加载机制&#xff1f;什么是双亲委任模型&#xff1f;如何破坏双亲委任模型&#xff1f;Tomcat 的类加载器是怎么设计的&#xff1f; 我想&#xff0c;在研究tomcat 类加载之前&#xff0c;我们复习…

java+springboot+mysql银行管理系统

项目介绍&#xff1a; 使用javaspringbootmysql开发的银行管理系统&#xff0c;系统包含超级管理员、管理员、客户角色&#xff0c;功能如下&#xff1a; 超级管理员&#xff1a;管理员管理&#xff1b;客户管理&#xff1b;卡号管理&#xff08;存款、取款、转账&#xff09…

自动化安装系统(三)

Cobbler 简介 Cobbler是一款Linux生态的自动化运维工具&#xff0c;基于Python2开发&#xff0c;用于自动化批量部署安装操作系 统&#xff1b;其提供基于CLI的管理方式和WEB配置界面&#xff0c;其中WEB配置界面是基于Python2和Django框架开发。另外&#xff0c;cobbler还提…

Go语言基础之运算符

运算符用于在程序运行时执行数学或逻辑运算。 运算符 Go 语言内置的运算符有&#xff1a; 算术运算符关系运算符逻辑运算符位运算符赋值运算符

【Java】Spring——Bean对象的作用域和生命周期

文章目录 前言一、引出Bean对象的作用域1.普通变量的作用域2.Bean对象的作用域 二、Bean对象的作用域1.Bean对象的6种作用域2.设置Bean对象的作用域 三、Bean对象的生命周期总结 前言 本人是一个普通程序猿!分享一点自己的见解,如果有错误的地方欢迎各位大佬莅临指导,如果你也…