@[TOC]PCL中点云分割模块的学习
学习背景
参考书籍:《点云库PCL从入门到精通》以及官方代码PCL官方代码链接,,PCL版本为1.10.0,CMake版本为3.16,可用点云下载地址
学习内容
使用渐进形态滤波器分割识别地面回波,即执行渐进形态滤波器对地面点进行分割。本文所用点云地址
源代码及所用函数
源代码
#include
#include
#include
#include //提供一个名为 pcl::ExtractIndices 的滤波器类,用于根据一组给定的索引从点云中提取出一部分点。
#include//提供渐进式形态学滤波器 (Progressive Morphological Filter) 的实现,用于从点云数据中分割出地面点。
int main()
{
pcl::PointCloudpcl::PointXYZ>::Ptr cloud (new pcl::PointCloudpcl::PointXYZ>);
pcl::PointCloudpcl::PointXYZ>::Ptr cloud_filtered (new pcl::PointCloudpcl::PointXYZ>);
pcl::PointIndicesPtr ground(new pcl::PointIndices);
/************************************************加载PCD文件********************************************/
pcl::PCDReader reader;
reader.readpcl::PointXYZ>("/home/jojo/PointCloud/samp11-utm.pcd",*cloud);
//将读取的点云打印出来
// std::cerr
// std::cerr
/************************************************创建滤波器*******************************************/
pcl::ProgressiveMorphologicalFilterpcl::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::ExtractIndicespcl::PointXYZ> extract;
extract.setInputCloud (cloud);
extract.setIndices (ground);
extract.filter (*cloud_filtered);//将提取出的地面点存储到cloud_filtered中。
//将滤波后的点云打印出来
// std::cerr
// std::cerr
pcl::PCDWriter writer;
writer.writepcl::PointXYZ> ("samp11-utm_ground.pcd", *cloud_filtered, false);
/***********************************************获取非地面的点云***********************************/
extract.setNegative (true);
extract.filter (*cloud_filtered);
writer.writepcl::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库中用于地面分割的一种滤波器类。它基于形态学操作(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.fwqtg.net
相关推荐: Microsoft@ppt@快速掌握核心功能@常用功能培训
文章目录 refs 动画 动画的用途 逐部分显示内容@实现问答效果@部分地修改页面内容 动画效果 常用窗口 对象选择窗口 批量选择对象 如何为重叠的对象高效的命名 重命名方式 方案1 方案2 对象重命名原则 重命名后如何使用 tips 动画窗口 幻灯片管理 幻…