我能从网格生成点云吗?

22
我试图从像Maya的(.obj)文件这样的网格生成点云数据。 但是,我只能在互联网上找到相反的情况,即点云转换为网格。 是否有任何方法使用MeshLab或Maya等3D工具创建“点云数据从网格”? (我更喜欢使用MeshLab) 谢谢。 :)

你希望输出什么文件格式? - theodox
3
输出格式并不重要,我只想获取点云数据。 - Youn A Lee
请查看这里的答案:https://stackoverflow.com/q/11587225/7325599 - Fedor
6个回答

17

自由开源项目CloudCompare可以加载OBJ网格,然后在网格上生成点云,并可以将其保存为多种格式。


1
这是我目前看到的最好的方法,点的分布很好,而且还保留了模型的RGB值。如果它能够同时保留法向量就更好了,但目前很少有点云软件支持法线着色。方法:导入obj,选择网格,编辑/编辑网格/采样点。 - Paintoshi
嗨@David,感谢你的提示。你知道有没有批处理的方法吗?我有大约80,000个obj文件,想要将它们全部转换...算了,我想我找到了“示例网格”命令行选项,在文档的第173/181页(http://cloudcompare.org/doc/qCC/CloudCompare%20v2.6.1%20-%20User%20manual.pdf)上。 - yuqli
仅供其他阅读此帖子的人参考,我想补充一下我的先前评论,对于这个特定的任务,我发现点云库(Point Cloud Library)比Cloud Compare的命令行选项更容易使用。其中一个问题是,当我尝试使用“-SAVE_CLOUDS”选项保存点云时,Cloud Compare会报错,尽管它可以正常生成.txt文件。另一个问题是,尽管我指定了2048个点,但输出包含2049个点。pcl_mesh_sampling感觉更容易使用。 - yuqli

7

据我所知,点云库(Point Cloud Library)有几个不同的命令行工具可以将网格转换为点云,通过从一组视图渲染对象并合并渲染结果为点云来实现。例如,pcl_mesh2pcd和pcl_mesh_sampling。


但是,我正在尝试你说的那样做,但是遇到了问题。我想将obj网格转换为pcd格式。但是pcl_mesh2pcd和pcl_mesh_sampling出现了错误(程序就崩溃了...TT)。我该怎么办? - Youn A Lee
你可以尝试打开另一个问题,展示那些错误。也许有人遇到过类似的问题,也许存在一些漏洞,也许某些部分已经损坏了等等。总会有人能够提供帮助。我个人没有使用过这些工具,也没有安装PCL,但如果我看到错误信息,我可能能够提供帮助。 - D.J.Duff
你也可以查看pcl-users邮件列表以解决类似的问题。我现在记得pcl有一个新的“模拟”库,可能对这种事情很有用 - 可能会有一个使用它的工具。 - D.J.Duff

6
将三角网格转换为点云意味着您希望在该表面上进行点采样。根据所需的分布(例如均匀蒙特卡罗、泊松盘等),有不同的算法,其结果相当不同。例如,如果您需要间隔良好的随机点,则需要使用泊松盘分布。您可以在meshlab内测试一些这些算法,或者直接在您的浏览器上http://www.meshlabjs.net/(只需加载一个网格并在搜索框中键入“sampling”)。
您可以在网格处理vcg库(http://www.vcglib.net)中找到c++开源实现,并在以下文献中找到这些算法的描述(相当容易实现):
Efficient and flexible sampling with blue noise properties of triangular meshes M Corsini, P Cignoni, R Scopigno IEEE Transactions on Visualization and Computer Graphics 18 (6), 914-924 http://vcg.isti.cnr.it/Publications/2012/CCS12/

1
还有PyMeshLab,它是MeshLab的Python绑定,用于替换meshlabserver以执行FilterScripts。 - ketza
非常感谢,MeshLab 刚好实现了我想要的目标 :) - Nehil Danış

2

我想做同样的事情,但更喜欢用Python轻松完成。我发现这篇文章非常有用。它使用了一个名为pyntcloud的Python库。 该库可以加载.ply格式的网格,并从中随机采样指定数量的点,以使其以较均匀的方式覆盖表面。它也可以很容易地适应其他格式。我已经将其适用于.off文件,并且效果很好。


2
我正在寻找类似的问题。我需要将网格模型投影到不同的姿势中以生成点云数据。
然后我在github上找到了以下项目。如果有人想从网格对象(.obj)中生成各种姿势的点云(.pcd),这将会有所帮助。
这将为给定的网格对象模拟kinect格式的点云。

https://github.com/jbohg/render_kinect


2
有趣的是,网上对这个问题没有明确的答案。
将网格转换为点云与将网格的顶点塞入点云相似! 网格是点云的稀疏表示。 因此,要将网格转换为点云,您需要在网格表面采样点。PCL具有用于执行此操作的实用程序,名为pcl_mesh_sampling。 源代码位于此处
基本上,该方法使用VTK从网格表面均匀采样N个点。 它非常有效,您可以获得任意数量的点云。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接