【发布时间】:2017-09-29 09:55:28
【问题描述】:
我有一些点云 - 即 3d 坐标的集合 - 我想重建的基础结构,即使只是近似地,是 3D 空间中的 2D 表面,其中 0 (图 B)、1 个(图 A)或 2 个孔,或两个或多个此类结构的不相交联合(图 C)。
每个表面都不是 3D 域的封闭边界(我的结构是二维的)。从数学上讲,它们是具有 1,2 或 3 个边界分量的属 0 2-流形或此类结构的不相交并集。
↑ “out”实际上应该由三角形组成;实际的点云并不是很明显来自球体
[例如,将点集定义为“山脉表面上与气球的距离在 100 到 150 m 之间的采样点”。这些点代表一个表面,可以有 0 个孔(山顶)、1 个孔(侧面)、2 个孔(一个山谷,它是 2 座山的基础)]
我的预期输出是一组连接现有顶点的边和三角形面。我会将它用于粗略的表面积估计和我的数据集的图形表示。我不需要生成的表面是完美的:如果数量有限,即使是拓扑伪影(不应该存在的孔)也是可以接受的。
我的点云有一些特点:
点的密度有些恒定,如果一组由非连接曲面组成,我应该能够使用阈值将它们区分开来
有时,“条”表面可以缩小为单个点文件,甚至跳过一些点(参见示例 C,左侧组件)
我知道不可能有精确的重建算法,但也许有一些规范的方法可以最小化边缘的总长度、总表面积或相邻面之间的折痕角度:我不确定,因为我' m 不是来自计算几何领域。
如果有帮助,我将在 Java 中实现它,但这是我感兴趣的算法。我不介意算法是否依赖于参数,只要它不做出不依赖于参数的假设以我为例。
谢谢!
【问题讨论】:
-
如果密度至少接近常数(假设最多在局部变化 2 的值),那么在距离低于固定阈值的任何点之间插入边缘的天真方法应该完全做。可以使用 kd-tree(或替代数据结构)来搜索这些内容。如果这还不够,您可以尝试根据本地距离向距离函数添加权重。
标签: algorithm graphics 3d computational-geometry point-clouds