我正在从我的三维PointCloud数据创建一个网格。我已经获得了我的网格,并将附上下面的图片。我很好奇是否有人知道如何只获取扫描表面的网格。似乎当网格被创建的时候,它连接了两边和底部,但是我只想要表面的网格。
这里是我的观点云数据点云数据
下面是创建网格前表面视图的网格
我只希望前面(弯曲)表面是一个网格,而不是边.或者底部的底部视图
我的三维数据点存储在一个具有大小的numpy数组中(n_points,3)。这是我的简单代码。正如我所说的," points“是一个包含所有数据点(1000+)的numpy数组。然后创建“卷”,它使用delaunay_3d方法创建一个网格,然后将几何图形提取到一个shell中。我假设壳提取是创建实际观察图像的原因,那么我还能做些什么来获得表面网格而不是形状呢?谢谢
cloud = pv.PolyData(points)
cloud.plot()
volume = cloud.delaunay_3d(alpha=2)
shell = volume.extract_geometry()
shell.plot()发布于 2022-06-15 16:21:46
从本pyvista教程中可以看到,您需要使用delaunay_2d函数。
为了更接近您手头的问题,我将从上面教程中的points数组开始,它是x、y和z坐标的2D数组,就像点云一样:

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

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

完整代码:
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)https://stackoverflow.com/questions/72633922
复制相似问题