【问题标题】:How to load labeled point cloud in Meshlab?如何在 Meshlab 中加载标记点云?
【发布时间】:2017-10-22 03:35:45
【问题描述】:

我目前正在使用点云库 (PCL) 来处理点云。现在我需要为一些点云计算网格,并认为最好的办法是使用 Meshlab。到目前为止一切顺利,我的问题是我的点云有标签,即它具有以下形式:

pcl::PointCloud<pcl::PointXYZRGBL> cloud;

重要提示:我不能省略标签,我必须在计算网格后知道网格的哪个点具有哪个标签。后来,经过一些操作等。我通过

保存了这个云
pcl::io::savePLYFileBinary(writePath, *cloud);

如果云是类型的话,效果很好

pcl::PointCloud<pcl::PointXYZRGB> cloud;

但不适用于第一种情况。有谁知道我可以做些什么才能仍然获得包含标签并可以加载到 Meshlab 中的 PLY 文件?

谢谢大家!

【问题讨论】:

  • “工作正常”意味着MeshLab能够打开它并生成一个网格,或者savePLYFileBinary正确保存文件?即,你的问题是什么? MeshLab 无法打开文件? MeshLab 打开时无法保留标签? MeshLab 网格化后无法保留标签?
  • MeshLab 根本无法打开它,但它没有给出任何错误,而是我可以加载它,但没有看到任何云。

标签: c++ point-cloud-library meshlab


【解决方案1】:

由于 MeshLab 无法打开您的标记点云,我建议:

  1. 将您的点云导出为 MeshLab 可读的格式(例如,您提到的 pcl::PointCloud&lt;pcl::PointXYZRGB&gt;)。

  2. 使用插值方法(例如球旋转)重建三角形网格。为了将原始点保留为网格的顶点,插值方法是必要的。完成后,保存网格。

  3. 在与原始点云的顶点匹配的位置加载网格,以便您可以恢复标签和任何其他相关属性。在快速测试中,我什至使顶点顺序与点的顺序相匹配。


更新

您在评论中提到您正在使用筛选泊松重建。该方法使用输入点作为位置约束来提高方法的精度,但它仍然是一种近似方法,因此不能保证输出顶点与输入点匹配(并且可能不会)。

您可以切换到插值方法(如果噪声和异常值允许),或者找到每个顶点的最近点(使用 1-NN,就像您现在所做的那样)标记顶点。

以上对所有离散值都有效。您还应该调整其他值,例如颜色,以更好地匹配重建(顶点不匹配点)。为此,您可以从 k-NN 中插入相应的值。

【讨论】:

  • 这就是我目前正在做的事情。我只是计算网格并保存它。然后我将该网格加载到我的程序中并进行标签的最近邻分配。由于我使用的是 Screened Poisson Reconstruction,我不确定这些点是否会被移除/移动或其他东西,这会导致以后错误的标签分配。
  • SPR 不保证插值方法,而只是引入位置约束以提高重建网格的准确性。因此,在这种情况下,您甚至无法保证顶点数等于输入点数。您应该 a) 更改重建方法(取决于您的噪声水平和异常值,这可能是不可能的),b) 保持当前的方法,我觉得这非常好。
  • 我假设标签是离散值。您可能希望找到 n 个最近的邻居,并为任何其他连续值(例如颜色)进行插值。
  • 我一定会试一试的。谢谢,将在此处发布结果!
猜你喜欢
  • 2018-05-29
  • 2017-10-02
  • 1970-01-01
  • 1970-01-01
  • 2014-05-27
  • 2017-06-25
  • 2020-04-13
  • 2018-01-29
  • 1970-01-01
相关资源
最近更新 更多