完成部分网格并使其水密

Complete a partial mesh and make it watetight(完成部分网格并使其水密)

本文介绍了完成部分网格并使其水密的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在从RealSense相机捕捉点云,并使用TriMesh库将它们转换为网格。问题是,我只能得到一个非水密的网格。如何完成网格并使其密封性(&Q;)?

我试过

trimesh.repair.broken_faces(mesh, color=[255, 0, 0, 255]) 

但这似乎并没有完全起到作用。我尝试创建凸壳:

并尝试在两者之间执行联合,但失败了:

ipdb> mesh.union(ch,engine='scad')                                                                                             
*** subprocess.CalledProcessError: Command '['/usr/bin/openscad', '/tmp/tmpqrdvbdd2', '-o', '/tmp/tmpvdzjmkgm.off']' returned non-zero exit status 1
ipdb> mesh.union(ch,engine='blender')                                                                                          
*** subprocess.CalledProcessError: Command '['/usr/bin/blender', '--background', '--python', '/tmp/tmp9_5phhhj']' returned non-zero exit status 127

并且我还会丢失来自源网格的RGB信息。如何使用凸面外壳完成网格,同时保留所有已知的RGB值?

编辑:我将指针移动了一点。我查看了凸壳的面法线,并提取了所有指向侧面和下方的法线。我用旧的网格顶点和由旧面+凸壳中的新面定义的面创建了一个新网格。

这让我更接近我的目标,但现在我有一堆洞,TriMesh.repair.ill_holes和MeshLab的过滤器都没有给我带来好的结果。

推荐答案

我会查看pyvista示例页面,他们有一个很好的pyvista.wrap函数,可以将您从trimesh转到pyvista,然后您可以使用pv_obj.points设置顶点,pv_obj.faces.reshape(-1, 4)[:, 1:]返回trimesh。有些操作会将您从PolyData带入UnstructedGrid类,但只要它们是三角形,这些线就应该可以工作。Triesh速度非常快,他在回答GitHub问题方面是个超级巨星,但pyvista中的文档要好得多。为了我的项目,我不得不经常在这两者之间跳跃。

这里是我正在考虑的相关示例:https://docs.pyvista.org/examples/01-filter/resample.html

您的空洞填充很可能由他们在https://github.com/pyvista/pymeshfix的侧边回购处理,然后再撤回到trimesh

trimesh还将Open3D列为可选依赖项,它有更好的点云重建算法,但我还没有充分使用它来推动您获得相关资源。

这篇关于完成部分网格并使其水密的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!

本文标题为:完成部分网格并使其水密