我正在开发一个三维重建系统,想要使用Python 3从已注册的点云数据生成三角网格。我的对象不是凸的,因此Marching Cubes算法似乎是解决方案。
我更喜欢使用现有的方法实现,所以我尝试了scikit-image和Open3d但两个API都不接受原始点云作为输入(请注意,我不是这些库的专家)。我尝试将我的数据转换失败了,而且由于文档没有说明函数的输入格式,我也没有更多的想法。
这是我需要的
我更喜欢使用现有的方法实现,所以我尝试了scikit-image和Open3d但两个API都不接受原始点云作为输入(请注意,我不是这些库的专家)。我尝试将我的数据转换失败了,而且由于文档没有说明函数的输入格式,我也没有更多的想法。
这是我需要的
pcd_to_volume
代码片段。
scikit-image
import numpy as np
from skimage.measure import marching_cubes_lewiner
N = 10000
pcd = np.random.rand(N,3)
def pcd_to_volume(pcd, voxel_size):
#TODO
volume = pcd_to_volume(pcd, voxel_size=0.05)
verts, faces, normals, values = marching_cubes_lewiner(volume, 0)
open3d
import numpy as np
import open3d
N = 10000
pcd = np.random.rand(N,3)
def pcd_to_volume(pcd, voxel_size):
#TODO
volume = pcd_to_volume(pcd, voxel_size=0.05)
mesh = volume.extract_triangle_mesh()
我无法找到一个合适的方法来正确编写 pcd_to_volume
函数。我不偏向于某个库,因此这两种解决方案都可以。
你有什么建议可以正确地转换我的数据吗?点云是一个 Nx3
矩阵,其中 dtype=float
。
你知道另一种实现 [Marching Cube 算法],可以在原始点云数据上工作吗?我更喜欢像 scikit 和 open3d 这样的库,但我也会考虑 github 项目。