PCL-统计滤波

news2024/9/21 21:02:31

本篇内容

  • 讲解统计滤波作用及原理
  • 通过pcl实现统计滤波
  • 强烈推荐在点云处理最开始使用,统计滤波处理,再送入其他算法进行处理!!!
    效果:
    在这里插入图片描述

1 主要原理

  • 手动设置半径大小或者邻域点数量N(若设置的是半径大小,算法会搜索半径范围内的所有点;若设置邻域点数量N,算法会搜索距离最近的N个点);手动设置标准差倍率R
  • 针对每个点,通过其邻域点计算出每个点的距离均值mean_d(欧式距离公式)
  • 计算出全局的距离均值mean和标准差std
  • 通过公式计算出距离阈值:distance_threshold=mean+std*R
  • 遍历所有点,若该点的距离均值mean_d小于distance_threshold则保留,否则删除
    PS:该算法从全局考虑,通过自身数据计算出阈值,标准差倍率也是相对值,具有很强的自适应效果,适用于大多数场景,强烈推荐使用

2 主要流程

初始化统计滤波器:

pcl::StatisticalOutlierRemoval<PointType> statistical_filter;

设置输入点云:

statistical_filter.setInputCloud(cloud);

设置邻域数量:

statistical_filter.setMeanK(10);

设置标准差倍率:

statistical_filter.setStddevMulThresh(3.0);

执行滤波:

statistical_filter.filter(*cloud_filter);

3 完整代码

#include <string>
#include <iostream>
#include <pcl/io/pcd_io.h>
#include <pcl/point_cloud.h>
#include <pcl/point_types.h>
#include <pcl/filters/statistical_outlier_removal.h>

// 前置点云类型,方便以后更改
using PointType = pcl::PointXYZ;
using PointCloud = pcl::PointCloud<PointType>;
using PointCloud_Ptr = PointCloud::Ptr;

int main(int argc, char **argv) {
  if (argc < 3) {
    std::cout<<"Usage: ./read_pcd <pcd_file_path> <pcd_save_path>\n";
    return -1;
  }

  std::string pcd_file_path(argv[1]);
  std::string pcd_save_path(argv[2]);

  // 声明变量,用于保存点云数据
  PointCloud_Ptr cloud(new PointCloud);
  PointCloud_Ptr cloud_filter(new PointCloud);

  // 读取pcd点云文件
  if (pcl::io::loadPCDFile<PointType>(pcd_file_path, *cloud) == -1) {
    std::cerr<<"check pcd path\n";
    return -1;
  }

  // 初始化统计滤波器
  pcl::StatisticalOutlierRemoval<PointType> statistical_filter;
  // 设置输入点云
  statistical_filter.setInputCloud(cloud);
  // 设置邻域数量
  statistical_filter.setMeanK(10);
  // 设置标准差倍率
  statistical_filter.setStddevMulThresh(3.0);
  // 执行滤波
  statistical_filter.filter(*cloud_filter);

  pcl::io::savePCDFileASCII(pcd_save_path, *cloud_filter);
  return 0;
}

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

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

相关文章

“论剑”智算时代,长沙已经站在计算产业的“华山之巅”

文 | 智能相对论 作者 | 陈泊丞 共赴全新十年之约&#xff0c;长沙又来搞大事情了&#xff01; 2024互联网岳麓峰会以“AI汇湘江 数智领航未来”为主题&#xff0c;全面聚焦在“AI”时代把握数字化、网络化、智能化发展机遇&#xff0c;积极响应当前人工智能技术迅猛发展的势…

【Qt笔记】QTableWidget控件详解

目录 引言 一、QTableWidget的特点 二、QTableWidget基础 2.1 引入QTableWidget 2.2 基本属性 三、代码示例&#xff1a;初始化QTableWidget 四、编辑功能 4.1 设置单元格为只读 4.2 响应内容更改 五、选择模式 六、样式定制 七、与其他控件的交互 7.1 在单元格…

网络工程师学习笔记——无线通信网(二)

MAC子层 包含逻辑链路层&#xff08;LLC&#xff09;和介质访问控制层&#xff08;MAC&#xff09;两个子层 无线访问机制 MAC子层是提供访问机制控制 <1>CSMA/CA是类似于802.3当中的CSMA/CD且支持竞争访问 为何不适用CSMA/CD ,因为有隐藏的节点和暴露的节点&#xf…

QT天气预报

json 理论 什么是JSON? 规则 被大括号包括的是JSON对象,被中括号包括的是JSON数组. JSON数组JSON对象 实验 构建JSON 用代码实现如下json内容: //构建JSON void WirteJson() {QJsonObject rootObject;//1.插入name字段rootObject.insert("name","china&quo…

新手必看,​7款常见的短视频剪辑软件附详细教程,一看就会!

视频剪辑已经成为了我们生活和工作中常见的需求之一&#xff0c;windows视频编辑软件有很多&#xff0c;从简单的剪辑到复杂的视觉效果制作&#xff0c;不同的视频剪辑软件满足不同剪辑需求。本文将详细介绍一些广泛使用的视频制作软件&#xff0c;包括它们的功能特点以及一些高…

前海打工人的免费公园停车场

现在桂湾公园地下停车场距离前海的搬砖的写字楼近一些也好一些&#xff0c;由于主打一个免费&#xff0c;故很多情况都被预约满了。我住的地方在宝安石岩&#xff0c;提前1小时预约根本就没办法到停车场。故我最近都是停前海运动公园的地面停车场【372个停车位】。但是这个地面…

全球视频云创新挑战赛算法赛道第一名比赛攻略

关联比赛: “新内容 新交互”全球视频云创新挑战赛--算法挑战赛道 Richardzuo比赛攻略 赛题背景与理解 视频物体分割&#xff08;Video Object Segmentation&#xff09;是计算机视觉最近两三年兴起的⼀个研究领域&#xff0c;其⽬的是从视频所有图像帧中把感兴趣的物体区域…

指针 (五)

一 . 字符指针变量 在指针的类型中&#xff0c;有一种是字符指针&#xff1a;char * &#xff0c;用法如下&#xff1a; 下面我们通过一道试题来加深理解&#xff1a; 看着这个运行结果&#xff0c;是不是跟自己心中预想的答案有一些出入呢&#xff1f;下面为诸君解读一下&…

VS中.NET项目中央包管理和多目标框架配置

引言 通常我们在做项目时会给不同的程序员分配不同的功能模块进行各自开发&#xff0c;当然要遵守一定的约定或同一的框架设计。这在同一个工程中就会出现不同的项目类库需要引用&#xff0c;而这些类库可能会引用一些Nuget包&#xff0c;对于这些包的管理如果都在每个项目中去…

凸优化学习(1)——什么是凸优化、凸集、凸函数

&#x1f345; 写在前面 &#x1f468;‍&#x1f393; 博主介绍&#xff1a;大家好&#xff0c;这里是hyk写算法了吗&#xff0c;一枚致力于学习算法和人工智能领域的小菜鸟。 &#x1f50e;个人主页&#xff1a;主页链接&#xff08;欢迎各位大佬光临指导&#xff09; ⭐️近…

铲屎官都该知道的除浮毛神器——希喂、美的、352宠物空气净化器

为什么明明在南方&#xff0c;却能感受到北方柳絮漫天飞舞&#xff0c;鼻子被堵住的感觉&#xff1f;这都是家里的猫咪在作怪。最近我感觉家里的空气特别闷&#xff0c;打开窗户通风了很久都没什么用就没去管了。早上起来的时候鼻子异物感很重&#xff0c;甚至还咳嗽不止&#…

Android TextView 学习备忘

android:gravity 与 android:layout_gravity&#xff1a; Android TextView文本位置_mob649e8166858d的技术博客_51CTO博客https://blog.51cto.com/u_16175509/8597723

【重学 MySQL】三、RDBMS 和非 RDBMS

【重学 MySQL】三、RDBMS 和非 RDBMS 关系型数据库&#xff08;RDBMS&#xff09;关系型数据库的核心概念关系型数据库的优点关系型数据库的缺点 非关系型数据库&#xff08;非 RDBMS&#xff09;定义与特点主要特点常见类型应用场景优缺点NoSql 的演变早期阶段&#xff08;20世…

langgraph tool如何发送自定义事件

在工具调用过程中&#xff0c;如何将中间状态返回到的stream&#xff0c;可以使用from langchain_core.callbacks import dispatch_custom_event方法实现。示例如下 from langchain_core.callbacks import dispatch_custom_event from langchain_core.tools import tooltool d…

分布式技术概览

文章目录 分布式技术1. 分布式数据库&#xff08;Distributed Databases&#xff09;2. 分布式文件系统&#xff08;Distributed File Systems&#xff09;3. 分布式哈希表&#xff08;Distributed Hash Tables, DHTs&#xff09;4. 分布式缓存&#xff08;Distributed Caching…

QT 联合opencv 易错点

https://blog.csdn.net/qq_51699436/article/details/135777911 网上已经有大量优秀切详尽的文章来讲述QT联合opencv了&#xff0c;我把容易出错的点列出来备忘 1、在进行opencv进行编译时&#xff0c;要确认好是32位还是64位&#xff0c;因为在创建QT项目的时候QT和opencv要匹…

Vue(7)——工程化开发

目录 工程化开发 组件化开发 普通组件的注册使用 局部注册 全局注册 组件三大组成部分说明 template style script 组件通信 父子关系 prpo prpos校验 类型校验 其他校验 prop与data、单向数据流 工程化开发 工程化开发模式&#xff1a;基于构建工具的环境…

LLM大模型学习:AI大模型原理、应用与未来趋势!

1. 引言 在自然语言处理&#xff08;NLP&#xff09;与人工智能&#xff08;AI&#xff09;的广袤星海中&#xff0c;大语言模型&#xff08;Large Language Models, LLMs&#xff09;宛如一颗璀璨的星辰&#xff0c;正悄然改变我们与语言和机器的互动方式。本章将引领您步入一…

Python从入门到高手1.1节-在windows中安装Python

1.1.1 为什么要安装Python解释器&#xff1f; Python是一种解释型语言&#xff0c;代码的执行需由解释器来逐行读取、转换成机器语言并执行。没有Python解释器&#xff0c;我们编写的Python代码便无法在计算机中运行。 同学们对语言翻译器一定不陌生&#xff0c;我们通过翻译器…

MySQL之DQL-分组函数

1、分组函数 1. 分组函数语法 分组函数也叫聚合函数。是对表中一组记录进行操作&#xff0c;每组只返回一个结果。我们只讲如下5个常用的分组函数&#xff1a; 分组函数 含义 MAX 求最大值 MIN 求最小值 SUM 求和 AVG 求平均值 COUNT 求个数 分组函数的语法如下…