我有一组接近表面的3d点。但是,每个点都会出现一些错误。此外,这组点包含的点数远远多于表示底层表面所需的点数。
我正在寻找的是一种算法来创建一个新的(小得多)点集,表示表面的简化,更平滑的版本(原谅没有比“简化,更平滑”更好的定义)。底层表面不是数学表面,所以我不希望将数据集拟合到某个数学函数中。
答案 0 :(得分:8)
我建议不要将它作为点云处理,而是建议使用Delaunay三角剖分对网格进行三角测量:http://en.wikipedia.org/wiki/Delaunay_triangulation
然后对网格进行抽取。你可以研究抽取算法,但是你可以使用一种算法来获得非常好的快速和肮脏的结果,该算法只合并具有相似法线的相邻tris。
答案 1 :(得分:2)
我认为您正在寻找'详细程度'算法。
要实现的一个简单方法是将您的音量(曲面)分成若干个子卷。从每个子体积中的点,选择一个代表点(例如最接近中心的点,或最接近平均值的点,或平均值等)。使用这些点重绘表面。
您可以调整子卷的数量来动态增加/减少细节。
答案 2 :(得分:2)
我通过寻找对曲面曲率贡献很小的顶点(点)来解决这个问题。找到从每个顶点出现的所有边,并取出它们的对(?)的点积。代表非常浅的“山丘”的点将对向巨大的角度(接近180度)并且具有小的点积。
那些具有最小数字的顶点将成为删除的候选者。然后,它们周围的顶点将形成一个平面。
或类似的东西。
答案 3 :(得分:2)
表面重建用于找到适合点云的网格表面;但是,这种方法产生 lot 的三角形。然后,您可以应用网格缩小技术来减少多边形数量,从而最大限度地减少错误。例如,您可以查看OpenMesh的抽取方法。
答案 4 :(得分:2)
基于点的表面模型简化存在几种不同的技术,包括:
参见调查:
微米。 Pauly,M。Gross和L. P. Kobbelt。有效简化点 - 采样表面。在“可视化会议论文集”中, 第163-170页,华盛顿特区,2002年.IEEE。
答案 5 :(得分:1)
除非你以某种方式对你的表面进行参数化,否则我不确定你如何决定哪些点携带相似的信息(因此可以扔掉)。
我猜你可以随意选择一堆点来摆脱,但这听起来不像你想做的那样。
或许彼此靠近的点(对于'near'的某些定义)可以被认为包含类似的信息,因此减少为每个这样的组的单个代表。
你可以提供更多细节吗?答案 6 :(得分:1)
在没有网格三角形和索引约束的情况下简化点云更简单。
然而,平滑和简化是不同的任务。为了简化云计算,您应首先通过制作您所拥有的噪声类型,频率和方向特性以及比较类型减少的噪声配置文件来消除噪声伪影。好的法线载体是helfpul。这是一个关于使用delauney,voronoi和k最近邻数学的5-6个简化的文档:
http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.10.9640&rep=rep1&type=pdf
2008年以后的版本: http://www.wseas.us/e-library/transactions/research/2008/30-705.pdf
这是最近的c ++版本: https://github.com/tudelft3d/masbcpp/blob/master/src/simplify.cpp