隐式形状模型

在这次我们将学会隐式形状模型算法通过pcl::ism::ImplicitShapeModel这个类来实现。这个算法是把Hough转换和特征近似包进行结合。有训练集,这个算法将计算一个确定的模型用来预测一个物体的中心。

这个算法由两部分组成,第一部分是训练,第二部分是物体识别。它有以下6步:

1.先发现特征点。这只是一个训练点云的简化。在这个步骤里面所有的点云都将被简化,通过体元栅格这个途径。余下来的点就是特征点。

2.对特征点用FPFH进行预测。

3.通过k-means这个算法进行聚类。

4.计算每一个实例里面的对中心的方向。

5.对每一个视觉信息,数学权重将会被计算。

6.每一个特征点的权重将会被计算。

我们在训练的过程结束以后,接下来就是对象搜索的进程。

1.特征点检测。

2.每个点云特征点的特征检测。

3.对于每个特征搜索最近的视觉信息。

4.对于每一个特征:

对于每一个实例:

     对相应的方向进行决策。

5.前面的步骤给了我们一个方向集用来预测中心与能量。

上面的步骤很多涉及机器学习之类的,大致明白那个过程即可

代码部分:

第一步我们需要点云的训练集。在下面是一些可以用的训练集.

Cat (train)

Horse (train)

          Lioness (train)

          Michael (train)

Wolf (train)

用来检测的点云:

                       Cat

                       Horse

                        Lioness

                        Michael

                         Wolf

 

下面是代码

#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:
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值