点击公众号“计算机视觉life”关注,置顶星标更快接收消息!
本文编程练习框架及数据获取方法见文末获取方式
菜单栏点击“知识星球”查看「从零开始学习SLAM」一起学习交流

小白:师兄,师兄,你在《从零开始一起学习SLAM | 给点云加个滤网》《从零开始一起学习SLAM | 点云平滑法线估计》中都提到了点云网格化,这个听起来高大上,不过到底是什么意思呢?

师兄:别急,是这样的:你看我们之前处理的都是一个个点,不管是滤波还是平滑,我们都是对一个个离散的空间点进行的处理,虽然你远看能看出物体的轮廓,但是拉近了看是一个个分散的空间点,是吧?

小白:是啊,这样不算是3D模型吧

师兄:嗯,这样的结果分辨率比较低,也没办法进行三维打印,点云网格化就是用点云生成网格,最后得到的是一个连续(相对于前面的离散点)的表面。如果再加上纹理贴图,就能得到和真实物体一样的三维模型了

什么是网格?

小白:师兄,你说了很多次网格,其实我还不知道网格到底是啥?

师兄:哦,忘记说这个最基本的概念了。网格主要用于计算机图形学中,有三角、四角网格等很多种。下面左图就是四角网格,右图是三角网格

不过,计算机图形学中的网格处理绝大部分都是基于三角网格的,三角网格在图形学和三维建模中使用的非常广泛,用来模拟复杂物体的表面,如建筑、车辆、动物等,你看下图中的兔子、球等模型都是基于三角网格的

小白:仔细看了下还真是,为啥一般用三角网格啊?是因为三角形的稳定性吗?(滑稽)

师兄:还真是一个原因。三角形表示网格也叫三角剖分。它有如下几个优点:

1、正如你所说的,稳定性强。

2、三角网格比较简单(主要原因),实际上三角网格是最简单的网格类型之一,可以非常方便并且快速生成,在非结构化网格中最常见。而且相对于一般多边形网格,许多操作对三角网格更容易。

3、有助于恢复模型的表面细节。

小白:原来如此。三角网格在空间中如何表示呢?

师兄:实际应用中出现的三角网格,每个三角形都和其他三角形共享边。所以三角网格需要存储三类信息:

  • 顶点。每个三角形都有三个顶点,各顶点都有可能和其他三角形共享。
  • 边。连接两个顶点的边,每个三角形有三条边。
  • 面。每个三角形对应一个面,我们可以用顶点或边列表表示面。

网格生成算法有什么要求?

小白:那这个点云网格化一般怎么做呢?

师兄:点云网格化一般输入就是点云啦,输出就是三维网格啦,不过输入的点云一般面临几个问题,我们前面也提到过:

1、点云噪声。 每个点云都会带有噪声,噪声有可能和物体表面光学性质、物体深度、传感器性能等都有关系。

2、点云匹配误差。三维重建中需要将不同帧得到的点云估计其在世界坐标系下的位姿,会引入一定的位置误差。

3、点云分布。分布的不均匀性体现在两个方面。一个是每个点云在不同的方向上分布是不均匀的另一个是不同的点云匹配后,不同位置的点云密度是不一样的。

4、缺失数据。 扫描中如果碰到不易成像的部位(比如不可见、反光等等),那么这部分的数据是缺失的,点云是不完整的。

小白:点云有这么多问题,网格化算法肯定要求比较高了?

师兄:是的,想要生成漂亮的网格,除了网格密度和精度外,我们还希望网格生成算法有如下的能力:

1、对点云噪声有一定的冗余度。

2、能够重建出曲率变化比较大的曲面。

3、能够处理大数据量,算法时间和空间复杂度不会太高。

4、重建出的网格中包含尽可能少的异常三角片,比如三角片交错在一起、表面法向量不连续或不一致、同一个位置附近出现多层三角片等。

小白:感觉要求挺高的,那我们一般用什么算法呢?

师兄:目前点云进行网格生成一般分为两大类方法:

1、 插值法。顾名思义,也就是重建的曲面都是通过原始的数据点得到的

2、逼近法。用分片线性曲面或其他曲面来逼近原始数据点,得到的重建曲面是原始点集的一个逼近。

点云贪心三角化原理

师兄:我们主要介绍一种比较简单的贪心三角化法(对应的类名:pcl::GreedyProjectionTriangulation),也就是使用贪心投影三角化算法对有向点云进行三角化。

小白:为啥介绍这个,有啥特点?

师兄:该算法的优点是可以用来处理来自一个或者多个设备扫描到得到、并且有多个连接处的散乱点云。但是也是有很大的局限性,它更适用于采样点云来自表面连续光滑的曲面,并且点云的密度变化比较均匀的情况

小白:这样啊,难怪之前师兄要讲点云滤波和平滑呢,原来都是铺垫啊

师兄:哈哈,是的。

小白:那这个贪心三角化法到底是什么原理呢?

师兄:贪心投影三角化的大致流程是这样的:

(1)先将点云通过法线投影到某一二维坐标平面内

(2)然后对投影得到的点云做平面内的三角化,从而得到各点的拓扑连接关系。平面三角化的过程中用到了基于Delaunay三角剖分 的空间区域增长算法

(3)最后根据平面内投影点的拓扑连接关系确定各原始三维点间的拓扑连接,所得三角网格即为重建得到的曲面模型

Delaunay 三角剖分简介

小白:师兄,这个Delaunay是啥?

师兄:先说说点集的三角剖分(Triangulation)吧,对数值分析以及图形学来说,三角剖分都是极为重要的一项预处理技术。而Delaunay 三角剖分是一种常用的三角剖分的方法,这个方法比较常见,关于点集的很多种几何图都和Delaunay三角剖分相关,如Voronoi图,当然这些很复杂了。我们这里只是简单介绍一下Delaunay 三角剖分,不然估计你要头大了。

小白:师兄,你一连说了几个我从来没听过的术语,我已经头大了。。

师兄:哈哈,那打住,只简单提一下Delaunay 三角剖分。你看下面这个图,左侧就是不满足Delaunay 三角剖分,右侧是Delaunay 三角剖分的结果。

小白:看起来右边的图好像很规则啊

师兄:的确,Delaunay 三角剖分的有两个优点:

1.最大化最小角,“最接近于规则化的“的三角网。

2.唯一性(任意四点不能共圆)。

我们来看一下它的定义,有点拗口:点集

从零开始一起学习SLAM | 点云到网格的进化的更多相关文章

  1. 从零开始一起学习SLAM | 点云平滑法线估计

    点击公众号"计算机视觉life"关注,置顶星标更快接收消息! 本文编程练习框架及数据获取方法见文末获取方式 菜单栏点击"知识星球"查看「从零开始学习SLAM」一 ...

  2. 从零开始一起学习SLAM | 掌握g2o边的代码套路

    点"计算机视觉life"关注,置顶更快接收消息! 小白:师兄,g2o框架<从零开始一起学习SLAM | 理解图优化,一步步带你看懂g2o代码>,以及顶点<从零开始 ...

  3. 从零开始一起学习SLAM | 掌握g2o顶点编程套路

    点"计算机视觉life"关注,置顶更快接收消息! ## 小白:师兄,上一次将的g2o框架<从零开始一起学习SLAM | 理解图优化,一步步带你看懂g2o代码>真的很清晰 ...

  4. 从零开始一起学习SLAM | 用四元数插值来对齐IMU和图像帧

    视觉 Vs. IMU 小白:师兄,好久没见到你了啊,我最近在看IMU(Inertial Measurement Unit,惯性导航单元)相关的东西,正好有问题求助啊 师兄:又遇到啥问题啦? 小白:是这 ...

  5. 从零开始一起学习SLAM | 理解图优化,一步步带你看懂g2o代码

    首发于公众号:计算机视觉life 旗下知识星球「从零开始学习SLAM」 这可能是最清晰讲解g2o代码框架的文章 理解图优化,一步步带你看懂g2o框架 小白:师兄师兄,最近我在看SLAM的优化算法,有种 ...

  6. 从零开始一起学习SLAM | 给点云加个滤网

    对VSLAM和三维重建感兴趣的在计算机视觉life"公众号菜单栏回复"三维视觉"进交流群. 小白:师兄,上次你讲了点云拼接后,我回去费了不少时间研究,终于得到了和你给的参 ...

  7. 从零开始一起学习SLAM | 你好,点云

    本文提纲 先热热身点云是啥你知道点云优缺点吗?点云库PCL:开发者的福音PCL安装指北炒鸡简单的PCL实践留个作业再走先热热身 小白:hi,师兄,好久不见师兄:师妹好,上周单应矩阵作业做了吗?小白:嗯 ...

  8. 从零开始一起学习SLAM | 为什么要学SLAM?

    在<零基础小白,如何入门计算机视觉?>中我提到过,计算机视觉的研究目前主要分为两大方向:基于学习的方法和基于几何的方法.其中基于学习的方法最火的就是深度学习,而基于几何方法最火的就是视觉S ...

  9. 从零开始一起学习SLAM | 神奇的单应矩阵

    小白最近在看文献时总是碰到一个奇怪的词叫“homography matrix”,查看了翻译,一般都称作“单应矩阵”,更迷糊了.正所谓:“每个字都认识,连在一块却不认识”就是小白的内心独白.查了一下书上 ...

随机推荐

  1. [转] vue之computed和watch

    计算属性 computed 侦听器or观察者 watch 一直以来对computed和watch一知半解,用的时候就迷迷糊糊的,今天仔细看了看文档,突然茅塞顿开,原来就是这么简单啊: computed ...

  2. Git一些简单但非常重要并常用的操作命令

    1.将本地与github进行关联配置 生成公钥 ssh-keygen -t rsa -C "jiasheng.mei@hpe.com" 将公钥拷贝到github中 在公钥同文件夹( ...

  3. MIPS(极路由1s[mt7620a])平台OpenWrt路由器系统内的Go应用程序开发

    起因,由于coolpy5核心转换到go语言开发,所以目前超人正在进行相关的技术攻关,在程序编写方面一切都相对顺利.由于coolpy5是一个真正的商业级性能的系统也考滤到coolpy之前的版本已经确定的 ...

  4. net core体系-web应用程序-4asp.net core2.0 项目实战(1)-10项目各种全局帮助类

    本文目录 1.  前沿2.CacheHelper基于Microsoft.Extensions.Caching.Memory封装3.XmlHelper快速操作xml文档4.SerializationHe ...

  5. eclipse打开工作空间(workspace)没有任务反应

    删除workspace下的.metadata文件夹,重新打开Eclipse就OK了.

  6. python移植环境

    如果整理材料的时候或者给别人共享代码的时候,除了使用docker外,也可以使用pip或者conda生成依赖项文件,然后在其他机器上将该依赖项一一安装就可以了. 但是有很多版本的依赖导致使用pip总是安 ...

  7. 【安全性测试】一个简单地绕前端暴XSS漏洞

    在appscan暴出一个关于跨站点脚本编制的漏洞,但是appscan并不能完整地显示该漏洞.于是,工具是否出现误报,需要通过自己手工验证. 然后,我们需要找到目标参数的包并分析是从哪个步骤提交给服务器 ...

  8. 【C语言程序】今天是祖国母亲的生日,特意编写一个小程序,为祖国母亲庆生~

    #include <stdio.h> #define N 80 int main(int argc, char *argv[]) { char a[N]; printf("Hel ...

  9. Tornado-基于正则的路由和动态分页

    概览 这一小节涉及了三部分内容: 1.动态分页设计 2.基本的路由系统以及基于正则的路由 3.模块引擎的继承和导入 4.web项目文件夹和ReuquestHandler的分类 5.跨站脚本攻击 文件结 ...

  10. mobile_基础事件

    DOM0 级事件模型(模拟器不支持) DOM0 级事件绑定 在 移动端有 300ms 的延迟 ontouchstart 手指按下事件 ontouchmove 手指移动事件 pntouchend 手指离 ...