15

我有一组近似曲面的 3d 点。然而,每一点都存在一些错误。此外,这组点包含的点比表示底层表面实际需要的点多得多。

我正在寻找的是一种算法来创建一个新的(小得多的)点集,代表一个简化的、更平滑的表面版本(请原谅没有比“简化、更平滑”更好的定义)。底层表面不是数学表面,所以我不希望将数据集拟合到某个数学函数。

4

7 回答 7

8

我建议不要将其作为点云处理,而是使用 Delaunay 三角剖分对网格进行三角剖分:http ://en.wikipedia.org/wiki/Delaunay_triangulation

然后抽取网格。您可以研究抽取算法,但您可以使用仅合并具有相似法线的相邻 tris 的算法获得非常好的快速和肮脏的结果。

于 2010-07-26T19:51:04.963 回答
2

存在几种不同的基于点的表面模型简化技术,包括:

  • 聚类;
  • 粒子模拟;
  • 迭代简化。

请参阅调查:

M. Pauly、M. Gross 和 LP Kobbelt。点采样表面的有效简化。在 Visualization '02 会议记录中,第 163-170 页,华盛顿特区,2002 年。IEEE。

于 2014-12-08T08:20:33.400 回答
2

谷歌为 Hugues Hoppe 和他的“表面重建”工作。

曲面重建用于寻找网格曲面来拟合点云;但是,这种方法会产生很多三角形。然后,您可以应用网格减少技术来减少多边形数量,从而最大限度地减少错误。例如,您可以查看 OpenMesh 的抽取方法。

开放网格

胡格·霍普

于 2010-07-27T14:08:30.337 回答
2

我认为您正在寻找“详细程度”算法。

一个简单的实现是将你的体积(表面)分解成一些子体积。从每个子卷中的点中,选择一个有代表性的点(例如最接近中心的点,或最接近平均值的点,或平均值等)。使用这些点来重绘你的表面。

您可以调整子卷的数量以动态增加/减少细节。

于 2010-07-26T19:48:58.293 回答
2

我会通过寻找对曲面曲率贡献很小的顶点(点)来解决这个问题。找到从每个顶点出现的所有边,并取它们对 (?) 的点积。代表非常浅的“山丘”的点将对向巨大的角度(接近 180 度)并具有小点积。

那些具有最小数字的顶点将成为移除的候选者。然后它们周围的顶点将形成一个平面。

或类似的东西。

于 2010-07-26T19:51:00.800 回答
1

除非您以某种方式对您的表面进行参数化,否则我不确定您如何确定哪些点携带相似的信息(因此可以丢弃)。

我想你可以随机选择一堆点来摆脱,但这听起来不像你想要做的。

也许彼此靠近的点(对于“靠近”的某些定义)可以被认为包含相似的信息,因此可以简化为每个此类组的单个代表。

你能提供更多细节吗?

于 2010-07-26T19:49:02.707 回答
1

在没有网格三角形和索引的约束的情况下简化点云更简单。

平滑和简化是不同的任务。为了简化云,您应该首先通过对您拥有的噪声类型、频率和方向特性进行配置来消除噪声伪影,并进行噪声配置比较类型减少。好的法线向量对此很有帮助。

这是一份关于使用 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

于 2017-02-01T08:05:24.767 回答