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

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

学习背景

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

学习内容

用一组点云数据做简单的平面的分割

源代码及所用函数

源代码

#include<iostream>
#include<pcl/ModelCoefficients.h>//定义名为 pcl::ModelCoefficients 的类,用于存储模型的系数
#include<pcl/io/pcd_io.h>
#include<pcl/point_types.h>
#include<pcl/sample_consensus/method_types.h>//随即参数估计方法头文件
#include<pcl/sample_consensus/model_types.h>//定义 PCL 中用于随机采样一致性 (SAC) 方法的枚举类型
#include<pcl/segmentation/sac_segmentation.h>//提供 PCL 中用于基于随机采样一致性 (SAC) 方法进行点云分割的类和函数

int main(int argc,char** aegv)
{
    /********************************生成并设置点云**************************************************************/
    //生成点云
    pcl::PointCloud<pcl::PointXYZ>::Ptr cloud(new pcl::PointCloud<pcl::PointXYZ>);
    cloud->width = 15;
    cloud->height = 1;
    cloud->points.resize(cloud->width*cloud->height);

    for (size_t i = 0; i < cloud->points.size(); i++)
    {
        cloud->points[i].x = 1024*rand()/(RAND_MAX+1.0f);
        cloud->points[i].y = 1024*rand()/(RAND_MAX+1.0f);        
        cloud->points[i].z = 1.0;
    }
    
    //设置几个局外点,即重新设置几个点的z值,使其偏离z为1的平面
    cloud->points[0].z = 2.0;
    cloud->points[3].z = -2.0;
    cloud->points[6].z = 4.0;

    std::cerr << "Point cloud data: " << cloud->points.size () << " points" << std::endl; 
    for (size_t i = 0; i < cloud->points.size(); i++)
    {
        std::cout<<" "<<cloud->points[i].x<< " "
                      <<cloud->points[i].y<< " "
                      <<cloud->points[i].z<< std::endl;
    }
    /************************************设置分割参数***********************************************/
    //创建分割时所需要的模型系数对象,coefficients及存储内点的点索引集合对象inliers
    pcl::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);//设置随机采样一致性方法类型,SAC_RANSAC:随机采样一致性 (RANSAC) 方法
    seg.setDistanceThreshold(0.01);//设定距离阀值,距离阀值决定了点被认为是局内点是必须满足的条件,表示点到估计模型的距离最大值
    seg.setInputCloud(cloud);
    //引发分割实现,存储分割结果到点几何inliers及存储平面模型的系数coefficients
    seg.segment(*inliers,*coefficients);
    if (inliers->indices.size()==0)
    {
        PCL_ERROR("无法为给定数据集估计平面模型");
        return -1;
    }
    //打印出平面模型
    std::cout << "模型系数" << coefficients->values[0] << " " 
                            << coefficients->values[1] << " "
                            << coefficients->values[2] << " " 
                            << coefficients->values[3] << std::endl;
    std::cout << "离群值模型" << inliers->indices.size() <<std::endl;
    for (size_t i = 0; i < inliers->indices.size(); i++)
    {
        std::cerr << inliers->indices[i] << "    " << cloud->points[inliers->indices[i]].x << " "
                                               << cloud->points[inliers->indices[i]].y << " "
                                               << cloud->points[inliers->indices[i]].z << std::endl;
    }
    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 (planar_segmentation planar_segmentation.cpp)
target_link_libraries (planar_segmentation ${PCL_LIBRARIES})#将PCL库链接到可执行文件目标。

运行结果

在这里插入图片描述

函数

  • #include<pcl/ModelCoefficients.h>定义了一个名为 pcl::ModelCoefficients 的类,用于存储模型的系数。在点云处理中,我们经常需要拟合各种模型,如平面、球体、圆柱体等。这些模型可以用一组系数来表示,例如:

    对于平面模型,我们需要存储平面的法向量和距离系数。
    对于球体模型,我们需要存储球心坐标和半径。
    对于圆柱体模型,我们需要存储圆柱轴的方向向量、圆柱体上一点的坐标以及半径。

    pcl::ModelCoefficients 类提供了一种通用的方式来存储这些模型系数。它内部使用了一个 std::vector 来存储系数值。

  • #include<pcl/sample_consensus/method_types.h> 这个头文件定义了 PCL 中用于随机采样一致性 (SAC) 方法的枚举类型。
    随机采样一致性 (SAC) 是一种在带有异常值的数据集中估计模型参数的方法。PCL 提供了多种 SAC 方法,如 RANSAC、LMEDS、MSAC 和 RRANSAC 等。这些方法在处理含有噪声和异常值的数据时非常有用,特别是在计算机视觉和点云处理领域。

  • #include<pcl/segmentation/sac_segmentation.h>这个头文件提供了 PCL 中用于基于随机采样一致性 (SAC) 方法进行点云分割的类和函数。头文件提供了一个名为 pcl::SACSegmentation 的类,该类实现了基于 SAC 方法的点云分割算法。
    该类提供了以下主要功能:
    设置分割的模型类型:可以使用 setModelType() 函数设置要拟合的模型类型,如平面、圆柱体、球体等。
    设置 SAC 方法的类型:可以使用 setMethodType() 函数设置所使用的 SAC 方法,如 RANSAC、LMEDS 等。
    设置分割参数:可以使用 setDistanceThreshold()、setMaxIterations()、setProbability() 等函数设置分割算法的参数,如距离阈值、最大迭代次数、概率等。
    执行分割:使用 segment() 函数执行点云分割,该函数将点云作为输入,并输出分割结果,包括模型系数和内点索引。

补充内容

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Linux 内核:线程的实现

在linux中的线程是轻量级线程&#xff08;Light-Weight-process&#xff0c;LWP&#xff09; 文章目录 线程概念线程实现 线程概念 线程分类 用户级线程内核级线程&#xff0c;没有用户空间&#xff0c;完全工作在内核中&#xff08;下图中没有[]的就是用户级线程&#xff09…

跨服务器迁移nextcloud数据

背景 阿里云最近做活动,99一年的2U2G的服务器,比我原来的1U1G的服务器不知道高到哪里去了,于是决定迁移服务器数据到另一台主机上。原先的计划是直接做一个自定义镜像,然后复制到另一台主机就行,结果发现旧主机是aliyunOS,新主机不想踩这个坑了,决定换成乌班图,因此决定重新搭…

大模型基础知识 - 语言模型及其演进

开场白 人工智能发展到现在&#xff0c;在2个重要领域取得了重大突破&#xff0c;有望达到人类水平&#xff1a; 计算机视觉 &#xff08;Computer Vision, CV&#xff09;-> 希望机器帮助人类处理图像数据自然语言处理&#xff08;Natural Language Processing, NLP&…

基于R语言lavaan结构方程模型(SEM)实践技术应用

原文链接&#xff1a;基于R语言lavaan结构方程模型&#xff08;SEM&#xff09;实践技术应用https://mp.weixin.qq.com/s?__bizMzUzNTczMDMxMg&mid2247596681&idx4&sn08753dd4d3e7bc492d750c0f06bba1b2&chksmfa823b6ecdf5b278ca0b94213391b5a222d1776743609cd…

文章自动生成器

1.前言 最近开始想写一些东西&#xff0c;脑子里也有不少想法&#xff0c;但是自己写又比较费时间&#xff0c;而且还要排版&#xff0c;精修&#xff0c;刚开始写的字数甚少&#xff0c;想法也是断断续续&#xff0c;不连贯&#xff0c;本想放弃&#xff0c;但是想到放弃就太…

HarmonyOS实战开发-如何实现跨应用数据共享实例。

介绍 本示例实现了一个跨应用数据共享实例&#xff0c;分为联系人&#xff08;数据提供方&#xff09;和联系人助手&#xff08;数据使用方&#xff09;两部分&#xff1a;联系人支持联系人数据的增、删、改、查等功能&#xff1b;联系人助手支持同步联系人数据&#xff0c;当…

15.队列集

1.简介 在使用队列进行任务之间的“沟通交流”时&#xff0c;一个队列只允许任务间传递的消息为同一种数据类型&#xff0c;如果需要在任务间传递不同数据类型的消息时&#xff0c;那么就可以使用队列集。FreeRTOS提供的队列集功能可以对多个队列进行“监听”&#xff0c;只要…

【数据结构与算法】—— 二叉树

目录 一、树 1、初识树 2、树的一些概念 3、树的表示形式 二、二叉树 1、初识二叉树 2、两种特殊的二叉树 3、二叉树的性质 4、二叉树的遍历 5、实现一棵二叉树 6、二叉树题目&#xff08;没代码的后面会给补上&#xff09; 一、树 1、初识树 &#xff08;1&…

从人机界面设计黄金三法则视角看 ChatGPT 的界面设计的“好”与“坏”

热门文章推荐&#xff1a; &#xff08;1&#xff09;《为什么很多人工作 3 年 却只有 1 年经验&#xff1f;》&#xff08;2&#xff09;《一文掌握大模型提示词技巧&#xff1a;从战略到战术巧》&#xff08;3&#xff09;《AI 时代&#xff0c;程序员的出路在何方&#xff1…

破晓数据新纪元:隐语隐私计算,携手共创安全智能的未来生态

1.业务背景&#xff1a;安全核对产生的土壤 隐语隐私计算在安全核对业务背景下的应用&#xff0c;主要聚焦于解决企业在数据交换和分析过程中面临的隐私保护问题。 在许多行业中&#xff0c;特别是在金融、医疗、政务等领域&#xff0c;数据的安全核对至关重要&#xff0c;例如…

三流大学毕业,物流专业转行自述:“从月薪4K到现在月入2W+,我做到了哪些?”

我是25岁转行学python的。说实在&#xff0c;转行就是奔着挣钱去的。希望我的经历可以给想转行的朋友带来一点启发和借鉴。 先简单介绍下个人背景&#xff0c;三流大学毕业&#xff0c;物流专业&#xff0c;学习能力一般&#xff0c;没啥特别技能&#xff0c;反正就很普通的一…

《springcloud alibaba》 四 seata安装以及使用

目录 准备调整db配置准备创建数据库 seata配置nacos配置confi.txt下载向nacos推送配置的脚本 启动seata新建项目order-seata项目 订单项目数据库脚本pom.xmlapplication.yml启动类实体类dao类service类controller类feign类mapper类 stock-seata 库存项目数据库脚本pom.xmlappli…

python代码使用过程中使用快捷键注释时报错

1.代码 2.代码报错 3.代码注释后的结果 4. 原因

动态输出n位小数——满满都是坑!

【题目描述】 输入正整数a&#xff0c;b&#xff0c;c&#xff0c;输出a/b的小数形式&#xff0c;精确到小数点后c位。a,b ≤10^6 &#xff0c;c≤100。输入包含多组数据&#xff0c;结束标记为a&#xff1d;b&#xff1d;c&#xff1d;0。 【样例输入】 1 6 4 0 0 0 【样…

HIDS是什么,如何保护主机系统

随着网络安全攻防对抗的日趋激烈&#xff0c;主机当前企业和组织的安全运营工作面临的挑战越来越突出&#xff0c;外网防护的同时&#xff0c;内网主机安全防护也越来越重要。 HIDS(Host-based Intrusion Detection System)&#xff0c;是基于主机型入侵检测系统的简称。作为计…

30万奖金谁能瓜分?OurBMC开源大赛决赛入围名单公示

首届开放原子开源大赛基础软件赛道自今年 1 月开启报名以来&#xff0c;吸引了全国各地 BMC 技术爱好者的广泛关注和踊跃报名。该赛事由开放原子开源基金会牵头&#xff0c; OurBMC 社区及理事长单位飞腾信息技术有限公司联合承办&#xff0c;以 “基于 BMC 技术的服务器故障诊…

抖音电商罗盘品牌人群运营策略指南

【干货资料持续更新&#xff0c;以防走丢】 抖音电商罗盘品牌人群运营策略指南 部分资料预览 资料部分是网络整理&#xff0c;仅供学习参考。 抖音运营资料合集&#xff08;完整资料包含以下内容&#xff09; 目录 品牌人群运营策略&#xff0c;旨在帮助品牌通过精细化运营提…

雅虎套餐发稿独家技巧,让你的媒体宣发效率翻倍

在如今的信息时代&#xff0c;媒体宣发是每个品牌和公司都不可或缺的一部分。而雅虎套餐发稿&#xff0c;作为其中的一种方式&#xff0c;更是受到了许多人的青睐。那么&#xff0c;如何才能充分利用雅虎套餐发稿的功能&#xff0c;让你的媒体宣发效率翻倍呢&#xff1f;以下就…

Java 解决 Process 执行命令行命令报【CreateProcess error=2, 系统找不到指定的文件。】错误问题

目录 问题 问题代码 解决方案 判断操作系统 问题 使用 Process 执行命令行命令时&#xff0c;报 CreateProcess error2, 系统找不到指定的文件。但明明指定的文件是存在的。而且这种错误只在 IDEA 中运行会报错&#xff0c;打包后直接 java -jar 运行就能正常运行&#xf…

【绩效管理】帮助零售企业建立分层分类绩效考核体系项目纪实

购物中心张经理评价&#xff1a;“员工的绩效管理一直是困扰我公司的难题&#xff0c;我们只懂得怎么经营&#xff0c;至于怎么做人力资源管理&#xff0c;真是一点都不懂。这次华恒智信为我们提供的服务对我们的帮助很大。基于企业实际调研情况&#xff0c;华恒智信专家明确指…