PCL_FPFH特征提取及直方图显示
来源:互联网 发布:江西江铃集团 知乎 编辑:程序博客网 时间:2024/06/06 06:09
#include <iostream>#include <pcl/io/pcd_io.h> #include <pcl/point_types.h> #include <pcl/visualization/cloud_viewer.h> #include <pcl/visualization/histogram_visualizer.h>#include <pcl/point_types.h>#include <pcl/features/fpfh.h>#include <pcl/filters/fast_bilateral.h>#include <pcl/filters/passthrough.h>#include <pcl/filters/radius_outlier_removal.h>#include <pcl/filters/voxel_grid.h>#include <pcl/features/normal_3d.h>#include <pcl/visualization/pcl_plotter.h>#include <vtkAutoInit.h> #define vtkRenderingCore_AUTOINIT 3(vtkInteractionStyle,vtkRenderingFreeType,vtkRenderingOpenGL2) VTK_MODULE_INIT(vtkRenderingOpenGL);int main(){pcl::PointCloud<pcl::PointXYZ>::Ptr cloud(new pcl::PointCloud<pcl::PointXYZ>);if (pcl::io::loadPCDFile<pcl::PointXYZ>("test_pcd.pcd", *cloud) == -1) //* 读入PCD格式的文件,如果文件不存在,返回-1 {PCL_ERROR("Couldn't read file test_pcd.pcd \n"); //文件不存在时,返回错误,终止程序。 return (-1);}pcl::PointCloud<pcl::PointXYZ>::Ptr cloud_fillter(new pcl::PointCloud<pcl::PointXYZ>);pcl::PassThrough<pcl::PointXYZ> pass;pass.setInputCloud(cloud);pass.setFilterFieldName("z");pass.setFilterLimits(0.0, 1.0);pass.filter(*cloud_fillter);pcl::PointCloud<pcl::PointXYZ>::Ptr cloud_filltered(new pcl::PointCloud<pcl::PointXYZ>);pcl::VoxelGrid<pcl::PointXYZ> sor;sor.setInputCloud(cloud_fillter);sor.setLeafSize(0.01f, 0.01f, 0.01f);sor.filter(*cloud_filltered);/*pcl::PointCloud<pcl::PointXYZ>::Ptr cloud_outerfillter(new pcl::PointCloud<pcl::PointXYZ>);pcl::RadiusOutlierRemoval<pcl::PointXYZ> outrem;outrem.setInputCloud(cloud_filltered);outrem.setRadiusSearch(0.8);outrem.setMinNeighborsInRadius(5);outrem.filter(*cloud_outerfillter);*/pcl::PointCloud<pcl::Normal>::Ptr normals(new pcl::PointCloud<pcl::Normal>());pcl::NormalEstimation<pcl::PointXYZ, pcl::Normal> ne;ne.setInputCloud(cloud_filltered);ne.setSearchSurface(cloud);pcl::search::KdTree<pcl::PointXYZ>::Ptr tree(new pcl::search::KdTree<pcl::PointXYZ>());ne.setSearchMethod(tree);pcl::PointCloud<pcl::Normal>::Ptr cloud_normals(new pcl::PointCloud<pcl::Normal>);ne.setRadiusSearch(0.03);ne.compute(*cloud_normals);pcl::FPFHEstimation<pcl::PointXYZ, pcl::Normal, pcl::FPFHSignature33> fpfh;fpfh.setInputCloud(cloud_filltered);fpfh.setInputNormals(cloud_normals);pcl::search::KdTree<pcl::PointXYZ>::Ptr tree_1(new pcl::search::KdTree<pcl::PointXYZ>);fpfh.setSearchMethod(tree_1);pcl::PointCloud<pcl::FPFHSignature33>::Ptr fpfhs(new pcl::PointCloud<pcl::FPFHSignature33>());fpfh.setRadiusSearch(0.05);fpfh.compute(*fpfhs);boost::shared_ptr<pcl::visualization::PCLVisualizer> viewer(new pcl::visualization::PCLVisualizer("3D Viewer"));pcl::visualization::PCLPlotter plotter;plotter.addFeatureHistogram<pcl::FPFHSignature33>(*fpfhs,"fpfh",100);int v1(0);viewer->createViewPort(0.0, 0.0, 0.5, 1.0, v1);viewer->setBackgroundColor(0, 0, 0, v1);viewer->addPointCloud<pcl::PointXYZ>(cloud, "sample cloud1", v1);int v2(0);viewer->createViewPort(0.5, 0.0, 1.0, 1.0, v2);viewer->addPointCloud<pcl::PointXYZ>(cloud_filltered, "sample cloud2", v2);viewer->setBackgroundColor(0.3, 0.3, 0.3, v2);viewer->addPointCloudNormals<pcl::PointXYZ, pcl::Normal>(cloud_filltered, cloud_normals, 10, 0.2, "normals", v2);viewer->initCameraParameters();while (!viewer->wasStopped()){plotter.plot();viewer->spinOnce(100);boost::this_thread::sleep(boost::posix_time::microseconds(100000));}return 0;}
关于这部分的原理可以看http://pointclouds.org/documentation/tutorials/fpfh_estimation.php#fpfh-estimation,这个PCL官网解释的还是很清楚的,其实我们只要知道这个特征的目的就好了,它是3D特征描述符的一种,所以它就类似于二维图像中的sift特征一样,可以用来做点云的识别,后期的VFH特征其实也是基于这个的。
阅读全文
0 0
- PCL_FPFH特征提取及直方图显示
- 颜色直方图特征提取
- 直方图对特征提取的应用
- 颜色特征提取(一)------颜色直方图
- C++ 图像RGB直方图特征提取
- SIFT特征提取及应用
- DeltasFeatureExtractor API 及特征提取
- DeltasFeatureExtractor API 及特征提取
- 用Python和OpenCV提取颜色直方图特征
- HOG特征及在opencv中的提取
- HOG特征提取,详细步骤及源码
- 语音信号预处理及特征参数提取
- SIFT特征提取算法小结及实现
- pcap数据包解析及数据特征提取
- caffe python接口:参数及特征提取
- 纹理特征提取 及LBP纹理特征matlab实现
- caffe之特征图可视化及特征提取
- QT字模提取及显示
- python使用PyCharm调试Scrapy程序
- 二叉树的一些基本操作
- XGBoost 与 Boosted Tree
- Zynq-Linux移植学习笔记之七-网络驱动
- tomcat服务器重装与myeclipse JavaWeb开发的几点注意事项
- PCL_FPFH特征提取及直方图显示
- QT学习之explicit
- 消息队列两种模式
- 图灵机器人API 2.0 SDK for PHP
- Linux 执行DB2数据库导入存储过程/自定义函数脚本文件命令
- 常用docker命令,及一些坑
- test
- 基于Unity3D的2d拾宝游戏(一)
- 阿里架构之旅(三)——动物园管理者zookeeper