点击上方“小白学视觉”,选择加"星标"或“置顶

重磅干货,第一时间送达

小白:师兄,师兄,你在《从零开始一起学习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 三角剖分和Delaunay 三角剖分

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

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

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

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

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

从零开始一起学习SLAM | 点云到网格的进化相关推荐

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

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

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

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

  3. 从零开始一起学习SLAM | 为啥需要李群与李代数?

    点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 很多刚刚接触SLAM的小伙伴在看到李群和李代数这部分的时候,都有点 ...

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

    点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 小白:师兄,上一次将的g2o框架<从零开始一起学习SLAM ...

  5. 从零开始一起学习SLAM | 三维空间刚体的旋转

    点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 刚体,顾名思义,是指本身不会在运动过程中产生形变的物体,如相机的运 ...

  6. 从零开始一起学习SLAM | 不推公式,如何真正理解对极约束?

    点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 自从小白向师兄学习了李群李代数和相机成像模型的基本原理后,感觉书上 ...

  7. 从零开始一起学习SLAM(8)相机成像模型

    文章目录 小孔成像 纷繁复杂的坐标系 针孔相机成像原理 相机畸变   此文发于公众号:计算机视觉life.   原文链接:从零开始一起学习SLAM | 相机成像模型 上一篇文章<从零开始一起学习 ...

  8. 从零开始一起学习SLAM | SLAM有什么用?

    点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 SLAM是 Simultaneous Localization A ...

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

    点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 小白:师兄师兄,最近我在看SLAM的优化算法,有种方法叫" ...

最新文章

  1. 单步调试_keil for arm 调试时无法单步运行及打断点
  2. java arraylist json_java Arraylist转json 对象转json
  3. TensorFlow2020:如何使用Tensorflow.js执行计算机视觉应用程序?
  4. 漫话:如何给女朋友解释什么是缓存穿透、缓存击穿、缓存雪崩?
  5. 基于消息机制的万能框架
  6. 【MySQL】日期函数:仿trunc、当年、当月、当天
  7. C++ CGI Helloword
  8. HTML5外贸实木家具商城网站源码
  9. 轻量必应每日一图接口-前端网站源码 支持上传到又拍云调用
  10. 面向对象的特点,封装性,继承性,多态性!
  11. Toast 使用方法大全
  12. 《流浪地球》内地票房超《红海行动》北美上映11天成绩不俗
  13. Exchange 迁移 Public Folder 公共文件夹
  14. linux-getch函数
  15. 像word手动插入分页符一样实现报表中强制分页(强制分页)
  16. amd cpu 型号大全
  17. Java 11已经不再完全免费,不要陷入Oracle的Java 11陷阱
  18. C++: 情侣最美身高差(团体程序设计天梯赛)
  19. ISMS整体项目进度表
  20. Oracle ora-12733 正则表达式太长 regexp_like(字段名,'||||||||||||||||||')

热门文章

  1. Google、微软、阿里、腾讯、百度这些大公司在GitHub上开源投入排名分析 | CSDN原力计划...
  2. 中科院、百度研究院等联合提出UGAN,生成图片难以溯源
  3. 崛起的Python,真的影响了76万人?
  4. 史上最强最贵Mac Pro诞生,iPadOS和iOS分家!WWDC19全面总结
  5. 00后的AI开发者进阶之道:从入门到鏖战MIT编程大赛 | 人物志
  6. 倒计时1天,2018 AI开发者报名通道即将关闭(附参会提醒)
  7. 4月机器学习热文出炉,这10篇文章你读了吗?
  8. AI大潮来袭,Python将纳入高考?!你怎么看
  9. Java 里的 for (;;) 与 while (true),哪个更快?
  10. 腾讯发布最新开源jdk!