PCL1.8.1点的法向量

database

每个点计算法向量 

http://pointclouds.org/documentation/tutorials/how_features_work.php#how-3d-features-work

给定输入点云,为每个点云中的点估计法向量,估计法向量需要指定每个点搜索周边几个点范围作为计算法向量的单位。

此时计算得到的法向量个数cloud_normals->points.size () 与点云个数cloud->points.size ()相等。

#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 ...

// Create the normal estimation class, and pass the input dataset to it

pcl::NormalEstimation<pcl::PointXYZ, pcl::Normal> ne;

ne.setInputCloud (cloud);

// Create an empty kdtree representation, and pass it to the normal estimation object.

// Its content will be filled inside the object, based on the given input dataset (as no other search surface is given).

pcl::search::KdTree<pcl::PointXYZ>::Ptr tree (new pcl::search::KdTree<pcl::PointXYZ> ());

ne.setSearchMethod (tree);

// Output datasets

pcl::PointCloud<pcl::Normal>::Ptr cloud_normals (new pcl::PointCloud<pcl::Normal>);

// Use all neighbors in a sphere of radius 3cm

ne.setRadiusSearch (0.03);

// Compute the features

ne.compute (*cloud_normals);

// cloud_normals->points.size () should have the same size as the input cloud->points.size ()

}

指定特定点云中的点计算法向量

取其中10%的点进行法向量计算:std::vector<int> indices (std::floor (cloud->points.size () / 10));

#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 ...

// Create a set of indices to be used. For simplicity, we"re going to be using the first 10% of the points in cloud

std::vector<int> indices (std::floor (cloud->points.size () / 10));

for (std::size_t i = 0; i < indices.size (); ++i) indices[i] = i;

// Create the normal estimation class, and pass the input dataset to it

pcl::NormalEstimation<pcl::PointXYZ, pcl::Normal> ne;

ne.setInputCloud (cloud);

// Pass the indices

boost::shared_ptr<std::vector<int> > indicesptr (new std::vector<int> (indices));

ne.setIndices (indicesptr);

// Create an empty kdtree representation, and pass it to the normal estimation object.

// Its content will be filled inside the object, based on the given input dataset (as no other search surface is given).

pcl::search::KdTree<pcl::PointXYZ>::Ptr tree (new pcl::search::KdTree<pcl::PointXYZ> ());

ne.setSearchMethod (tree);

// Output datasets

pcl::PointCloud<pcl::Normal>::Ptr cloud_normals (new pcl::PointCloud<pcl::Normal>);

// Use all neighbors in a sphere of radius 3cm

ne.setRadiusSearch (0.03);

// Compute the features

ne.compute (*cloud_normals);

// cloud_normals->points.size () should have the same size as the input indicesptr->size ()

}

 

以上是 PCL1.8.1点的法向量 的全部内容, 来源链接: utcz.com/z/531583.html

回到顶部