реконструкция Пуассона не заканчивается на определенных точечных облаках - PullRequest
0 голосов
/ 11 сентября 2018

В настоящее время я создаю полигональные сетки из облаков точек (из файлов .pcd) с помощью PointCloudLibrary.Я генерирую их с помощью следующего кода:

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;
}

В некоторых облаках точек этот код никогда не возвращается из функции реконструкция .Все мои облака точек отфильтрованы и не имеют значений NaN.

Как видите, я использую тип данных PointNormal , поэтому все точки имеют нормали.Я также проверил их, и у них есть хорошие значения (нормализованные и не NaN).

Я ожидаю, что PCL будет правильно реализован, поэтому ошибка должна быть в моем коде.

Edit1: оказывается, это как-то связано с самим алгоритмом Пуассона.Удаление метода setScale решило эту проблему.Я до сих пор не понимаю, что является причиной этого, потому что я не изучил алгоритм Пуассона.

...