Feature

一个好的点特征描述子应不受以下因素影响:

  • rigid transformations - that is, 3D rotations and 3D translations in the data should not influence the resultant feature vector F estimation;

  • varying sampling density - in principle, a local surface patch sampled more or less densely should have the same feature vector signature;

  • noise - the point feature representation must retain the same or very similar values in its feature vector in the presence of mild noise in the data.

The most useful example when setSearchSurface() should be used, is when we have a very dense input dataset, but we do not want to estimate features at all the points in it, but rather at some keypoints discovered using the methods in pcl_keypoints, or at a downsampled version of the cloud (e.g., obtained using a pcl::VoxelGrid<T> filter). In this case, we pass the downsampled/keypoints input via setInputCloud(), and the original data as setSearchSurface().

NormalEstimation

通常经过计算无法确定法向量的朝向,然而如果采集点云时的视角Vp已知时,可以校正法向量朝向视角方向:

 通过调用函数 flipNormalTowardsViewpoint (const PointT &point, float vp_x, float vp_y, float vp_z, Eigen::Vector4f &normal)实现。

默认视角为(0,0,0),可通过setViewPoint (float vpx, float vpy, float vpz)函数进行修改。

NormalEstimation estimates local surface properties (surface normals and curvatures)at each 3D point. If PointOutT is specified as pcl::Normal, the normal is stored in the first 3 components (0-2), and the curvature is stored in component 3.该类不支持多线程。

1 pcl::PointCloud<pcl::PointXYZ>::Ptr cloud(new pcl::PointCloud<pcl::PointXYZ>);
2     pcl::io::loadPCDFile("D:\pcd\rabbit.pcd",*cloud);
3     pcl::NormalEstimation<pcl::PointXYZ, pcl::Normal> ne;
4     ne.setInputCloud(cloud);
5     pcl::search::KdTree<pcl::PointXYZ>::Ptr tree(new pcl::search::KdTree<pcl::PointXYZ>());
6     ne.setSearchMethod(tree);
7     pcl::PointCloud<pcl::Normal>::Ptr cloud_normals(new pcl::PointCloud<pcl::Normal>);
8     ne.setRadiusSearch(0.03);
9     ne.compute(*cloud_normals);
View Code

 NormalEstimationOMP

NormalEstimationOMP estimates local surface properties at each 3D point, such as surface normals and curvatures, in parallel, using the OpenMP standard.

IntegralImageNormalEstimation

If your dataset is organized (e.g., acquired using a TOF camera, stereo camera, etc – that is, it has a width and a height), for even faster results can use IntergerImageNormalEstimation. 积分图像法向量估计

 PFH descriptor

PFH(Point Feature Histogram)

The goal of the PFH formulation is to encode a point’s k-neighborhood geometrical properties by generalizing the mean curvature around the point using a multi-dimensional histogram of values. This highly dimensional hyperspace provides an informative signature for the feature representation, is invariant to the 6D pose of the underlying surface, and copes very well with different sampling densities or noise levels present in the neighborhood.

A Point Feature Histogram representation is based on the relationships between the points in the k-neighborhood and their estimated surface normals. Simply put, it attempts to capture as best as possible the sampled surface variations by taking into account all the interactions between the directions of the estimated normals. The resultant hyperspace is thus dependent on the quality of the surface normal estimations at each point.

 FPFH descriptor

FPFHEstimation

FPFHEstimationOMP

 implementation of FPFH estimation which uses multi-core/multi-threaded paradigms using OpenMP to speed the computation. 

VFH descriptor

Viewpoint Feature Histogram

原文地址:https://www.cnblogs.com/larry-xia/p/11014762.html