zoukankan      html  css  js  c++  java
  • PCL 平面模型分割

    点云操作中,平面的分割是经常遇到的问题,下面的例子就是如何利用PCL库提拟合出的参数,之后就可以过滤掉在平面附近的点云。

    #include <iostream>
    #include <pcl/io/pcd_io.h>
    #include <pcl/point_types.h>
    #include <pcl/ModelCoefficients.h>
    #include <pcl/filters/extract_indices.h>
    #include <pcl/sample_consensus/method_types.h>   //随机参数估计方法头文件
    #include <pcl/sample_consensus/model_types.h>   //模型定义头文件
    #include <pcl/segmentation/sac_segmentation.h>   //基于采样一致性分割的类的头文件
    
    //过滤之后的点云数据
    //创建分割对象 -- 检测平面参数
    /*pcl::ModelCoefficients::Ptr coefficients(new pcl::ModelCoefficients); //存储输出的模型的系数
    pcl::PointIndices::Ptr inliers(new pcl::PointIndices); //存储内点,使用的点
    
    pcl::SACSegmentation<pcl::PointXYZ> seg;
    //可选设置
    seg.setOptimizeCoefficients(true);
    //必须设置
    seg.setModelType(pcl::SACMODEL_PLANE); //设置模型类型,检测平面
    seg.setMethodType(pcl::SAC_RANSAC);      //设置方法【聚类或随机样本一致性】
    seg.setMaxIterations(1000);
    seg.setDistanceThreshold(0.01);
    seg.setInputCloud(cloud_ptr_gridfilter);
    seg.segment(*inliers, *coefficients);    //分割操作
    
    //显示模型的系数
    std::cerr << "Model coefficients: " << coefficients->values[0] << " "
    	      << coefficients->values[1] << " "
    	      << coefficients->values[2] << " "
    		<< coefficients->values[3] << std::endl;
    
    // Extract the planar inliers from the input cloud  
    pcl::ExtractIndices<pcl::PointXYZ> extract;
    extract.setInputCloud(cloud_ptr_gridfilter);
    extract.setIndices(inliers);
    //除去平面之外的数据
    extract.setNegative(true);
    extract.filter(*cloud_filtered);
    
    //进一步可利用点和平面的相对位置关系,进行筛选过滤掉平面附近的点
    

      

  • 相关阅读:
    file_get_contents高級用法
    php缓存技术常用函数
    php爬虫的两种思路
    jQuery判断文本框是否为空
    Asp.net 实现图片缩放 无水印(方法二)
    C# winform关于DataGridView的一些操作
    PHP判断访问者手机移动端还是PC端的函数
    本地图片显示在网页
    如何安装 Composer
    国内开源镜像站
  • 原文地址:https://www.cnblogs.com/flyinggod/p/9135526.html
Copyright © 2011-2022 走看看