//训练过程很漫长
/*
介绍implict shape model算法来识别物体,算法组合了通用霍夫变换和Bag of feature方法。
使用一个训练集来训练一个模型,然后用这个模型来匹配场景中出现的目标
关于训练:6步
1.使用vexel grid方法,来提取关键点
2.关键点特征估计,使用FPFH算法
3.使用k-means方法来得到一个visual words 词典
4.计算每个样本的相对于中心的方向
5.计算visual word 的统计权重
6.对每个关键点计算习得权重
关于识别:5步
1.计算关键点
2.特征估计
3.计算最相近的visual word
4.对每个特征 计算训练模型的特征的相似度
5.给定参数计算匹配的目标
*/
#include <iostream>
#include <pcl/io/pcd_io.h>
#include <pcl/features/normal_3d.h>
#include <pcl/features/feature.h>
#include <pcl/visualization/cloud_viewer.h>
#include <pcl/features/fpfh.h>
#include <pcl/features/impl/fpfh.hpp>
#include <pcl/recognition/implicit_shape_model.h>
#include <pcl/recognition/impl/implicit_shape_model.hpp>
int
main(int argc, char** argv)
{
if (argc == 0 || argc % 2 == 0)
return (-1);
unsigned int number_of_training_clouds = (argc - 3) / 2;
pcl::NormalEstimation<pcl::PointXYZ, pcl::Normal> normal_estimator; //法向量
normal_estimator.setRadiusSearch(25.0);
std::vector<pcl::PointCloud<pcl::PointXYZ>::Ptr> training_clouds;
std::vector<pcl::PointCloud<pcl::Normal>::Ptr> training_normals;
std::vector<unsigned int> training_classes;
for (unsigned int i_cloud = 0; i_cloud < number_of_training_clouds - 1; i_cloud++)
{
pcl::PointCloud<pcl::PointXYZ>::Ptr tr_cloud (new pcl::PointCloud<pcl
PCL implicit shape model 做目标识别分类
最新推荐文章于 2024-04-21 22:22:55 发布