网格生成算法学习笔记
本博客内容来源于网络以及其他书籍,结合自己学习的心得进行重编辑,因为看了很多文章不便一一标注引用,如图片文字等侵权,请告知删除。
前言
我的文章确实有点没头没脑,完全取决于我自己的工作重点,O(∩_∩)O哈哈~。在前面写完网格简化后,目的是应用到大场景模型下,几万平米的室外,但是却发现之前用单纯的Poisson重建,效果有点差了,所以又把这部分再整理一下。
网格生成
在三维重建中,通过深度传感器比如RGBD相机、雷达的方式,或者通过多张2D图片MVG的方式,都可以采集到大量稠密的点云数据。对于一个几百平面的屋子,生成的点云可能就有几百万以至几千万个点,对于数据传输以及显示有比较大的困难,而且显示效果也比较差。那么面对这种情况,我们将点云的存储显示方法,改为网格的方法,则有很大的优势:
- 使用三角面更少点来显示更大的面积,减少了存储空间。
- 生成的网格模型,杂乱的错误点减少。
- 点的数目的减少,大大的减轻了渲染的压力。
- 视觉效果更好,可以对三角面上贴上更加精细的纹理。
- 便于测量等人工操作。
当然在一方面有优势的事情下,其也有一点的劣势,而这个劣势也正式网格生成中的难点。
网格生成中的难点
网格生成过程中有很多的难点,这些难点也是衡量网格生成算法的标准:
- 生成网格与原始点云的位置的差异性
- 能够支持模型网格面积的大小
- 网格生成速度
- 对尖锐特征的保留效果,以及细节的保留效果
- 网格三角面大小以及形状
- 对点云噪声的亢余度、点云分布不同密度的适应效果以及应对点云缺失的效果
常见的网格生成算法
在我们对网格生成有了一定的了解之后,我们来简单的介绍一下,常见的网格生成算法。
总的先说,目前网格生成算法可以分为两大类:连续曲面生成算法 和 非连续曲面生成算法(离散方法)
连续方法利用点云去拟合某类分布函数,得到表面的函数表示,然后生成网格。
比如:TSDF、Wavelet(多用于医学图像)、Poisson、FSSR、SSD、GDMR、多级流式表面重建
、marching cubes(严格说这并不是一个面生成算法,而是一个等值面提取算法)等
离散方法利用某些空间划分方法,直接从点云数据生成网格。
比如:PowerCrust、Greedy Projection、滚球法、alpha-shapes
在此,只是简单的列举出来这些方法,详细描述篇幅很大,所以会在后续的文章中,逐一详细的描述一些常见的效果好的网格生成算法。
总结
点云三角化,或者说从点云生成网格的过程有诸多因素的影响,往往要求我们在最后的结果中取到折中。对于特定的场景数据的处理选择特定的方法,会有着还不错的效果,要是处理多种场景目前还说还是有很大的困难的,想要通过一组参数获得比较好的结果目前来说还是做不到的。鱼与熊掌不可兼得。
希望在写下面文章的过程中,结合工作,能够找到更好的方法,加油!!!
重要的事情说三遍:
如果您看到我的文章对您有所帮助,那就点个赞呗 ( * ^ __ ^ * )
如果您看到我的文章对您有所帮助,那就点个赞呗( * ^ __ ^ * )
如果您看到我的文章对您有所帮助,那就点个赞呗( * ^ __ ^ * )
任何人或团体、机构全部转载或者部分转载、摘录,请保留本博客链接或标注来源。博客地址:开飞机的乔巴
作者简介:开飞机的乔巴(WeChat:zhangzheng-thu),现主要从事机器人抓取视觉系统以及三维重建等3D视觉相关方面,另外对slam以及深度学习技术也颇感兴趣,欢迎加我微信或留言交流相关工作。