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

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 ()*
}

接口扩展

  • 文档中法向求解方法,继承自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命名空间下可独立使用,归属于特征模块,即pcl::computePointNormal参数和上述相同。
  • 源码中计算时发现两个常用的封装好的方法,如下:
方法作用
pcl::computeMeanAndCovarianceMatrix计算平均值和协方差矩阵( #include <pcl/common/centroid.h> )
pcl::solvePlaneParameters可根据协方差矩阵计算平面参数或法向量(#include <pcl/features/feature.h>> )
  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值