PCL之平面分割模型
代码展示:
#include <iostream>
#include <pcl/io/pcd_io.h>
#include <pcl/point_types.h>
#include <pcl/filters/extract_indices.h>
#include <pcl/sample_consensus/model_types.h>
#include <pcl/sample_consensus/method_types.h>
#include <pcl/segmentation/sac_segmentation.h>
#include <pcl/visualization/pcl_visualizer.h>using namespace std;
using PointT = pcl::PointXYZ;int main() {// 加载点云pcl::PointCloud<PointT>::Ptr cloud(new pcl::PointCloud<PointT>);if (pcl::io::loadPCDFile<PointT>("/home/pi/Desktop/pcl/data/tutorials/table_scene_lms400.pcd", *cloud) == -1) {cout << "加载点云失败" << endl;return -1;}//创建分割时所需要的模型系数对象,coefficients及存储内点的点索引集合对象inlierspcl::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.setDistanceThreshold(0.01); //设定距离阀值,距离阀值决定了点被认为是局内点是必须满足的条件,表示点到估计模型的距离最大值,seg.setInputCloud(cloud);//引发分割实现,存储分割结果到点几何inliers及存储平面模型的系数coefficientsseg.segment(*inliers, *coefficients);if (inliers->indices.size() == 0) {PCL_ERROR("分割平面失败.");return (-1);}// 提取平面点云pcl::ExtractIndices<PointT> extract;extract.setInputCloud (cloud);extract.setIndices(inliers);extract.setNegative (false);pcl::PointCloud<PointT>::Ptr cloud_plane (new pcl::PointCloud<PointT> );extract.filter (*cloud_plane);if (cloud_plane->points.empty ())std::cerr << "提取平面点云失败." << std::endl;// 可视化分割结果pcl::visualization::PCLVisualizer::Ptr viewer(new pcl::visualization::PCLVisualizer("viewer"));int v1(0);viewer->createViewPort(0.0, 0.0, 0.5, 1.0, v1);viewer->setBackgroundColor(0, 0, 0, v1);viewer->addText("Raw", 10, 10, "v1_text", v1);int v2(1);viewer->createViewPort(0.5, 0.0, 1, 1.0, v2);viewer->setBackgroundColor(0.1, 0.1, 0.1, v2);viewer->addText("Seg", 10, 10, "v2_text", v2);viewer->addPointCloud<PointT>(cloud, "cloud_sample", v1);viewer->addPointCloud<PointT>(cloud_plane, "cloud_seg", v2);while (!viewer->wasStopped()) {viewer->spinOnce(100);}return 0;
}
点云文件下载地址:table_scene_lms400.pcd
效果展示:
PCL之平面分割模型相关推荐
- PCL 点云分割与分类 Segmentation RANSAC随机采样一致性 平面模型分割 欧氏距离分割 区域聚类分割算法 最小分割算法 超体聚类 渐进式形态学滤波器
点云分割 博文末尾支持二维码赞赏哦 _ 点云分割是根据空间,几何和纹理等特征对点云进行划分, 使得同一划分内的点云拥有相似的特征,点云的有效分割往往是许多应用的前提, 例如逆向工作,CAD领域对零件的 ...
- 点云PCL学习笔记-分割segmentation-RANSAC随机采样一致性算法欧式聚类提取
随机采样一致性算法RANSAC 程序实例参考网址: https://pcl.readthedocs.io/projects/tutorials/en/latest/random_sample_cons ...
- 29 基于PCL的点云平面分割拟合算法技术路线(针对有噪声的点云数据)
0 引言 最近项目中用到了基于PCL开发的基于平面的点云和CAD模型的配准算法,点云平面提取采用的算法如下. 1 基于PCL的点云平面分割拟合算法 2 参数及其意义介绍 (1)点云下采样 1. 参数: ...
- PCL点云分割(1)
点云分割是根据空间,几何和纹理等特征对点云进行划分,使得同一划分内的点云拥有相似的特征,点云的有效分割往往是许多应用的前提,例如逆向工作,CAD领域对零件的不同扫描表面进行分割,然后才能更好的进行空洞 ...
- PCL点云分割(2)
关于点云的分割算是我想做的机械臂抓取中十分重要的俄一部分,所以首先学习如果使用点云库处理我用kinect获取的点云的数据,本例程也是我自己慢慢修改程序并结合官方API 的解说实现的,其中有很多细节如果 ...
- 3d激光雷达开发(平面分割)
[ 声明:版权所有,欢迎转载,请勿用于商业用途. 联系信箱:feixiaoxing @163.com] 平面分割是点云数据经常需要处理的一个功能.在很多场景下面,平面数据都是没有用的.这个时候需要考虑 ...
- Open3d之点云平面分割
Open3D还支持使用RANSAC从点云中分割几何图元. 要查找点云中最有可能存在的平面,我们使用segement_plane函数. 该方法具有三个参数:destance_threshold定义了一个 ...
- 大场景三维点云语义分割模型
大场景三维点云语义分割模型 基于2D的方法 SqueezeSeg系列 一.简介 二.核心思路总结 三.要点分析 四.总结 VIASEG: VISUAL INFORMATION ASSISTED LIG ...
- 使用无人机 LiDAR 的重叠树冠的新型植被点云密度树分割模型
Paper题目:A Novel Vegetation Point Cloud Density Tree-Segmentation Model for Overlapping Crowns Using ...
最新文章
- 常见基本不等式的几何解释
- 做 SQL 性能优化真是让人干瞪眼
- mock方法常用框架_什么是Mock测试?
- 马化腾谈滴滴;苹果供应商研发柔性玻璃;丁磊谈沉迷手机 | 极客头条
- 我在美团的八年,技术人必读
- Qt之QToolBox
- java字典表_SpringBoot中实现数据字典的示例代码
- EF Code First 更新数据库, 数据库迁移
- recovery.img 的解包与打包
- 拿信用卡套个首付买房子——引火自焚
- 破解虚拟机ESXi服务器密码,esxi虚机Windows server 2012忘记密码解决办法
- CSS 利用@media screen判断识别手机/PC端浏览器
- HTML学生考勤界面代码,基于jsp的学生考勤系统-JavaEE实现学生考勤系统 - java项目源码...
- html常用长度单位
- 3.Vue.js 实战 调查问卷WebApp项目
- FX5u控制4个伺服,一个完整的项目 程序用 标签分层,说明了定位控制中的公共参数设定、回原点、
- bat 格式化年月日时分秒
- win7系统怎么打开打印服务器失败,win7安装网络打印机驱动老是失败如何解决
- android 百度导航 过路费,高德地图和百度地图规划路线不一样,且过路费也有差别如何选择?...
- java 深入剖析ThreadLocal