ch10——10.3.3PCL中的Harris关键点提取

1.Harris算子是常见的特征检测算子,既可以提取角点又可以提取边缘点。与2D Harris角点检测原理不同,3D Harris角点检测利用的就是点云的法向量信息。

2.代码

#include 
#include 
#include 
#include 
#include 
#include //harris特征点估计类头文件声明
using namespace std;
using namespace pcl;

int main() {
	PointCloud<PointXYZ>::Ptr input_cloud(new PointCloud<PointXYZ>);
	io::loadPCDFile("D:\\pcd\\roorm.pcd", *input_cloud);

	typedef visualization::PointCloudColorHandlerCustom<PointXYZI> ColorHandlerT3;
	
	PointCloud<PointXYZI>::Ptr Harris_keypoints(new PointCloud<PointXYZI>());//存放最后的特征点提取结果
	//实例化一个Harris特征检测对象harris_detector
	HarrisKeypoint3D<PointXYZ, PointXYZI, Normal>* harris_detector = new HarrisKeypoint3D<PointXYZ, PointXYZI, Normal>;
	harris_detector->setRadius(0.1f);//设置法向量估计的半径
	harris_detector->setRadiusSearch(0.1f);//设置关键点估计的近邻搜索半径
	harris_detector->setInputCloud(input_cloud);//设置输入点云
	harris_detector->compute(*Harris_keypoints);//结果存放在Harris_keypoints
	cout << "Harris_keypoints number: " << Harris_keypoints->size() << endl;

	//可视化
	visualization::PCLVisualizer vis("clouds");
	vis.setBackgroundColor(255,255,255);
	vis.addPointCloud(Harris_keypoints, ColorHandlerT3(Harris_keypoints, 255.0, 0.0, 0.0), "Harris_keypoints");
	vis.setPointCloudRenderingProperties(visualization::PCL_VISUALIZER_FONT_SIZE, 8, "Harris_keypoints");
	vis.addPointCloud(input_cloud,"input_cloud");
	vis.setPointCloudRenderingProperties(visualization::PCL_VISUALIZER_COLOR, 0, 0, 0, "input_cloud");
	vis.spin();
	return 0;
}

3.显示
ch10——10.3.3PCL中的Harris关键点提取_第1张图片

你可能感兴趣的:(#,点云库PCL学习教程,计算机视觉)