pcl泊松重建不会在某些点云上结束

时间:2018-09-11 08:52:15

标签: c++ point-cloud-library 3d-reconstruction

我目前正在使用PointCloudLibrary从点云(.pcd文件中)创建点网格。 我使用以下代码生成它们:

pcl::PolygonMesh::Ptr meshPoisson::process(pcl::PointCloud<pcl::PointNormal>::Ptr input)
{
    (...)

    pcl::Poisson<pcl::PointNormal> mesh;
    pcl::search::KdTree<pcl::PointNormal>::Ptr tree2(new pcl::search::KdTree<pcl::PointNormal>);
    pcl::PolygonMesh::Ptr triangles(new pcl::PolygonMesh);

    tree2->setInputCloud(input);

    mesh.setInputCloud(input);
    mesh.setSearchMethod(tree2);
    mesh.setDepth(m_depth);//4 low testing
    mesh.setScale(m_scale);//1.0
    mesh.setSamplesPerNode(5.0);

    //this line is reached
    mesh.reconstruct(*triangles);
    //this line is never reached

    (...)

    return triangles;
}

在某些点云上,此代码永远不会从 reconstruct 函数返回。 我所有的点云都被过滤并且没有NaN值。

如您所见,我正在使用 PointNormal 数据类型,因此所有点都具有法线。我也检查了它们,它们具有值(归一化而不是NaN)。

我希望PCL能够正确实现,因此该错误必须在我的代码中。

Edit1:事实证明它与泊松算法本身有关。删除 setScale 方法可解决此问题。我仍然不知道是什么原因造成的,因为我没有学习泊松算法。

0 个答案:

没有答案