从点云创建不规则的 3D 几何图形

Posted

技术标签:

【中文标题】从点云创建不规则的 3D 几何图形【英文标题】:Create an irregular 3D geometry from a cloud of points 【发布时间】:2014-12-22 17:34:52 【问题描述】:

我有一大组 3D 点,它们在每个轴上等距分布。其中许多点是根据某些标准剔除的,我想创建一个 3D 几何图形来帮助可视化剩下的内容。

我查看了一些创建三角形网格的算法,例如 Delaunay Triangulations 或凸包,但我担心某些被排除的点可能会卡在几何体中。例如,2D 切片可能如下所示:

0 0 0 1 1 0 0   
0 0 1 1 1 1 0   
0 1 1 1 1 1 1   
1 1 0 1 0 1 1   
0 1 0 0 0 1 0  

其中“1”被包括在内,“0”被排除在外。在这种情况下,我担心算法会不小心在底部行中包含“0”,因为它们的两侧都有“1”。请注意,“0”将始终位于边缘,因此我们不必担心几何图形中的孔洞。

之后,我需要能够旋转几何图形并找到它与平面的交点。我很确定我可以处理旋转和交叉部分,但请记住这一点。

我可以通过为表面上的所有点创建每个可能的三角形,然后手动剔除任何包含排除点的三角形来解决问题。但是数据集可能非常大,所以我希望有一个更优雅的解决方案。

【问题讨论】:

看看 3D alpha 形状。 我认为 alpha 形状不会做出任何努力来避免我的排除点。如果我理解正确,较大的 alpha 值可能会捕获我的排除点,而较小的 alpha 值会回到蛮力三角剖分。 如果您将点集视为 3D 网格图,您可以在 O(I) 中完成它,其中 I 是包含点的数量。无论您寻求网格还是三角剖分,3D 外部行走都应该能够做到。如果您已经设置了点以允许 O(1) 检查给定点是内部还是外部,则可以比O(I) 更好地完成网格。此外,如果您选择了正确的 alpha,alpha 形状可能会起作用,我认为它在1/(G*k) <= alpha <= 1/(G/k) 的范围内,其中1 <= k < 2,G 是网格间距大小。推荐尝试alpha = 1/G, 1/(G/1.5), 1/(G * 1.5) 【参考方案1】:

如果您只对封闭的几何图形感兴趣并且每个几何图形都在一个平面上,您需要网格/三角剖分还是只需要一组多边形?

将 0,1 数据转换为二进制图像并在其上运行轮廓算法将非常简单,请参阅OPENCV

【讨论】:

我认为 OP 正在寻找点云的完整三角剖分。【参考方案2】:

我认为您正在寻找Point Cloud Library。

【讨论】:

我已经下载并安装了 PCL,但我还没有足够的时间浏览它。但看起来 PCL 只是使用凸包和 alpha 形状。

以上是关于从点云创建不规则的 3D 几何图形的主要内容,如果未能解决你的问题,请参考以下文章

3D点云转Mesh网格Python

如何从点云创建深度图像

请问组三中奖规则谁知道?

爆肝5万字❤️Open3D 点云数据处理基础(Python版)

MATLAB点云处理(二十):三维刚体几何变换矩阵(regid3d)与仿射几何变换矩阵(affine3d)

QT+PCL 点云学习