使用网格的表面法线生成均匀点云

问题描述 投票:0回答:0

我需要帮助来创建某种方法来为提供的任何网格生成非常均匀(即类似网格)的点云。这些点中的每一个都需要表面法线数据。

这是我试过的:

开放3D: 我将我的网格导入 Open3D 并使用体素化缩小。这almost如我所愿。不幸的是,它会生成相当不均匀的云。这是点云(体素化点云)的 Z 向切片示例:

从计算上讲,这种方法也相当昂贵。为了生成点云,我不得不对对象进行数千次随机采样,但仍然在数据中留下了“秃头”点。这是我的做法:

N = 50000
pcd = mesh.sample_points_poisson_disk(N)
pcd.colors = o3d.utility.Vector3dVector(np.random.uniform(0, 1, size=(N, 3)))

downpcd = pcd.voxel_down_sample(voxel_size=0.05)
downpcd.estimate_normals(search_param=o3d.geometry.KDTreeSearchParamHybrid(radius=0.1, max_nn=30))
downpcd.orient_normals_consistent_tangent_plane(100)

Trimesh,PyVista: 这些可以生成非常好的体素表示,但是,据我所知,它们不支持在一个点上找到表面法线。

PyBullet: 这可能看起来很奇怪,但我之前将其用于控制系统并使用了它的光线投射系统。我只是将光线投射到物体周围的球体中,这对于生成点云非常有效。但是,由于不再使用 PyBullet,我想避免使用这个庞大的库。

是否有任何我应该查看的库或参考资料来解决这个问题?我已经头痒了一段时间。考虑到我的要求,我认为拥有一个光线投射库是最好的情况,但必须有比 pybullet 更轻量级的库。

请注意,我确实需要每个特定点云点的表面法线。

谢谢!

python 3d geometry
© www.soinside.com 2019 - 2024. All rights reserved.