NormalEstimation:
PCL中计算法向量的类。原理是通过对邻域点集求PCA来得到法向量。对领域点的三维坐标进行中心化,求得协方差矩阵并对角化,求得三个特征值,最小特征值对应的特征向量就是法向量。
包含的库:
#include <pcl/features/normal_3d.h>
使用方法:
NormalEstimation<PointXYZRGBA, Normal> normObj;
//创建法向量计算对象
normObj.setInputCloud (cloud); //设置输入点云 //
search::OrganizedNeighbor<PointXYZRGBA>::Ptr tree(new search::OrganizedNeighbor<PointXYZRGBA>());
search::KdTree<PointXYZRGBA>::Ptr tree (new pcl::search::KdTree<pcl::PointXYZRGBA> ());
normObj.setSearchMethod (tree); //设置搜索方法
normObj.setRadiusSearch (0.05);//设置半径邻域搜索
//normObj.setKSearch(30); //设置K邻域搜索
PointCloud<Normal>::Ptr normals (new
PointCloud<Normal>); //创建法向量点云
normObj.compute (*normals); //计算法向量
对于无序点云,采用的是KD树搜索,如果是organized点云,可以直接索引到邻域。用OrganizedNeighbor搜索邻域将会更快速。
Organized点云(有序点云)是由深度图转换过来的,一个像素格对应一个点,类似于二维的图像,由Kinect采集到的点云就是有序点云。