【问题标题】:Point Cloud triangulation using marching-cubes in Python 3在 Python 3 中使用行进立方体进行点云三角测量
【发布时间】:2019-11-03 07:48:02
【问题描述】:

我正在开发一个 3D 重建系统,并希望使用 Python 3 从注册的点云数据生成三角形网格。我的对象不是凸的,因此行进立方体算法似乎是解决方案。

我更喜欢使用这种方法的现有实现,所以我尝试了scikit-imageOpen3d,但是这两个 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


【解决方案1】:

您是否知道另一种适用于原始点云数据的 [行进立方体算法] 实现?

Hoppe 的论文Surface reconstruction from unorganized points 可能包含您需要的信息,它是open sourced

最新的 Open3D 似乎包含表面重建算法,如 alphaShapeballPivotingPoissonReconstruction


据我所知,marching cubes 通常用于从三维离散标量场(即体积的意思)中提取等值面的多边形网格。该算法不适用于原始点云数据。

Hoppe 的算法首先生成带符号的距离函数场(SDF 体积),然后将其传递给行进立方体。这可以被视为对您的实现pcd_to_volume,这不是唯一的方法!

如果你只有原始点云,那么情况就有点受限了。如您所见,Poisson reconstructionScreened Poisson reconstruction 算法都以自己的方式实现pcd_to_volume(它们高度相关)。但是,它们需要额外的点法线信息,并且法线必须始终定向。 (对于一致的方向,您可以阅读this question)。

虽然一些基于 Delaunay 的算法(它们不使用行进立方体),如 alphaShape 和 this 可能不需要点法线作为输入,但对于具有复杂拓扑的表面,很难获得由于方向问题,结果令人满意。而graph cuts method 可以使用可见性信息来解决这个问题。


话虽如此,如果您的数据来自深度图像,您通常会获得可见性信息。您可以使用TSDF 构建良好的表面网格。 Open3D 有already implemented that

【讨论】:

  • 我一定会看看那些论文。谢谢!我不是 3D 重建专家,您的回答很有启发性。关于我的数据,我从深度图像生成点云,因此可见性信息可用:我还将检查 TSDF。
  • 仅供参考,如果深度数据来自连续扫描设备,则使用最多的是 tsdf(我的个人经验)。如果是这样的话,你可能想看看KinectFusion 和一系列后续工作。
  • 如果您只是在离散时间的不同地点拍摄深度照片,那么在对点云进行正常估计之后,筛选泊松可能对您来说已经足够了。希望对您有所帮助!
猜你喜欢
  • 2017-03-02
  • 2012-01-26
  • 2018-06-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-11-14
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多