pcl::NormalEstimation setSearchMethod 解释

pcl::NormalEstimation setSearchMethod explanation

// Compute the normals
pcl::NormalEstimation<pcl::PointXYZ, pcl::Normal> normalEstimation;
pcl::search::KdTree<pcl::PointXYZ>::Ptr tree(new pcl::search::KdTree<pcl::PointXYZ>);
normalEstimation.setInputCloud(source_cloud);
normalEstimation.setSearchMethod(tree);

大家好, 我是初学者 PCL 我不明白 "normalEstimation.setSearchMethod(tree);" 这部分是什么意思? 这是否意味着我们必须选择一些方法?

有时候看到代码是这样的

// Normal estimation
pcl::NormalEstimation<pcl::PointXYZ, pcl::Normal> n;
pcl::search::KdTree<pcl::PointXYZ>::Ptr tree(new pcl::search::KdTree<pcl::PointXYZ>);
tree->setInputCloud(cloud_smoothed)*/; [this part I dont understand too]
n.setInputCloud(cloud_smoothed);
n.setSearchMethod(tree);

谢谢大家 干杯

您可以在此处找到有关如何计算法线的一些信息:http://pointclouds.org/documentation/tutorials/normal_estimation.php

基本上,要计算特定点的法线,您需要 "analyze" 它的邻域,即它周围的点。通常,您取 N 个最近的点或在目标点周围一定半径内的所有点。 如果点云是完全非结构化的,那么找到这些相邻点并非易事。 KD 树是用来加速搜索的。事实上,它们是一种优化的数据结构,例如允许非常快速的最近邻搜索。您可以在此处找到有关 KD 树的更多信息 http://pointclouds.org/documentation/tutorials/kdtree_search.php

因此,行 normalEstimation.setSearchMethod(tree); 只是设置了一个空的 KD 树,它将被正常估计算法使用。