NARF特征点:深度突变位置进行边缘检测、测度表面变化的系数及主方向;
Harris特征点:2D采用图像梯度,而3D采用点云表面法向量;
……
深度图像提取NARF特征点
//深度图像边缘提取器
pcl::RangeImageBorderExtractor range_image_border_extractor;
//narf特征点
pcl::NarfKeypoint narf_keypoint_detector(&range_image_border_extractor);
//输入深度图像
narf_keypoint_detector.setRangeImage(&range_image);
//计算特征点索引
pcl::PointCloud<int> keypoint_indices;
narf_keypoint_detector.compute(keypoint_indices);
SIFT特征点提取
//头文件
#include <pcl/keypoints/sift_keypoint.h>
//创建SIFT关键点
pcl::SIFTKeypoint<pcl::PointXYZ,pcl::PointWithScale> sift;
pcl::PointCloud<pcl::PointWithScale> result;
//输入点云
sift.setInputCloud(cloud);
//创建kd树
pcl::search::KdTree<pcl::PointXYZ>::Ptr kdtree(new pcl::search::KdTree<pcl::PointXYZ>());
//kd树输入SIFT
sift.setSearchMethod(kdtree);
//设置搜索的尺度范围
sift.setScales(min_scale,n_octaves,n_scales_per_octave);
//设置特征点检测阈值
sift.setMinimumContrast(min_contrast);
//SIFT特征提取结果
copyPointCloud(result,*cloud_sift);
Harris特征点提取
//头文件
#include <pcl/keypoints/harris_3D.h>
//声明harris特征点与检测器
pcl::PointCloud<pcl::PointXYZI>::Ptr harris_keypoints(new pcl::PointCloud<pcl::PointXYZI>());
pcl::HarrisKeyPoint3D<pcl::PointXYZ,pcl::PointXYZI,pcl::Normal> *harris_detector = new pcl::HarrisKeypoint3D<pcl::PointXYZ,pcl::PointXYZI,pcl::Normal>;
//设置harris提取参数
harris_detector->setRadius(0.1f);
harris_detector->setRadiusSearch(0.1f);
harris_detector->setInputCloud(cloud);
//计算特征点
harris_detector->compute(*harris_keypoints);