Algorithm 三维曲面简化算法?

Algorithm 三维曲面简化算法?,algorithm,surface,math,Algorithm,Surface,Math,我有一组近似曲面的3d点。然而,每一点都会有一些错误。此外,点集包含的点比表示下垫面实际需要的点多得多 我正在寻找的是一种算法,用于创建一组新的(更小的)点,表示简化的、更平滑的曲面(请原谅,没有比“简化的、更平滑的”更好的定义)。下垫面不是一个数学面,因此我不希望将数据集拟合到某个数学函数。我认为您正在寻找“细节层次”算法 一个简单的实现方法是将卷(曲面)分解为若干个子卷。从每个子体积中的点中,选择一个代表点(例如最靠近中心的点,或最接近平均值的点,或平均值等)。使用这些点重新绘制曲面 您可以

我有一组近似曲面的3d点。然而,每一点都会有一些错误。此外,点集包含的点比表示下垫面实际需要的点多得多


我正在寻找的是一种算法,用于创建一组新的(更小的)点,表示简化的、更平滑的曲面(请原谅,没有比“简化的、更平滑的”更好的定义)。下垫面不是一个数学面,因此我不希望将数据集拟合到某个数学函数。

我认为您正在寻找“细节层次”算法

一个简单的实现方法是将卷(曲面)分解为若干个子卷。从每个子体积中的点中,选择一个代表点(例如最靠近中心的点,或最接近平均值的点,或平均值等)。使用这些点重新绘制曲面


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

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

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

可能相互靠近的点(对于“近”的某些定义)可以被视为包含类似的信息,并因此减少为每个此类组的单个代表


你能提供更多细节吗?

我会通过寻找对曲面曲率影响不大的顶点(点)来实现这一点。找到每个顶点的所有边,并取它们对(?)的点积。代表非常浅的“山丘”的点将对向巨大的角度(接近180度),并具有小的点积

然后,具有最小数量的顶点将成为删除的候选顶点。然后,它们周围的顶点将形成一个平面


或者类似的东西。

我建议使用Delaunay三角剖分对网格进行三角剖分,而不是将其作为点云处理:


然后彻底摧毁网格。你可以研究抽取算法,但你可以通过一种算法得到非常快速和肮脏的结果,该算法只需合并具有相似法线的相邻Tri。

谷歌搜索Hugues Hoppe和他的“曲面重建”工作

曲面重构用于寻找网格曲面以拟合点云;然而,这种方法会产生很多三角形。然后,可以应用网格缩减技术,以最小化错误的方式减少多边形计数。例如,您可以查看OpenMesh的抽取方法


基于点的曲面模型简化有几种不同的技术,包括:

  • 聚类
  • 粒子模拟
  • 迭代简化
见调查:

保利先生、格罗斯先生和科贝尔先生。点的有效简化- 采样曲面。在2002年可视化会议记录中,
第163-170页,华盛顿特区,2002年。IEEE.

简化点云更简单,不受网格三角形和索引的约束

平滑和简化是不同的任务。为了简化云,你应该首先通过制作一个你所拥有的噪声类型的轮廓,它的频率和方向特征来去除噪声伪影,并做一个与类型减少相比的噪声轮廓。好的法向量有助于实现这一点

以下是一份关于使用delauney、voronoi和k近邻数学进行5-6次简化的文档:

2008年的更新版本:

这是一个最近的C++版本:


实际上,您无法同时获得更平滑和更简单的曲面。这不是一个就是另一个。@Mikulas Dite从技术上说他不能(更多的分数,更复杂)。但从视觉上看,如果他去除了异常值,曲线可能会显得更平滑、更不复杂。如果表面有噪音,他可以得到一个更简单、点更少的表面,就像对立方体进行高分辨率激光扫描一样。这有点像是要求对3D曲面使用低通滤波器。我记得在学校学到,有些曲面不存在三角剖分(在3D中)。如果OP不担心在这样的曲面上绊倒,那么这就可以了。这实际上取决于点云数据的属性。如果它是一个像高度地图一样的点网格,那么这种方法将非常简单。如果这是一个更无定形的点云,那么这可能不适合你。整个应用程序都致力于从复杂的点云数据生成曲面,因此如果不受约束,这是一个相当困难的问题。Delauney仅适用于2.5D-但对于heightfield数据,这是一个在重新网格化之前开始的非常好的方法欢迎使用Stackoverflow!您能否在回答中添加更多细节(例如添加技术说明)?关于stackoverflow的答案需要有足够的信息来理解答案。只有链接的答案是