• 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);
    
    //进一步可利用点和平面的相对位置关系,进行筛选过滤掉平面附近的点
    

      

  • 相关阅读:
    Django入门
    RCNN 研究相关
    [Android UI]View滑动方式总结
    [Android UI]View基础知识
    [Android]Android开发艺术探索第1章笔记
    [Leetcode]017. Letter Combinations of a Phone Number
    java之this关键字
    POJ 1000 A+B
    [Leetcode]016. 3Sum Closest
    [Leetcode]015. 3Sum
  • 原文地址:https://www.cnblogs.com/flyinggod/p/9135526.html
Copyright © 2020-2023  润新知