平面模型上提取凸凹多边形------pcl

news/2024/11/9 16:37:41/

平面模型上提取凸凹多边形

pcl::PointCloud<pcl::PointXYZ>::Ptr PclTool::ExtractConvexConcavePolygons(pcl::PointCloud<pcl::PointXYZ>::Ptr cloud)
{pcl::PointCloud<pcl::PointXYZ>::Ptr cloud_filtered(new pcl::PointCloud<pcl::PointXYZ>);pcl::PointCloud<pcl::PointXYZ>::Ptr cloud_projected(new pcl::PointCloud<pcl::PointXYZ>);// 建立过滤器消除杂散的NaNpcl::PassThrough<pcl::PointXYZ> pass;pass.setInputCloud(cloud);     // 设置输入点云pass.setFilterFieldName("z");  // 设置分割字段为z坐标pass.setFilterLimits(0, 1.1);  // 设置分割阀值为(0, 1.1)pass.filter(*cloud_filtered);std::cerr << "PointCloud after filtering has: " << cloud_filtered->points.size() << " data points." << std::endl;// 分割pcl::ModelCoefficients::Ptr coefficients(new pcl::ModelCoefficients);pcl::PointIndices::Ptr inliers(new pcl::PointIndices);  // inliers存储分割后的点云// 创建分割对象pcl::SACSegmentation<pcl::PointXYZ> seg;// 设置优化系数,该参数为可选参数seg.setOptimizeCoefficients(true);// Mandatoryseg.setModelType(pcl::SACMODEL_PLANE);seg.setMethodType(pcl::SAC_RANSAC);seg.setDistanceThreshold(0.01);seg.setInputCloud(cloud_filtered);seg.segment(*inliers, *coefficients);std::cerr << "PointCloud after segmentation has: " << inliers->indices.size() << " inliers." << std::endl;// Project the model inliers点云投影滤波模型pcl::ProjectInliers<pcl::PointXYZ> proj;  // 点云投影滤波模型proj.setModelType(pcl::SACMODEL_PLANE);   // 设置投影模型proj.setIndices(inliers);proj.setInputCloud(cloud_filtered);proj.setModelCoefficients(coefficients);  // 将估计得到的平面coefficients参数设置为投影平面模型系数proj.filter(*cloud_projected);            // 得到投影后的点云std::cerr << "PointCloud after projection has: " << cloud_projected->points.size() << " data points." << std::endl;// 存储提取多边形上的点云pcl::PointCloud<pcl::PointXYZ>::Ptr cloud_hull(new pcl::PointCloud<pcl::PointXYZ>);pcl::ConcaveHull<pcl::PointXYZ> chull;  // 创建多边形提取对象chull.setInputCloud(cloud_projected);   // 设置输入点云为提取后点云chull.setAlpha(0.1);chull.reconstruct(*cloud_hull);  // 创建提取创建凹多边形std::cerr << "Concave hull has: " << cloud_hull->points.size() << " data points." << std::endl;return cloud_hull;
}

传入的原始点云数据
在这里插入图片描述

先对原始点云做一个制动滤波仅保留红色方框中的数据
然后再提取多边形,得到结果
在这里插入图片描述


http://www.ppmy.cn/news/1453688.html

相关文章

C++ | Leetcode C++题解之第69题x的平方根

题目&#xff1a; 题解&#xff1a; class Solution { public:int mySqrt(int x) {if (x 0) {return 0;}double C x, x0 x;while (true) {double xi 0.5 * (x0 C / x0);if (fabs(x0 - xi) < 1e-7) {break;}x0 xi;}return int(x0);} };

ssm(教学评价系统)

开发语言&#xff1a;Java JDK版本&#xff1a;JDK1.8&#xff08;或11&#xff09;服务器&#xff1a;tomcat 数据库&#xff1a;mysql 5.6/5.7&#xff08;或8.0&#xff09;数据库工具&#xff1a;Navicat 开发软件&#xff1a;idea 依赖管理包&#xff1a;Maven 代码数据库…

typescript-字面量

typescript-字面量 在计算机科学中&#xff0c;字面量用于在源代码中表示某个固定值。在JavaScript程序中&#xff0c;字面量不是变量&#xff0c;它是直接给出的固定值。 Null字面量 Null字面量只有一个&#xff0c;记作null Boolean字面量 Boolean的字面量有两个&#x…

Activiti7 开发快速入门【2024版】

记录开发最核心的部分&#xff0c;理论结合业务实操减少废话&#xff0c;从未接触工作流快速带入开发。假设你是后端的同学学过JAVA和流程图&#xff0c;则可以继续向后看&#xff0c;否则先把基础课程书准备好先翻翻。 为什么要工作流 比起直接使用状态字段&#xff0c;工作…

GPT是什么?直观解释Transformer | 深度学习第5章 【3Blue1Brown 官方双语】

【官方双语】GPT是什么&#xff1f;直观解释Transformer | 深度学习第5章 0:00 - 预测&#xff0c;采样&#xff0c;重复&#xff1a;预训练/生成式/Transformer模型 3:03 - Transformer 的内部结构 6:36 - 本期总述 7:20 - 深度学习的大框架 12:27 - GPT的第一层&#xff1a;…

深入了解JS作用域

在JavaScript中&#xff0c;作用域&#xff08;Scope&#xff09;是指变量的可访问性或可见性的范围。了解作用域是非常重要的&#xff0c;因为它决定了变量在代码中的访问范围&#xff0c;以及变量的生命周期。 1.全局作用域&#xff08;Global Scope&#xff09;&#xff1a…

生成对抗网络的无载体信息隐藏算法简介

一、研究背景 随着互联网技术的广泛应用和移动智能设备的快速普及&#xff0c;人们有了更多的途径传播和获取信息。每天海量的数据以视频、音频、图像、文字等各类形式在互联网中产生&#xff0c;这为人们的生活带来了极大的便利&#xff0c;但同时也引起了人们对信息泄露的担…

BKP备份寄存器RTC实时时钟

文章目录 BKP简介相关引脚BKP基本结构 RTC简介RTC框图三种时钟源RTC基本结构 硬件电路RTC操作注意事项 BKP简介 BKP&#xff08;Backup Registers&#xff09;备份寄存器BKP可用于存储用户应用程序数据。当VDD&#xff08;2.0~ 3.6V&#xff09;电源被切断&#xff0c;他们仍然…