当前位置:   article > 正文

PCL教程指南-估计点云法向量_求点云法向量sota

求点云法向量sota

PCL教程指南-Estimating Surface Normals in a PointCloud(估计点云法向量)

  • 官方原文档
  • 点云法向指每个点的法向量,它是基于各点所在邻域范围内估计而出,常用方法如最小二乘估计邻域平面进而求出法向量,PCA求解邻域协方差最小特征向量等。具体详细原理另行查询。
  • 文档代码注释与接口扩展
#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 ()*
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28

接口扩展

  • 文档中法向求解方法,继承自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//曲率 
)	
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 法向朝向,可以通过设置视点来控制,可以利用传感器原点或自定义。默认使用传感器原点

源码扩展

  • 通过对源码解读,发现法向估计方法不只在法向估计类中实现,并且在pcl命名空间下可独立使用,归属于特征模块,即pcl::computePointNormal参数和上述相同。
  • 源码中计算时发现两个常用的封装好的方法,如下:
方法作用
pcl::computeMeanAndCovarianceMatrix计算平均值和协方差矩阵( #include <pcl/common/centroid.h> )
pcl::solvePlaneParameters可根据协方差矩阵计算平面参数或法向量(#include <pcl/features/feature.h>> )
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/不正经/article/detail/518545
推荐阅读
相关标签
  

闽ICP备14008679号