【发布时间】:2019-11-03 07:48:02
【问题描述】:
我正在开发一个 3D 重建系统,并希望使用 Python 3 从注册的点云数据生成三角形网格。我的对象不是凸的,因此行进立方体算法似乎是解决方案。
我更喜欢使用这种方法的现有实现,所以我尝试了scikit-image 和Open3d,但是这两个 API 都不接受原始点云作为输入(请注意,我不是这些库的专家)。我转换数据的尝试失败了,而且由于文档没有说明函数的输入格式,所以我的想法已经不多了。
这些是我想要的 sn-ps,pcd_to_volume 是我需要的。
scikit 图像
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。
您知道另一种适用于原始点云数据的 [行进立方体算法] 实现吗?我更喜欢 scikit 和 open3d 之类的库,但我也会考虑 github 项目。
【问题讨论】:
-
感谢您提出这个问题。其实我现在也有同样的问题。只是好奇,您找到任何解决方案了吗?谢谢!
-
@CodingNow 不幸的是,还没有。作为一种解决方法,我在 Matlab 中尝试了alphaShape,它运行良好。但是,我在 Python 中没有找到任何好的替代方案。
-
感谢您提供的信息。 Matlab 永远是赢家。
标签: python-3.x scikit-image marching-cubes