sift点云特整提取,时间个数
#include <iostream>
#include <pcl/io/pcd_io.h>
#include <pcl/point_types.h>
#include <pcl/common/io.h>
#include <pcl/keypoints/sift_keypoint.h>
#include <pcl/features/normal_3d.h>
#include <pcl/visualization/pcl_visualizer.h>
#include <pcl/console/time.h>
#include <time.h>
using namespace std;
namespace pcl
{
template<>
struct SIFTKeypointFieldSelector<PointXYZ>
{
inline float
operator () (const PointXYZ &p) const
{
return p.z;
}
};
}
int
main(int argc, char *argv[])
{
clock_t startTime, endTime;
startTime = clock();
pcl::PointCloud<pcl::PointXYZ>::Ptr cloud_xyz(new pcl::PointCloud<pcl::PointXYZ>);
pcl::io::loadPCDFile("C:\\Users\\23124\\source\\常用的三维点云数据\\cloud1.pcd", *cloud_xyz);//将第二个命令行参数所代表的文件作为输入文件读入
const float min_scale = atof(argv[2]);//尺度空间中最小尺度的标准偏差
const int n_octaves = atoi(argv[3]);//高斯金字塔中组的数目
const int n_scales_per_octave = atoi(argv[4]);//每组计算的尺度数目
const float min_contrast = atof(argv[5]);//设置关键点检测的阈值
//SIFT关键点检测
pcl::SIFTKeypoint<pcl::PointXYZ, pcl::PointWithScale> sift;//创建sift关键点检测对象
pcl::PointCloud<pcl::PointWithScale> result;//SIFT关键点提取结果
sift.setInputCloud(cloud_xyz);//设置输入点云
pcl::search::KdTree<pcl::PointXYZ>::Ptr tree(new pcl::search::KdTree<pcl::PointXYZ>());
sift.setSearchMethod(tree);//创建一个空的kd树对象tree,并把它传递给sift检测对象
sift.setScales