Ubuntu 20.04.06 PCL C++学习记录(二十五)

@[TOC]PCL中点云分割模块的学习

学习背景

参考书籍:《点云库PCL从入门到精通》以及官方代码PCL官方代码链接,,PCL版本为1.10.0,CMake版本为3.16,可用点云下载地址

学习内容

使用渐进形态滤波器分割识别地面回波,即执行渐进形态滤波器对地面点进行分割。本文所用点云地址

源代码及所用函数

源代码

#include <iostream>
#include <pcl/io/pcd_io.h>
#include <pcl/point_types.h>
#include <pcl/filters/extract_indices.h>//提供一个名为 pcl::ExtractIndices 的滤波器类,用于根据一组给定的索引从点云中提取出一部分点。
#include<pcl/segmentation/progressive_morphological_filter.h>//提供渐进式形态学滤波器 (Progressive Morphological Filter) 的实现,用于从点云数据中分割出地面点。int main()
{pcl::PointCloud<pcl::PointXYZ>::Ptr cloud (new pcl::PointCloud<pcl::PointXYZ>);pcl::PointCloud<pcl::PointXYZ>::Ptr cloud_filtered (new pcl::PointCloud<pcl::PointXYZ>);pcl::PointIndicesPtr ground(new pcl::PointIndices);/************************************************加载PCD文件********************************************/pcl::PCDReader reader;reader.read<pcl::PointXYZ>("/home/jojo/PointCloud/samp11-utm.pcd",*cloud);//将读取的点云打印出来// std::cerr << "Cloud before filtering: " << std::endl;// std::cerr << *cloud << std::endl;/************************************************创建滤波器*******************************************/pcl::ProgressiveMorphologicalFilter<pcl::PointXYZ> pmf;pmf.setInputCloud (cloud);pmf.setMaxWindowSize(20);//最大窗口大小pmf.setSlope(1.0f);//斜率pmf.setInitialDistance(0.5f);//初始距离pmf.setMaxDistance(3.0f);//最大距离pmf.extract(ground->indices);//将分割出的地面点的索引存储到ground->indices中。/*************************************************创建过滤对象**************************************/pcl::ExtractIndices<pcl::PointXYZ> extract;extract.setInputCloud (cloud);extract.setIndices (ground);extract.filter (*cloud_filtered);//将提取出的地面点存储到cloud_filtered中。//将滤波后的点云打印出来// std::cerr << "Ground cloud after filtering: " << std::endl;// std::cerr << *cloud_filtered << std::endl;pcl::PCDWriter writer;writer.write<pcl::PointXYZ> ("samp11-utm_ground.pcd", *cloud_filtered, false);/***********************************************获取非地面的点云***********************************/extract.setNegative (true);extract.filter (*cloud_filtered);writer.write<pcl::PointXYZ> ("samp11-utm_object.pcd", *cloud_filtered, false);return 0;
}

CMakeLists.txt

cmake_minimum_required(VERSION 3.16 FATAL_ERROR)#指定CMake的最低版本要求为3.16
project(project)#设置项目名称
find_package(PCL 1.10 REQUIRED)#查找PCL库,要求版本为1.10或更高。
include_directories(${PCL_INCLUDE_DIRS})#将PCL库的头文件目录添加到包含路径中
link_directories(${PCL_LIBRARY_DIRS})#将PCL库的库文件目录添加到链接器搜索路径中。
add_definitions(${PCL_DEFINITIONS})#添加PCL库的编译器定义
add_executable (bare_earth bare_earth.cpp)
target_link_libraries (bare_earth ${PCL_LIBRARIES})#将PCL库链接到可执行文件目标。

运行结果

地面点云

pcl_viewer samp11-utm_ground.pcd

在这里插入图片描述非地面点云

pcl_viewer samp11-utm_object.pcd

在这里插入图片描述

函数

  • pcl::ProgressiveMorphologicalFilter<pcl::PointXYZ>是PCL库中用于地面分割的一种滤波器类。它基于形态学操作(morphological operations)的思想,通过逐步增加窗口大小来识别地面点。
    该滤波器的工作原理如下:
    首先,它使用一个较小的窗口在点云中滑动,计算每个点的最大高度差。如果高度差小于设置的斜率(slope)阈值,则认为这些点属于地面。
    然后,它逐步增大窗口大小,重复上述过程,直到窗口大小达到设置的最大值。
    通过这种逐步增大窗口大小的方式,滤波器可以逐步识别出更大范围内的地面点。
    在使用这个滤波器之前,需要设置以下几个重要参数:

      setMaxWindowSize(int):设置窗口的最大大小。setSlope(float):设置识别地面的最大斜率阈值。setInitialDistance(float):设置初始窗口的大小。setMaxDistance(float):设置窗口增长的最大距离。
    
  • extract.setNegative(true)的作用是设置pcl::ExtractIndices对象的negative标志为true,表示提取点云中不在给定索引集合中的点。
    当negative标志设置为false(默认值)时,pcl::ExtractIndices会提取出与给定索引集合对应的点,并将其存储到输出点云中。
    当negative标志设置为true时,pcl::ExtractIndices会提取出不在给定索引集合中的点,并将其存储到输出点云中。

补充内容

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

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

相关文章

【一竞技CS2】VP战队官宣签下electroNic取代mir

1、近日VP战队官宣签下electroNic&#xff0c;以取代阵容中的mir。 electroNic自己也表示&#xff1a;“VP是一支顶级队伍。阵容核心曾赢得Major冠军&#xff0c;所有队员都处于巅峰状态并且时刻准备着去争夺冠军。我们有着一样的雄心壮志。 此外我还对和Jame很感兴趣&#xf…

日历签到功能实现

日历签到功能实现&#xff1a;前后端全面详细指南 在本文中&#xff0c;我们将详细介绍如何使用Vue&#xff08;前端&#xff09;和SpringBoot&#xff08;后端&#xff09;搭配Vant组件库来实现一个日历签到功能。这个功能将允许用户在日历上进行每日签到&#xff0c;并跟踪他…

C++从入门到精通——const与取地址重载

const与取地址重载 前言一、const正常用法const成员函数问题const对象可以调用非const成员函数吗非const对象可以调用const成员函数吗const成员函数内可以调用其它的非const成员函数吗非const成员函数内可以调用其它的const成员函数吗总结 二、取地址及const取地址操作符重载概…

如何用Jenkins执行自动化测试构建

摘要 依据Jenkins官网介绍&#xff0c;Jenkins是一个流行的开源持续集成和交付工具&#xff0c;它提供了一个可扩展的插件生态系统&#xff0c;可以用于自动化构建、测试和部署软件项目。 本文介绍如何安装使用Jenkins、常见问题解决方案以及深入应用&#xff0c;为自动化测试…

艾迪比皮具携手工博科技SAP ERP公有云,打造数字化转型新标杆

4月1日&#xff0c;广州市艾迪比皮具有限公司&#xff08;以下简称“艾迪比”&#xff09;SAP S/4HANA Cloud Public Edition&#xff08;以下简称“SAP ERP公有云”&#xff09;项目正式启动。双方项目组领导、成员出席本次项目启动会&#xff0c;为未来项目的顺利实施打下坚实…

Python编程实训平台(1)

Python编程实训平台是一套建立在虚拟化层上基于Python的编程环境&#xff0c;用于开展大数据相关实训课程教学和课后训练的平台。该平台内部包含Python运行环境&#xff0c;用户无需受限于本身的电脑配置&#xff0c;可以直接从教学管理平台进入平台进行Python编程。 一、功能…

滚雪球学Java(74):深入理解JavaSE输入输出流:掌握数据流动的奥秘

咦咦咦&#xff0c;各位小可爱&#xff0c;我是你们的好伙伴 bug菌&#xff0c;今天又来给大家手把手教学Java SE系列知识点啦&#xff0c;赶紧出来哇&#xff0c;别躲起来啊&#xff0c;听我讲干货记得点点赞&#xff0c;赞多了我就更有动力讲得更欢哦&#xff01;所以呀&…

nginx学习记录-动静分离

1. 动静分离原理 我们在访问网站资源的时候&#xff0c;通常会将资源分成两种&#xff0c;一种是静态资源&#xff08;前端的固定界面&#xff0c;比如图片&#xff0c;html页面等&#xff09;&#xff0c;这些资源无需后台程序处理&#xff1b;另一种是动态资源&#xff0c;这…

分布式调度器

xxl-job介绍 xxl-job 是一个轻量级分布式任务调度框架&#xff0c;支持动态添加、修改、删除定时任务&#xff0c;支持海量任务分片执行&#xff0c;支持任务执行日志在线查看和分页查询&#xff0c;同时支持任务失败告警和重试机制&#xff0c;支持分布式部署和高可用。xxl-j…

阿里云、腾讯云、华为云优惠券领取入口整理汇总

阿里云、腾讯云、华为云作为国内领先的云服务提供商&#xff0c;一直以其稳定、高效、安全的服务赢得了广大用户的青睐。为了回馈用户&#xff0c;这些云平台经常会推出各种优惠活动&#xff0c;其中最为常见的便是优惠券。本文将为大家整理汇总阿里云、腾讯云、华为云优惠券的…

linux-centos虚拟机设置固定ip

环境准备 虚拟机版本&#xff1a;centos7 安装环境&#xff1a;vmware17 1、设置网络连接 虚拟机-设置-网络适配器-NAT模式 2、查看子网信息 编辑-虚拟网络编辑器-NAT模式-NAT设置 查看子网ip和网关ip 下一步要用 3、修改配置文件 vim /etc/sysconfig/network-scripts…

构建数据平台架构指导原则与平台核心组件说明

文章目录 前言什么是数据架构&#xff1f;数据架构如何帮助构建数据平台&#xff1f;数据平台核心组件数据源系统数据加载数据存储数据处理和转换提供使用数据的方式公共服务 前言 湖仓一体是最近几年非常流行的现代大数据架构&#xff0c;目前它已经成为设计数据平台架构的首…

代码随想录算法训练营第四十三天|1049.最后一块石头的重量 II、494. 目标和、474.一和零

动态规划 文章目录 一、最后一块石头的重量二、目标和三、一和零总结 一、最后一块石头的重量 此题的关键在于转化思路&#xff0c;要求剩下最少的石块&#xff0c;也就是两堆相差不多的石块相互碰撞&#xff0c;所以求其中的一堆能够达到的最大数量&#xff0c;另外一堆也就随…

Flask框架初探-如何在本机发布一个web服务并通过requests访问自己发布的服务-简易入门版

Flask框架初探 在接触到网络框架之前我其实一直对一个事情有疑惑&#xff0c;跨语言的API在需要传参的情况下究竟应该如何调用&#xff0c;之前做过的项目里&#xff0c;我用python做了一个代码使用一个算法得到一个结果之后我应该怎么给到做前端的同学或者同事&#xff0c;之前…

基于springboot 的医院信管系统

开发语言&#xff1a;Java 框架&#xff1a;springboot JDK版本&#xff1a;JDK1.8 服务器&#xff1a;tomcat7 数据库&#xff1a;mysql 5.7&#xff08;一定要5.7版本&#xff09; 数据库工具&#xff1a;Navicat11 开发软件&#xff1a;eclipse/myeclipse/idea Maven…

YOLOv5参数大全(parse_opt篇)

文章目录 1、前言2、train.py-文件解读2.1、常用的参数2.1.1、weights2.1.2、cfg2.1.3、data2.1.4、epochs2.1.5、batch-size2.1.6、imgsz2.1.7、device2.1.8、resume2.1.9、hyp2.1.10、adam 3、detect.py-文件解读3.1、常用的参数3.1.1、weights3.1.2、source3.1.3、imgsz3.1.…

麦克风性能参数

1.声压级&#xff08;Sound Pressure Level&#xff09; 一个用来衡量声音压力的参数&#xff0c;基本上描述的是声音的强度、大小或响度&#xff0c;单位通常为分贝&#xff08;dB&#xff09;。声压级是相对于参考声压来定义的。在空气中&#xff0c;参考声压通常是20微帕斯卡…

SpringBoot新增菜品模块开发(事务管理+批量插入+主键回填)

需求分析与设计 一&#xff1a;产品原型 后台系统中可以管理菜品信息&#xff0c;通过 新增功能来添加一个新的菜品&#xff0c;在添加菜品时需要选择当前菜品所属的菜品分类&#xff0c;并且需要上传菜品图片。 新增菜品原型&#xff1a; 当填写完表单信息, 点击"保存…

【数据分析】AHP层次分析法

博主总结&#xff1a;根据每个方案x各准则因素权重累加结果 对比来选择目标。数据主观性强 简介 AHP层次分析法是一种解决多目标复杂问题的定性和定量相结合进行计算决策权重的研究方法。该方法将定量分析与定性分析结合起来&#xff0c;用决策者的经验判断各衡量目标之间能…

shell 脚本报错问题的解决归纳,如 [: missing `]‘

文章目录 1、[: missing ]2、 1、[: missing ]’ 运行修订后的 shell 脚本后&#xff0c;发现警告&#xff1a; line 555: [: missing ]’ 查看脚本的 555 行&#xff0c;发现问题&#xff1a; if [! -f "$builddir/image/xspeed-nt06.dtb"] || [! -f "$build…