//训练过程很漫长/*介绍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 word4.对每个特征 计算训练模型的特征的相似度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::PointXYZ>());if(pcl::io::loadPCDFile <pcl::PointXYZ>(argv[i_cloud * 2 + 1], *tr_cloud) == -1)return  (-1);pcl::PointCloud<pcl::Normal>::Ptr tr_normals =    (new pcl::PointCloud<pcl::Normal>)->makeShared();normal_estimator.setInputCloud                    (tr_cloud);normal_estimator.compute                          (*tr_normals);unsigned int tr_class = static_cast<unsigned int> (strtol(argv[i_cloud * 2 + 2], 0, 10));training_clouds.push_back                         (tr_cloud);training_normals.push_back                        (tr_normals);training_classes.push_back                        (tr_class);}pcl::FPFHEstimation<pcl::PointXYZ, pcl::Normal, pcl::Histogram<153> >::Ptr fpfh(new pcl::FPFHEstimation<pcl::PointXYZ, pcl::Normal, pcl::Histogram<153> >);fpfh->setRadiusSearch(30.0);pcl::Feature< pcl::PointXYZ, pcl::Histogram<153> >::Ptr feature_estimator(fpfh);pcl::ism::ImplicitShapeModelEstimation<153, pcl::PointXYZ, pcl::Normal> ism;ism.setFeatureEstimator(feature_estimator);ism.setTrainingClouds  (training_clouds);ism.setTrainingNormals (training_normals);ism.setTrainingClasses (training_classes);ism.setSamplingSize    (2.0f);pcl::ism::ImplicitShapeModelEstimation<153, pcl::PointXYZ, pcl::Normal>::ISMModelPtr model(new pcl::features::ISMModel);std::cout << "start training" << std::endl;ism.trainISM            (model);std::cout << "finish training" << std::endl;std::string file        ("trained_ism_model.txt");model->saveModelToFile  (file);model->loadModelFromfile(file);unsigned int testing_class = static_cast<unsigned int> (strtol(argv[argc - 1], 0, 10));pcl::PointCloud<pcl::PointXYZ>::Ptr testing_cloud(new pcl::PointCloud<pcl::PointXYZ>());if (pcl::io::loadPCDFile <pcl::PointXYZ>(argv[argc - 2], *testing_cloud) == -1)return (-1);pcl::PointCloud<pcl::Normal>::Ptr testing_normals = (new pcl::PointCloud<pcl::Normal>)->makeShared();normal_estimator.setInputCloud(testing_cloud);normal_estimator.compute(*testing_normals);pcl::features::ISMVoteList<pcl::PointXYZ>::Ptr vote_list = ism.findObjects(model,testing_cloud,testing_normals,testing_class);double radius = model->sigmas_[testing_class] * 10.0;double sigma = model->sigmas_[testing_class];std::vector<pcl::ISMPeak, Eigen::aligned_allocator<pcl::ISMPeak> > strongest_peaks;vote_list->findStrongestPeaks(strongest_peaks, testing_class, radius, sigma);pcl::PointCloud <pcl::PointXYZRGB>::Ptr colored_cloud = (new pcl::PointCloud<pcl::PointXYZRGB>)->makeShared();colored_cloud->height = 0;colored_cloud->width = 1;pcl::PointXYZRGB point;point.r = 255;point.g = 255;point.b = 255;for (std::size_t i_point = 0; i_point < testing_cloud->size(); i_point++){point.x = (*testing_cloud)[i_point].x;point.y = (*testing_cloud)[i_point].y;point.z = (*testing_cloud)[i_point].z;colored_cloud->points.push_back(point);}colored_cloud->height += testing_cloud->size();point.r = 255;point.g = 0;point.b = 0;for (std::size_t i_vote = 0; i_vote < strongest_peaks.size(); i_vote++){point.x = strongest_peaks[i_vote].x;point.y = strongest_peaks[i_vote].y;point.z = strongest_peaks[i_vote].z;colored_cloud->points.push_back(point);}colored_cloud->height += strongest_peaks.size();pcl::visualization::CloudViewer viewer("Result viewer");viewer.showCloud(colored_cloud);while (!viewer.wasStopped()){}return (0);
}

PCL implicit shape model 做目标识别分类相关推荐

  1. 使用CNN做文本分类——将图像2维卷积换成1维

    使用CNN做文本分类from __future__ importdivision, print_function, absolute_importimporttensorflow as tfimpor ...

  2. keras提取模型中的某一层_Keras做图片分类(四):迁移学习--猫狗大战实战

    本项目数据集来自kaggle竞赛,地址: https://www.kaggle.com/c/dogs-vs-cats-redux-kernels-edition/data 数据的训练集放在train文 ...

  3. Word Averaging模型做文本分类 稳定效果好模型简单

    利用WORDAVG模型做文本分类   模型简单 效果号 简单思想就是  将每个词向量在 句子维度进行求平均  可以用avgpool来做平均池化 然后用平均后的向量作为句子向量 进行文本分类 后面我们还 ...

  4. transformer做文本分类的keras实现完整版

    背景 目前csdn上搜索到的keras的版本实现,排在前面的是: https://blog.csdn.net/xiaosongshine/article/details/86595847 但是,这个文 ...

  5. bert使用做文本分类_使用BERT进行深度学习的多类文本分类

    bert使用做文本分类 Most of the researchers submit their research papers to academic conference because its ...

  6. libsvm回归参数寻优cgp_【lightgbm/xgboost/nn代码整理二】xgboost做二分类,多分类以及回归任务...

    1.简介 该部分是代码整理的第二部分,为了方便一些初学者调试代码,作者已将该部分代码打包成一个工程文件,包含简单的数据处理.xgboost配置.五折交叉训练和模型特征重要性打印四个部分.数据处理部分参 ...

  7. pytorch 入门学习使用逻辑斯蒂做二分类-6

    pytorch 入门学习使用逻辑斯蒂做二分类 使用pytorch实现逻辑斯蒂做二分类 import torch import torchvision import numpy as np import ...

  8. 使用bert模型做句子分类

    使用bert模型微调做下游任务,在goole发布的bert代码和huggingface的transformer项目中都有相应的任务,有的时候只需要把代码做简单的修改即可使用.发现代码很多,我尝试着自己 ...

  9. tf第十二讲:TextCNN做文本分类的实战代码

      大家好,我是爱编程的喵喵.双985硕士毕业,现担任全栈工程师一职,热衷于将数据思维应用到工作与生活中.从事机器学习以及相关的前后端开发工作.曾在阿里云.科大讯飞.CCF等比赛获得多次Top名次.现 ...

  10. 贝叶斯分类器做文本分类案例

    贝叶斯分类器做文本分类 文本分类是现代机器学习应用中的一大模块,更是自然语言处理的基础之一.我们可以通过将文字数据处理成数字数据,然后使用贝叶斯来帮助我们判断一段话,或者一篇文章中的主题分类,感情倾向 ...

最新文章

  1. 各种大型网站技术架构
  2. Shell终端快捷键总结(mac)
  3. python大一考试_python 考试补缺
  4. 图文并茂——使用xfire编写webservice,并通过C#调用
  5. 服务器故障英文邮件,服务器一般故障排除(国外英文资料).doc
  6. 有苹果表的快看看!屏幕存在破裂可能的 苹果将免费更换了
  7. 为什么需要字节对齐?
  8. python经典程序-python经典程序
  9. jenkins内置环境变量
  10. 远程登录 - telnet、mstsc等工具的使用及遇到的问题
  11. 简述linux的系统结构,Linux系统基础知识(一)
  12. SG函数(hdu1847)
  13. YOLACT论文阅读及解析
  14. Tcp网络通信中各个状态的含义
  15. 安卓导航车机root方法_车机测试 | 测试比亚迪e1车机系统
  16. Chrome 安装插件 win10 Edge 安装 位置
  17. 局域网即时通讯软件怎么部署
  18. 长短期记忆网络 Long Short-Term Memory
  19. win10 休眠设置无效_win10电脑休眠后无法唤醒的解决办法
  20. 346雷达有多少tr组件_346A型有源相控阵雷

热门文章

  1. Flutter使用Clip裁剪Widget
  2. 网线水晶头接法图解8根顺序
  3. html5 扩展 cs6,Dreamweaver CS6提高了HTML5工具的效率
  4. Python 毕设精品实战案例——快速索引目录Part2
  5. 对于提高团队开会效率的看法
  6. JAVA-银行卡归属地查询
  7. 愿你与生活交手多年,依然满怀新鲜,
  8. 积分上限函数求导总结
  9. 域名在国外注册的服务器能查到吗,对于国外域名查询,你还需要知道这些!
  10. yyds,Python爬虫从小白到Bigboss全套学习路线+视频+资料