首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Pyvista中点云的曲面重构

Pyvista中点云的曲面重构
EN

Stack Overflow用户
提问于 2022-06-15 15:19:11
回答 1查看 969关注 0票数 1

我正在从我的三维PointCloud数据创建一个网格。我已经获得了我的网格,并将附上下面的图片。我很好奇是否有人知道如何只获取扫描表面的网格。似乎当网格被创建的时候,它连接了两边和底部,但是我只想要表面的网格。

这里是我的观点云数据点云数据

下面是创建网格前表面视图的网格

我只希望前面(弯曲)表面是一个网格,而不是边.或者底部的底部视图

我的三维数据点存储在一个具有大小的numpy数组中(n_points,3)。这是我的简单代码。正如我所说的," points“是一个包含所有数据点(1000+)的numpy数组。然后创建“卷”,它使用delaunay_3d方法创建一个网格,然后将几何图形提取到一个shell中。我假设壳提取是创建实际观察图像的原因,那么我还能做些什么来获得表面网格而不是形状呢?谢谢

代码语言:javascript
复制
cloud = pv.PolyData(points)
cloud.plot()

volume = cloud.delaunay_3d(alpha=2)

shell = volume.extract_geometry()
shell.plot()
EN

回答 1

Stack Overflow用户

发布于 2022-06-15 16:21:46

本pyvista教程中可以看到,您需要使用delaunay_2d函数。

为了更接近您手头的问题,我将从上面教程中的points数组开始,它是xyz坐标的2D数组,就像点云一样:

为了获得更好的想法,我将向这个points数组添加一点噪声,如下面的图像所示:

下面你可以看到你最后的网格:

完整代码:

代码语言:javascript
复制
import numpy as np
import pyvista as pv

# Define a simple Gaussian surface
n = 20
x = np.linspace(-200, 200, num=n) + np.random.uniform(-1, 5, size=n)
y = np.linspace(-200, 200, num=n) + np.random.uniform(-7, 9, size=n)
xx, yy = np.meshgrid(x, y)
A, b = 100, 100
zz = A * np.exp(-0.5 * ((xx / b) ** 2.0 + (yy / b) ** 2.0))

# Get the points as a 2D NumPy array (N by 3)
points = np.c_[xx.reshape(-1), yy.reshape(-1), zz.reshape(-1)]

noise = np.random.randn(400, 3) * 3
points_noise = points + noise


cloud = pv.PolyData(points_noise)
cloud.plot(point_size=15)

surf = cloud.delaunay_2d()
surf.plot(show_edges=True)
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72633922

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档