PCL - GreedyProjectionTriangulation没有足够的面孔

时间:2015-09-02 20:52:08

标签: computer-vision point-cloud-library triangulation

我正在尝试使用此tutorial

中的 pcl :: GreedyProjectionTriangulation 对Point Cloud Library中的点云进行三角测量

问题: 但是结果我得到了 PolyMesh ,只有很少的面孔(见下图): Sorry, I can't publish images

这是我的代码:

//Calculate normals
pcl::NormalEstimation<pcl::PointXYZ, pcl::Normal> n;
pcl::PointCloud<pcl::Normal>::Ptr normals(new pcl::PointCloud<pcl::Normal>);
pcl::search::KdTree<pcl::PointXYZ>::Ptr tree(new pcl::search::KdTree<pcl::PointXYZ>);
tree->setInputCloud(cloud);
n.setInputCloud(cloud);
n.setSearchMethod(tree);
n.setKSearch(80);

cout << "Computing normals...\n";
n.compute(*normals);

// Concatenate the XYZ and normal fields*
pcl::PointCloud<pcl::PointNormal>::Ptr cloud_with_normals(new pcl::PointCloud<pcl::PointNormal>);
pcl::concatenateFields(*cloud, *normals, *cloud_with_normals);

// Create search tree*
pcl::search::KdTree<pcl::PointNormal>::Ptr tree2(new pcl::search::KdTree<pcl::PointNormal>);
tree2->setInputCloud(cloud_with_normals);

// Initialize objects
pcl::GreedyProjectionTriangulation<pcl::PointNormal> gp3;
pcl::PolygonMesh triangles;

// Set the maximum distance between connected points (maximum edge length)
gp3.setSearchRadius(0.1);

// Set typical values for the parameters
gp3.setMu(2.5);
gp3.setMaximumNearestNeighbors(150);
gp3.setMaximumSurfaceAngle(M_PI ); // 180 degrees
gp3.setMinimumAngle(M_PI / 18);    // 10 degrees
gp3.setMaximumAngle(2 * M_PI / 3); // 120 degrees
gp3.setNormalConsistency(false);

// Get result
gp3.setInputCloud(cloud_with_normals);
gp3.setSearchMethod(tree2);
cout << "reconstruct\n";
gp3.reconstruct(triangles);
  • 我尝试设置 SearchRadius 的更大值(1对0.1)但在运行时收到此警告:

    没有足够的邻居被认为:ffn或sfn超出范围!考虑增加 g nnn _...将R = 23433设置为BOUNDARY! 没有考虑足够的邻居:R = 23480的来源超出范围!考虑 增加nnn _... 边缘邻居的社区规模增加请求数量:24 来源的邻居规模增加请求数量:68

    并且多边形的数量是低钢。

问题:那么,我该如何从点云创建好的PolyMesh呢?

1 个答案:

答案 0 :(得分:2)

以下提示可以解决您的问题:

  • 在计算法线之前,请尝试应用一种更好的曲面近似方法:MovingLeastSquaresBilateralUpsampling,具体取决于您的需要。你的云会更密集,导致表面重建后的洞更少。
  • 使用半径搜索代替K搜索进行正常估计,它为我提供了更好的结果。
  • 增加setMaximumNearestNeighbors将避免运行时警告。