赞
踩
#include <pcl/point_types.h> #include <pcl/features/normal_3d.h> { pcl::PointCloud<pcl::PointXYZ>::Ptr cloud (new pcl::PointCloud<pcl::PointXYZ>); ... read, pass in or create a point cloud ... //法向估计类(此处泛型指应用位置XYZ坐标的数据求解出法向量坐标结果) pcl::NormalEstimation<pcl::PointXYZ, pcl::Normal> ne; ne.setInputCloud (cloud); // 创建Kdtree对象 // 以Kdtree形式组织输入的数据,以便内部查询各点邻域 pcl::search::KdTree<pcl::PointXYZ>::Ptr tree (new pcl::search::KdTree<pcl::PointXYZ> ()); ne.setSearchMethod (tree); // 输出集,pcl::Normal法向点类型即保存法向量的XYZ坐标,其中0-2个分量为XYZ坐标,第3个分量为曲率 pcl::PointCloud<pcl::Normal>::Ptr cloud_normals (new pcl::PointCloud<pcl::Normal>); // 设置各点查询的邻域范围 ne.setRadiusSearch (0.03); // 计算法向量 ne.compute (*cloud_normals); // cloud_normals->size () should have the same size as the input cloud->size ()* }
pcl::Feature
类,他利用输入的点云和组织的方式即Kdtree进行特征求解,即PCA方法求法向的方式,需要注意的是邻域不满足条件的将无法计算法向会被设置为NAN,所以计算法向后后续处理要考虑NAN情况及时过滤。
bool pcl::NormalEstimation< PointInT, PointOutT >::computePointNormal (
const pcl::PointCloud< PointInT > & cloud,//输入 点云
const std::vector< int > & indices,//输入 需要计算的点的索引
Eigen::Vector4f & plane_parameters,//输出 平面参数
float & curvature //输出 曲率 \[ \lambda_0 / (\lambda_0 + \lambda_1 + \lambda_2) \]
)
bool pcl::NormalEstimation< PointInT, PointOutT >::computePointNormal (
const pcl::PointCloud< PointInT > & cloud,
const std::vector< int > & indices,
float & nx,//输出 法向x
float & ny,//输出 法向y
float & nz,//输出 法向z
float & curvature//曲率
)
pcl::computePointNormal
参数和上述相同。方法 | 作用 |
---|---|
pcl::computeMeanAndCovarianceMatrix | 计算平均值和协方差矩阵( #include <pcl/common/centroid.h> ) |
pcl::solvePlaneParameters | 可根据协方差矩阵计算平面参数或法向量(#include <pcl/features/feature.h>> ) |
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。