PCL函数库摘要——关键点

15 篇文章 7 订阅

1.Class pcl::Keypoint< PointInT, PointOutT >

类Keypoint是所有关键点检测相关类的基类,定义基本接口,具体实现由子类来完成。

#include <pcl/2d/keypoint.h>
void  harrisCorner (ImageType &output, ImageType &input, const float sigma_d, const float sigma_i, const float alpha, const float thresh) 
  
void  hessianBlob (ImageType &output, ImageType &input, const float sigma, bool SCALE) 
  
void  hessianBlob (ImageType &output, ImageType &input, const float start_scale, const float scaling_factor, const int num_scales) 
  
void  imageElementMultiply (ImageType &output, ImageType &input1, ImageType &input2) 
  
Keypoint () 
//  构造函数  
virtual  ~Keypoint () 
//  析构函数  
virtual void  setSearchSurface (const PointCloudInConstPtr &cloud) 
//  设置搜索时所用搜索点云, cloud为指向点云对象的指针引用。
PointCloudInConstPtr  getSearchSurface () 
//   获得搜索时所用搜索点云指针。
void  setSearchMethod (const KdTreePtr &tree) 
//  设置内部算法实现时所用的搜索对象, tree为指向kdtree或octree对应的指针引用。
KdTreePtr  getSearchMethod () 
//  获得内部算法实现时所用的搜索对象。
double  getSearchParameter () 
//  获取内部搜索参数。
void  setKSearch (int k) 
//  设置k近邻搜索时所用的k参数。
int  getKSearch () 
//  获得k近邻搜索时所用的k参数。
void  setRadiusSearch (double radius) 
//  设置半径搜索时所用的半径radius参数。
double  getRadiusSearch () 
//  获得半径搜索时所用的半径radius参数。
pcl::PointIndicesConstPtr  getKeypointsIndices () 
//  获得关键点索引
void  compute (PointCloudOut &output) 
//  执行关键点检测,检测结果保存在output中。
int  searchForNeighbors (int index, double parameter, std::vector< int > &indices, std::vector< float > &distances) const 
//  采用setSearchMethod设置的搜索对象﹐以及 setSearchSurface设置的搜索点云,进行近邻搜索,返回近邻在点云中的索引向量indices,以及对应的距离向量dis-tance,其中 index为查询点的索引, parameter为搜索时所用的参数半径radius或者k。
void  setInputCloud (const PointCloudConstPtr &cloud) 
//  设置输入点云,cloud为指向点云的指针引用,要求不能被函数内部改变。
void setIndices (const IndicesPtr &indices)
//  与setInputCloud配合使用, indices为指向点云索引向量的指针引用,如果设置了此函数则算法的输入点云为indices中索引向量指定的点云集合,否则为setInput-Cloud设置的整个输入点云。
void setIndices (const IndicesConstPtr &indices)
//  同上,只是要求indices不能被函数改变。
void setIndices (const PointIndicesConstPtr &indices)
//  同上,但indices是 PointIndices 的结构体链表,可以看做是点云索引向量指针的链表理解。
void setIndices (size_t row_start,size_t col_start,size_t nb_rows,size_t nb_cols)
//  与setInputCloud配合使用,此函数只限于有序点云,如果设置了此函数则算法的输入点云为第row_start行,第 col_start列开始, nb_rows行和nb_cols列限定的矩形区域所覆盖的点云,否则为setInputCloud设置的整个输入点云。

2.Class pcl::HarrisKeypoint2D< PointInT, PointOutT, IntensityT >

类HarrisKeypoint2D实现基于点云的强度字段的 harris关键点检测子,其中包含了多种不同的harris关键点检测算法的变种,例如由JA Noble,Lowe、Tomasi等提出的Harris关键点检测算法。

#include <pcl/keypoints/harris_2d.h>
HarrisKeypoint2D (ResponseMethod method=HARRIS, int window_width=3, int window_height=3, int min_distance=5, float threshold=0.0) 
//  重构函数, method设置需要采用那种关键点检测方法,有HARRIS,NOBLE,LOWE,TOMASI 四种方法﹐默认为HARRIS, window_width , window_height为检测窗口的宽度和高度,min_distance为两个关键点之间允许的最小距离, threshold为判断是否为关键点的感兴趣程度的阈值,小于该阈值的点被忽略,大于的则认为是关键点。
void  setMethod (ResponseMethod type) 
//  设置检测方法。
void  setWindowWidth (int window_width) 
//  设置检测窗口宽度。
void  setWindowHeight (int window_height) 
//  设置检测窗口高度。
void  setSkippedPixels (int skipped_pixels) 
//  设置在检测时每次跳过的像素数目。
void  setMinimalDistance (int min_distance) 
//  设置候选关键点之间的最小距离。
void  setThreshold (float threshold) 
//  设置感兴趣阈值。
void  setNonMaxSupression (bool=false) 
//  设置是否对小于感兴趣阈值的点进行剔除,如果为true则进行剔除,对结果进行优化,如果为false则返回每个点,无论其感兴趣值大于或小于感兴趣阈值。
void  setRefine (bool do_refine) 
//  设置是否对所得关键点结果进行重新计算优化。
void  setNumberOfThreads (unsigned int nr_threads=0) 
//  设置该算法如果采用OpenMP并行机制﹐能够创建的线程数目。
void  compute (PointCloudOut &output) 
//  计算获取关键点,存储在output中。

3.Class pcl::HarrisKeypoint3D< PointInT, PointOutT, NormalT >

类HarrisKeypoint3D和 HarrisKeypoint2D类似,但是它没有在点云的强度空间检测关键点,而是利用点云的3D空间的信息表面法线向量来进行关键点检测。

#include <pcl/keypoints/harris_3d.h>
HarrisKeypoint3D (ResponseMethod method=HARRIS, float radius=0.01f, float threshold=0.0f) 
//  重构函数, method设置需要采用哪种关键点检测方法,有HARRIS,NOBLE,LOWE,TOMASI,CURVATURE五种方法﹐默认为HARRIS,radius为法线估计的搜索半径,同时也是计算兴趣值的支持区域, threshold为判断是否为关键点的感兴趣程度的阈值,小于该阈值的点被忽略,大于的则认为是关键点。
virtual  ~HarrisKeypoint3D () 
//  空析构函数
virtual void  setInputCloud (const PointCloudInConstPtr &cloud) 
//  设置输入点云,cloud为指向点云的指针引用,要求不能被函数内部改变。  
void  setMethod (ResponseMethod type) 
//  设置检测方法。  
void  setRadius (float radius) 
//  设置法线估计的搜索半径。
void  setThreshold (float threshold) 
//  设置判断是否为关键点的感兴趣程度的阈值。
void  setNonMaxSupression (bool=false) 
//  设置是否对小于感兴趣阈值的点进行剔除,如果为true则进行剔除,对结果进行优化,如果为false则返回每个点,无论其感兴趣值大于或小于感兴趣阈值。
void  setRefine (bool do_refine) 
//  设置是否对所得关键点结果进行重新计算优化。
void  setNormals (const PointCloudNConstPtr &normals) 
//  如果预计算法线可用,则设置法线。
virtual void  setSearchSurface (const PointCloudInConstPtr &cloud) 
//  设置搜索时所用搜索点云, cloud为指向点云对象的指针引用。  
void  setNumberOfThreads (unsigned int nr_threads=0) 
//  设置该算法如果采用OpenMP并行机制﹐能够创建的线程数目。

4.Class pcl::HarrisKeypoint6D< PointInT, PointOutT, NormalT >

类HarrisKeypoint6D与 HarrisKeypoint2D类似,只是利用了欧氏空间域XYZ或者强度域来确定候选关键点,或者前两者的交集,即同时满足XYZ域和强度域的关键点为候选关键点。

#include <pcl/keypoints/harris_6d.h>
HarrisKeypoint6D (float radius=0.01, float threshold=0.0) 
//  重构函数,注意此处并没有方法选择的参数,通过源代码可以看出其只采用To-masi 提出的方法实现关键点检测, radius为法线估计的搜索半径,同时也是计算兴趣值的支持区域, threshold为判断是否为关键点的感兴趣程度的阈值,小于该阈值的点被忽略,大于的则认为是关键点。
virtual  ~HarrisKeypoint6D () 
//  空析构函数
void  setRadius (float radius) 
//  设置法线估计的搜索半径。
void  setThreshold (float threshold) 
//  设置判断是否为关键点的感兴趣程度的阈值。
void  setNonMaxSupression (bool=false) 
//  设置是否对小于感兴趣阈值的点进行剔除,如果为true则进行剔除,对结果进行优化,如果为false则返回每个点,无论其感兴趣值大于或小于感兴趣阈值。
void  setRefine (bool do_refine) 
//  设置是否对所得关键点结果进行重新计算优化。
virtual void  setSearchSurface (const PointCloudInConstPtr &cloud) 
//  设置搜索时所用搜索点云, cloud为指向点云对象的指针引用。   
void  setNumberOfThreads (unsigned int nr_threads=0) 
//  设置该算法如果采用OpenMP并行机制﹐能够创建的线程数目。

5.Class pcl::NarfKeypoint

类NarfKeypoint实现提取NARF(Normal Aligned Radial Feature)关键点,输入为一副深度图像,输出为NARF关键点,该类检测到的NARF常与NARF点特征描述子配合使用,以便后期配准、识别等应用,详细请参考文献[NARF:3D RangeImage Features for Object Recognition]。。

#include <pcl/keypoints/narf_keypoint.h>
NarfKeypoint (RangeImageBorderExtractor *range_image_border_extractor=NULL, float support_size=-1.0f) 
//  重构函数, range_image_border_extractor是对深度图像进行边缘检测的对象指针,默认为空,support_size为检测是用支持域的大小。
virtual  ~NarfKeypoint () 
//  析构函数
void  clearData () 
//  删除与当前深度图像计算所得到的相关数据。
void  setRangeImageBorderExtractor (RangeImageBorderExtractor *range_image_border_extractor) 
//  设置range_image_border_extractor是对深度图像进行边缘检测的对象指针,此项在计算之前必须设置。
RangeImageBorderExtractor *  getRangeImageBorderExtractor () 
//  获得对深度图像进行边缘检测的对象指针。
void  setRangeImage (const RangeImage *range_image) 
//  设置输入的深度图像。
float *  getInterestImage () 
//  获取深度图像中每个点的感兴趣值。
const ::pcl::PointCloud< InterestPoint > &  getInterestPoints () 
//  获取深度图像中关键点,返回对象InterestPoint中存储了点以及改点对应的感兴趣值。
const std::vector< bool > &  getIsInterestPointImage () 
//  返回的布尔值向量中包含整幅深度图像各个点是否为关键点,深度图像中为关键点的设置为true,否则设置为false。
Parameters &  getParameters () 
//  获取 Parameters结构体对象引用,其中存储了与Narf关键点提取算法的很多参数:
float  support_size 
//  检测关键点的支持区域。
int  max_no_of_interest_points 
//  返回关键点数目的上限。
float  min_distance_between_interest_points 
//  关键点之间的最小距离,影响支持区域。
float  optimal_distance_to_high_surface_change 
//  关键点与表面特征变化大的位置之间的距离。
float  min_interest_value 
//  候选关键点感兴趣值下限。
float  min_surface_change_score 
//  候选关键点表面特征变化大小下限。
int  optimal_range_image_patch_size 
//  计算每个关键点时考虑的距离图像大小(像素)。
float  distance_for_additional_points 
//  所有与最大兴趣值点之间距离在distance_for_additional_points之内的点,只要感兴趣值大于min_interest_value,该点则成为关键点候选点。
bool  add_points_on_straight_edges 
//  如果该值设置为true,则在空间直的边缘处添加关键点,表示空间曲面变化大。
bool  do_non_maximum_suppression 
//  如果该值设置为false,只要大于min_interest_value兴趣值的点都会被加入到关键点队列。
bool  no_of_polynomial_approximations_per_point 
//  如果该值设置为true,则对于每个关键点的位置,需要采用双变量多项式插值获取,这样获取的位置更精确。
int  max_no_of_threads 
//  采用OpenMP机制时,设置的建立线程数的上限。
bool  use_recursive_scale_reduction 
//  如果设置为真,距离图像在小范围内有多个关键点,则调整小分辨率,加快计算速度。
bool  calculate_sparse_interest_image 
//  使用启发式机制,自适应调整那些距离图像区域不需要计算关键点,从而加快计算速度。
const RangeImage &  getRangeImage () 
//  获得range_image_border_extractor_的深度图像。  
void  compute (PointCloudOut &output) 
//  计算获取关键点,存储在output中。


6.Class pcl::SIFTKeypoint< PointInT, PointOutT >

类SIFTKeypoint是将二维图像中的SIFT算子调整后移植到3D空间的SIFT算子的实现。输入为带有XYZ坐标值和强度的点云,输出为点云中的SIFT关键点,关于SIFT算子详细请参考文献[Distinctive image features from scale - invari-ant keypoints]。

#include <pcl/keypoints/sift_keypoint.h>
SIFTKeypoint () 
//  构造函数
void  setScales (float min_scale, int nr_octaves, int nr_scales_per_octave) 
//  设置搜索时与尺度相关参数, min_scale在点云体素尺度空间中标准偏差,点云对应体素栅格中体素的最小尺寸,nr_octaves是检测关键点时体素空间尺度的数目,nr_scales_per_octave为在每一个体素空间尺度下计算高斯空间的尺度时所需的参数。
void  setMinimumContrast (float min_contrast) 
//  设置候选关键点应有的对比度下限。
void  compute (PointCloudOut &output) 
//  计算获取关键点,存储在output中。

7.Class pcl::UniformSampling< PointT >

类UniformSampling实现对点云的统一重采样,具体通过建立点云的空间体素栅格,然后在此基础上实现下采样并且过滤一些数据。所有采样后得到的点用每个体素内点集的重心近似,而不是用每个体素的中心点近似,前者速度较后者慢,但其估计的点更接近实际的采样面。

#include <pcl/filters/uniform_sampling.h>
UniformSampling () 
//  构造函数
virtual  ~UniformSampling () 
//  析构函数
virtual void  setRadiusSearch (double radius) 
//  设置三维栅格叶片大小。
void filter (PointCloudOut &output) 
//  计算并输出经过下采样得到的点云,存储到output。

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值