c++ - 在 PCL 中运行泊松重建后去除错误的表面
问题描述
我有类似的问题link。但是我使用 PCL 中的泊松重建算法而不是 MeshLab 来重建一个盒子。我得到了一个带有一些扩展表面的网格,如图所示。我现在想移除扩展表面。
我不明白上面问题的答案,我不想修改PCL的源代码。有没有其他方法可以解决这个问题?我电脑中PCL的版本是1.10。
任何建议将不胜感激。
解决方案
正如您链接中的答案所提到的,这个工件是 Neumann 边界条件的结果。但是,PCL 不允许您指定边界条件。
原始的PossionRecon 库(PCL 实现所基于)确实允许您指定边界条件 - 并且具有可用的二进制可执行文件。上面的链接还包括所有命令行参数的详细描述。
但是请注意,Dirichlet 边界条件会创建一个不透水的表面,因此您仍然会在缺少数据的地方拥有“想象的”面。
“想象”表面的特点是顶点密度低——可用于去除这些面。PossionRecon还提供了一个SurfaceTrimmer可执行文件(参见上面的相同链接),它可以做到这一点。它要求 PLY 具有密度属性,您可以通过使用带有选项的PossionRecon工具来获得该属性。--density
或者,您可以用面的面积来近似顶点的密度 - 并编写自己的代码来删除大面积的面。
推荐阅读
- vba - 如何解决“错误 70 权限被拒绝”?
- javascript - 如何在具有暗/亮模式的页面之间进行平滑过渡
- python-3.x - 为什么熊猫分析在 ipython 中没有显示任何输出?
- c# - C# 对象初始化器将初始化只读属性,但仅限于非原始类型
- html - 如何使用 CSS 组合器?
- python - 每次收到消息时创建通知实例并保存到数据库 Django Channels
- keras - simpleRNN 输入/输出形状
- c - 使用数组计算第二个人的最终结果时出错
- html - 我可以防止在网页上加载整个图像吗?
- python - TensorFlow:使用 boolean_mask 有效计算 sqrt