平面分割--------PCL

平面分割

bool PclTool::planeSegmentation(pcl::PointCloud<pcl::PointXYZ>::Ptr cloud, pcl::ModelCoefficients::Ptr coefficients, pcl::PointIndices::Ptr inliers)
{std::cout << "Point cloud data: " << cloud->points.size() << " points" << std::endl;// 创建分割时所需要的模型系数对象,coefficients及存储内点的点索引集合对象inliers// pcl::ModelCoefficients::Ptr coefficients(new pcl::ModelCoefficients);// pcl::PointIndices::Ptr inliers(new pcl::PointIndices);// pcl::ModelCoefficients用于存储平面模型的系数(A、B、C和D)。// Model coefficients: 0 0 1 -1:平面模型的系数表示为[A, B, C, D],其中A、B、C表示平面的法向量,D表示平面到原点的距离。在这里,系数为[0, 0, 1, -1],表示平面的法向量在Z轴上,距离原点的距离为1,即平面方程为Z=1。// 而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){std::cout << "Could not estimate a planar model for the given dataset." << std::endl;return false;}return true;
}

测试代码

        // 平面分割pcl::PointCloud<pcl::PointXYZ>::Ptr planeSeg_cloud(new pcl::PointCloud<pcl::PointXYZ>);// 填充点云planeSeg_cloud->width = 15;planeSeg_cloud->height = 1;planeSeg_cloud->points.resize(planeSeg_cloud->width * planeSeg_cloud->height);// 生成数据,采用随机数填充点云的x,y坐标,都处于z为1的平面上for (size_t i = 0; i < planeSeg_cloud->points.size(); ++i){planeSeg_cloud->points[i].x = 1024 * rand() / (RAND_MAX + 1.0f);planeSeg_cloud->points[i].y = 1024 * rand() / (RAND_MAX + 1.0f);planeSeg_cloud->points[i].z = 1.0;}// 设置几个局外点,即重新设置几个点的z值,使其偏离z为1的平面planeSeg_cloud->points[0].z = 2.0;planeSeg_cloud->points[3].z = -2.0;planeSeg_cloud->points[6].z = 4.0;pcl::ModelCoefficients::Ptr coefficients(new pcl::ModelCoefficients);pcl::PointIndices::Ptr inliers(new pcl::PointIndices);PclTool::planeSegmentation(planeSeg_cloud, coefficients, inliers);if (inliers->indices.size() == 0){std::cout << "Could not estimate a planar model for the given dataset." << std::endl;}// 打印出平面模型std::cout << "Model coefficients: " << coefficients->values[0] << " " << coefficients->values[1] << " " << coefficients->values[2] << " " << coefficients->values[3] << std::endl;std::cout << "Model inliers: " << inliers->indices.size() << std::endl;for (size_t i = 0; i < inliers->indices.size(); ++i){std::cout << inliers->indices[i] << "\t" << planeSeg_cloud->points[inliers->indices[i]].x << " " << planeSeg_cloud->points[inliers->indices[i]].y << " " << planeSeg_cloud->points[inliers->indices[i]].z << std::endl;}return 0;

反馈结果

在这里插入图片描述

  • Model coefficients: 0 0 1 -1:平面模型的系数表示为[A, B, C, D],其中A、B、C表示平面的法向量,D表示平面到原点的距离。在这里,系数为[0, 0, 1, -1],表示平面的法向量在Z轴上,距离原点的距离为1,即平面方程为Z=1。
  • pcl::PointIndices用于存储内点的索引

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/669925.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

文献速递:深度学习医学影像心脏疾病检测与诊断--从SPECT/CT衰减图中深度学习冠状动脉钙化评分提高了对重大不良心脏事件的预测

Title 题目 Deep Learning Coronary Artery Calcium Scores from SPECT/CT Attenuation Maps Improve Prediction of Major Adverse Cardiac Events 从SPECT/CT衰减图中深度学习冠状动脉钙化评分提高了对重大不良心脏事件的预测 01 文献速递介绍 低剂量非门控CT衰减校正&am…

视频号是资本创造的伪风口?还是互联网的真机遇?

我是王路飞。 都说视频号是在模仿抖音。 短视频、直播&#xff0c;甚至是视频号小店&#xff0c;都在模仿。 所以很多人认为&#xff0c;视频号不过是资本创造的伪风口罢了&#xff0c;谈不上是下一个互联网风口所在。 到底是伪风口&#xff1f;还是互联网的真机遇&#xf…

固定资产管理系统的好处 二维码固定资产管理系统作用

当企业发展到一定规模之后&#xff0c;其内部的固定资产数量和种类&#xff0c;以及员工的数量都会每年递增。这就给固定资产的管理带来了很多问题。 企业资产管理的问题 固定资产的数量和分类都比较多&#xff0c;没有统一的规范管理规则。导致固定资产的状态、使用人等都不清…

软考中、高项变成了一年考一次,还有机会上岸吗?

真正想考试的人机会一直都在&#xff0c;虽然这次考试频次减少了&#xff0c;但整个调整还未涉及到考试内容方面&#xff0c;所以如果你现在考不过的话&#xff0c;之前也未必可以&#xff0c;主要还是要对考试内容有足够的熟悉才能顺利通过。 一、做了哪些科目调整 将软考初…

linux下载安装JDK

查看系统是否自带 jdk java -version 一、jdk下载安装 jdk11下载 上传到 linux 以下说明已下载 解压 tar -xzvf jdk-11.0.23_linux-x64_bin.tar.gz 二、linux配置JDK环境 sudo vim /etc/profile JAVA_HOME/may2024/jdk-11.0.23 JRE_HOME$JAVA_HOME/jre CLASS_PATH.:$J…

python学习笔记-01

python 在学习之前要了解的事项&#xff1a; 1.python缩进语法要求较为严格 2.是解释型语言 3.python2版本和python3版本不兼容 本系列笔记全部基于python3 1.hello world 安装好python之后&#xff0c;可以直接打开python&#xff0c;也可以通过cmd进入python。 print(&qu…

力扣每日一题112:路径总和

题目 简单 给你二叉树的根节点 root 和一个表示目标和的整数 targetSum 。判断该树中是否存在 根节点到叶子节点 的路径&#xff0c;这条路径上所有节点值相加等于目标和 targetSum 。如果存在&#xff0c;返回 true &#xff1b;否则&#xff0c;返回 false 。 叶子节点 是…

fork后如何同步最新的代码

1.查看自己的库并添加远程源库 #查看所有远程库的url git remote -v; #添加源项目url&#xff08;upstream是自己定义的一个名字&#xff0c;可以删 git remote remove upstream&#xff09; git remote add upstream 这里替换为源项目url; #查看所有远程库的url&…

电商API接口详解(二)【返回主流电商平台商品详情SKU数据】

一、API接口规范 1.协议&#xff1a;API与客户端用户的通信协议&#xff0c;推荐使用http协议&#xff0c;同时兼容HTTP&#xff0c;以确保交互数据的传输安全。 2.域名&#xff1a;应该尽量将API部署在专用域名之下。http://api.xxx.com 如果确定API很简单&#xff0c;不会…

P3743 小鸟的设备

原题链接&#xff1a;小鸟的设备 - 洛谷 目录 1. 题目描述 2. 思路分析 3. 代码实现 1. 题目描述 2. 思路分析 浮点数二分答案。 首先特判&#xff0c;如果接通设备每秒生成的能量p大于等于所有设备每秒消耗的能量&#xff08;a[1]a[2]..a[n]&#xff09;直接输出-1&…

liunx服务器部署Llama2大模型

模型&#xff1a;Llama2-chat-13B-Chinese-50W 01 下载安装 Llama2 模型 Huggingface在国内是访问不了的&#xff0c;需要使用代理。在这里推荐使用 clash-for-liunx 配置代理。 安装 git-lfs&#xff0c;用于大文件下载 sudo apt-get install git-lfs git lfs installHuggi…

鸿蒙内核源码分析(信号量篇) | 谁在负责解决任务的同步

基本概念 信号量&#xff08;Semaphore&#xff09; 是一种实现任务间通信的机制&#xff0c;可以实现任务间同步或共享资源的互斥访问。 一个信号量的数据结构中&#xff0c;通常有一个计数值&#xff0c;用于对有效资源数的计数&#xff0c;表示剩下的可被使用的共享资源数…