PCL法线计算及原理 您所在的位置:网站首页 曲面的法线怎么求 PCL法线计算及原理

PCL法线计算及原理

2024-06-24 09:05| 来源: 网络整理| 查看: 265

这里写目录标题 程序第一种第二种 原理

程序

计算协方差矩阵:

法线估计类NormalEstimation的实际计算调用程序内部执行以下操作: 对点云P中的每个点p 1.得到p点的最近邻元素 2.计算p点的表面法线n 3.检查n的方向是否一致指向视点,如果不是则翻转 在PCL内估计一点集对应的协方差矩阵,可以使用以下函数调用实现: //定义每个表面小块的3x3协方差矩阵的存储对象 Eigen::Matrix3fcovariance_matrix; //定义一个表面小块的质心坐标16-字节对齐存储对象 Eigen::Vector4fxyz_centroid; //估计质心坐标 compute3DCentroid(cloud,xyz_centroid); //计算3x3协方差矩阵 computeCovarianceMatrix(cloud,xyz_centroid,covariance_matrix);

注意,以下两种方法输入的点云数据都必须是XYZ格式,不能是XYZRGB

第一种 // =====【2】计算法线========创建法线估计类====== pcl::NormalEstimation ne; ne.setInputCloud(cloud_ptr); // 添加搜索算法 kdtree search 最近的几个点 估计平面 协方差矩阵PCA分解 求解法线 pcl::search::KdTree::Ptr tree(new pcl::search::KdTree()); ne.setSearchMethod(tree);//设置近邻搜索算法 // 输出点云 带有法线描述 pcl::PointCloud::Ptr cloud_normals_ptr(new pcl::PointCloud); pcl::PointCloud& cloud_normals = *cloud_normals_ptr; // Use all neighbors in a sphere of radius 3cm ne.setRadiusSearch(0.03);//半价内搜索临近点 3cm // 计算表面法线特征 ne.compute(cloud_normals); 第二种 pcl::PointCloud::Ptr cloud_with_normals(new pcl::PointCloud); pcl::PointCloud::Ptr normals(new pcl::PointCloud);//存储估计的法线 pcl::NormalEstimation n;//法线估计对象 pcl::search::KdTree::Ptr tree(new pcl::search::KdTree);//定义kd树指针 tree->setInputCloud(cloud); //用cloud构建tree对象 n.setInputCloud(cloud); //为法线估计对象设置输入点云 n.setSearchMethod(tree); //设置搜索方法 n.setKSearch(10); //设置k搜索的k值为20 //n.setRadiusSearch(0.005); n.compute(*normals); //估计法线存储结果到normals中 std::cerr


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有