试了PCL中点云的法向量计算:
// 待计算的点云
pcl::PointCloud<pcl::PointXYZ>::Ptr cloud_xyz(new pcl::PointCloud<pcl::PointXYZ>)
int cld_sz = cloud_xyz->points.size();
pcl::search::Search<pcl::PointXYZ>::Ptr kdtree(new pcl::search::KdTree<pcl::PointXYZ>());
int search_k = 10;
// 整体一起算
pcl::NormalEstimation<pcl::PointXYZ, pcl::Normal> ne;
ne.setInputCloud(cloud_xyz);
ne.setSearchMethod(kdtree);
ne.setKSearch(search_k);
ne.setViewPoint(std::numeric_limits<float>::max(), std::numeric_limits<float>::max(), std::numeric_limits<float>::max());
pcl::PointCloud<pcl::Normal>::Ptr normals_1(new pcl::PointCloud<pcl::Normal>);
ne.compute(*normals_1);
// 单个计算: 用pcl的函数,逐点计算;自己组建协方差矩阵,用Eigen求解计算。
kdtree->setInputCloud(cloud_xyz);
pcl::NormalEstimation<pcl::PointXYZ, pcl::Normal> ne1;
std::vector< std::vector< int > > idx_all(cld_sz);
std::vector< std::vector< float > > dis_all(cld_sz);
std::vecto