移除离群点------PCL

statisticalOutlierRemoval滤波器移除离群点

/// <summary>
/// 使用statisticalOutlierRemoval滤波器移除离群点
/// </summary>
/// <param name="cloud">被过滤的点云</param>
/// <param name="meank"></param>
/// <param name="threshold"></param>
/// <param name="Inversion">是否对结果取反,false:删除离群点,true:保留离群点</param>
/// <returns></returns>
pcl::PointCloud<pcl::PointXYZ>::Ptr PclTool::statisticalOutlierRemovalFilter(pcl::PointCloud<pcl::PointXYZ>::Ptr cloud, int meank, double threshold, bool inversion)
{
    pcl::PointCloud<pcl::PointXYZ>::Ptr cloud_filtered(new pcl::PointCloud<pcl::PointXYZ>);
    pcl::StatisticalOutlierRemoval<pcl::PointXYZ> sor;  // 创建滤波器对象

    sor.setInputCloud(cloud);     // 设置待滤波的点云
    sor.setMeanK(meank);          // 设置在进行统计时考虑查询点临近点数
    sor.setStddevMulThresh(1.0);  // 设置判断是否为离群点的阀值
    sor.setNegative(inversion);
    sor.filter(*cloud_filtered);  // 存储

    return cloud_filtered;
}
  • 删除离群点
    在这里插入图片描述
  • 仅保留离群点
    在这里插入图片描述

RadiusOutlinerRemoval 移除离群点

/// <summary>
/// RadiusOutlinerRemoval 移除离群点
/// </summary>
/// <param name="cloud"></param>
/// <param name="radius">设置半径的范围内找临近点</param>
/// <param name="minInRadius">设置查询点的邻域点集数小于minInRadius的删除</param>
/// <returns></returns>
pcl::PointCloud<pcl::PointXYZ>::Ptr PclTool::RORemoval(pcl::PointCloud<pcl::PointXYZ>::Ptr cloud, double radius, int minInRadius)
{
    pcl::PointCloud<pcl::PointXYZ>::Ptr cloud_filtered(new pcl::PointCloud<pcl::PointXYZ>);

    pcl::RadiusOutlierRemoval<pcl::PointXYZ> outrem;  // 创建滤波器

    outrem.setInputCloud(cloud);        // 设置输入点云
    outrem.setRadiusSearch(radius);     // 设置半径为0.8的范围内找临近点
    outrem.setMinNeighborsInRadius(minInRadius);  // 设置查询点的邻域点集数小于2的删除
    // apply filter
    outrem.filter(*cloud_filtered);  // 执行条件滤波   在半径为0.8 在此半径内必须要有两个邻居点,此点才会保存
    
    return cloud_filtered;
}

在这里插入图片描述

ConditionalRemoval 移除离群点

pcl::PointCloud<pcl::PointXYZ>::Ptr PclTool::conditionRemoval(pcl::PointCloud<pcl::PointXYZ>::Ptr cloud, std::vector<pcl::FieldComparison<pcl::PointXYZ>::ConstPtr> comparisons)
{
    pcl::PointCloud<pcl::PointXYZ>::Ptr cloud_filtered(new pcl::PointCloud<pcl::PointXYZ>);

    // 创建条件限定的下的滤波器
    pcl::ConditionAnd<pcl::PointXYZ>::Ptr range_cond(new pcl::ConditionAnd<pcl::PointXYZ>());  // 创建条件定义对象

    // 添加在Z字段上大于0的比较算子
    // GT greater than
    // EQ equal
    // LT less than
    // GE greater than or equal
    // LE less than  or equal 小于等于

     为条件定义对象添加比较算子
    //pcl::FieldComparison<pcl::PointXYZ>::ConstPtr comp1(new pcl::FieldComparison<pcl::PointXYZ>("z", pcl::ComparisonOps::GT, 0.0));     // 添加在Z字段上大于0的比较算子
    //pcl::FieldComparison<pcl::PointXYZ>::ConstPtr comp2(new pcl::FieldComparison<pcl::PointXYZ>("z", pcl::ComparisonOps::LT, 0.8));     // 添加在Z字段上小于0.8的比较算子
    //range_cond->addComparison(comp1);
    //range_cond->addComparison(comp2);


    //range_cond->addComparison(pcl::FieldComparison<pcl::PointXYZ>::ConstPtr(new pcl::FieldComparison<pcl::PointXYZ>("z", pcl::ComparisonOps::GT, 0.0)));  // 添加在Z字段上大于0的比较算子

    //range_cond->addComparison(pcl::FieldComparison<pcl::PointXYZ>::ConstPtr(new pcl::FieldComparison<pcl::PointXYZ>("z", pcl::ComparisonOps::LT, 0.8)));  // 添加在Z字段上小于0.8的比较算子

    for (const auto& once : comparisons)
    {
        range_cond->addComparison(once);
    }
    
    // 创建滤波器并用条件定义对象初始化
    pcl::ConditionalRemoval<pcl::PointXYZ> condrem;
    condrem.setCondition(range_cond);
    condrem.setInputCloud(cloud);    // 输入点云
    condrem.setKeepOrganized(true);  // 设置保持点云的结构
    // 设置是否保留滤波后删除的点,以保持点云的有序性,通过setuserFilterValue设置的值填充点云;或从点云中删除滤波后的点,从而改变其组织结构
    // 如果设置为true且不设置setUserFilterValue的值,则用nan填充点云
    // https://blog.csdn.net/qq_37124765/article/details/82262863

    // 执行滤波
    condrem.filter(*cloud_filtered);

    return cloud_filtered;
}

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

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

相关文章

如何将jpeg改为jpg格式?jpeg转换成jpg的三种方法

在我们的日常生活和工作中&#xff0c;经常需要进行图片格式转换&#xff0c;比如在许多社交平台中&#xff0c;我们可能需要将jpeg格式的图片转换为更常见的jpg格式&#xff0c;以便在不同设备或平台上更好地使用和查看&#xff0c;也更方便地分享和存储这些图片&#xff0c;而…

CHI中observe响应和order响应的区别

在CHI协议中&#xff0c;每个请求可以生成一个或多个响应&#xff0c;不同响应表示Completer完成不同的操作之后&#xff0c;返回给requestor的通知。Requestor收到响应之后&#xff0c;根据响应类型来判断下一步需要做什么。 1. Observe响应 Observe响应确定一个transaction相…

java线程间同步----wait、notify、synchronized

一、wait、notify wait、notify 是java 根级父类Obeject 中定义得两个方法&#xff0c;其相关作用如下&#xff1a; object.wait()&#xff1a;执行该语句&#xff0c;会让获取了该object对象锁得线程进入WAIT状态&#xff0c;并释放该object对象锁&#xff1b; object.notify…

同旺科技 USB TO SPI / I2C适配器读写24LC256--字节写

所需设备&#xff1a; 1、USB 转 SPI I2C 适配器&#xff1b;内附链接 2、24LC256芯片 适应于同旺科技 USB TO SPI / I2C适配器升级版、专业版&#xff1b; 00地址写入一个字节数据AA&#xff0c;并读回验证&#xff1b; 单字节写时序&#xff1a; 读字节时序&#xff1a; …

OpenCV——透视变换

前言 ​ 需求&#xff1a; 将一个梯形变为需要的图形&#xff0c;后续需要持续进行映射。让整张图像的所有点位都按照这样的映射关系进行映射。 正文 一、透视变换相关介绍 从名称中可以清楚地看出&#xff0c;透视变换研究是坐标变化之间的关系。这种类型的转换不保留信息…

数据采集技术综合项目实战3(网络爬虫+数据预处理+数据可视化)附带详细步骤说明,干货满满

项目介绍及需求&#xff1a; 本项目主要是通过对b站电影弹幕进行采集并分析。1.获得弹幕高频词生成符合该电影特征、主题、角色等相关字段的词云图&#xff0c;通过词云图的方式对某部电影主题具体化。2.获取用户年内评论发布时间观生成时间的折线图&#xff0c;以便从侧面观察…

HarmonyOS-静态库(SDK)的创建和使用

文章目录 一、静态库&#xff08;SDK&#xff09;二、创建静态库1.新建静态库模块2. 开发静态库内容3. 编译静态库 三、使用静态库1. 配置项目依赖2. 在应用中使用静态库3. 注意事项 四、打包错误1. library引用本地har包错误 一、静态库&#xff08;SDK&#xff09; 在Harmon…

【35分钟掌握金融风控策略6】决策树风控策略开发

目录 ​编辑 决策树 决策树原理 决策树生成 特征选择 决策树生成 决策树剪枝 决策树 决策树&#xff08;Decision Tree&#xff09;是一种强大的分类和预测方法&#xff0c;因其实践起来比较简单且具有较好的解释性&#xff0c;所以在金融风控领域应用广泛。决策树也是…

如何快速提高阿里国际、Shopee和速卖通产品的曝光率?

当卖家完成产品上传后&#xff0c;他们还能做些什么来进一步提升产品的曝光量呢&#xff1f;产品的曝光量无疑对店铺的销量具有显著影响&#xff0c;那么&#xff0c;如何有效地提升产品曝光量呢&#xff1f;又有哪些快速且实用的方法呢&#xff1f;今天&#xff0c;我们就来深…

【力扣 Hot100 | 第五天】4.20(回文链表)

1.回文链表 1.1题目 给你一个单链表的头节点 head &#xff0c;请你判断该链表是否为回文链表。如果是&#xff0c;返回 true &#xff1b;否则&#xff0c;返回 false 。 示例一&#xff1a; 输入&#xff1a;head [1,2,2,1] 输出&#xff1a;true示例二&#xff1a; 输入…

智慧城市标准化白皮书(2022版)发布

2022年7月25日&#xff0c;国家智慧城市标准化总体组2022年度全体会议召开期间&#xff0c;《智慧城市标准化白皮书&#xff08;2022版&#xff09;》正式发布。 城市作为一个复杂巨系统&#xff0c;是多元主体融合及多元活动集聚的复杂综合体。城市的运行发展关联 到发展、治…

康耐视visionpro-Cog2DSymbolTool操作操作工具详细说明

Cog2 DSymbolToolI功能说明&#xff1a; 二维码读取工具 Cog2 DSymbolTool操作说明&#xff1a; ①.打开工具栏&#xff0c;双击或点击鼠标拖拽添加Cog2DSymbolTool工具 ②.添加输入图像&#xff0c;右键“链接到”或以连线拖拽的方式选择相应输入图像。 ③.代码系统&#x…

Pytest精通指南(22)钩子函数-重复执行(pytest-repeat)

文章目录 前言应用场景插件安装参数分析使用方式一&#xff1a;命令行使用方式二&#xff1a;配置文件使用方式三&#xff1a;装饰器 前言 pytest框架中的**重复测试&#xff08;pytest-repeat&#xff09;**插件的用途是允许在运行测试用例时进行多次循环&#xff0c;以更全面…

2024年开通最新版云开发cms步骤,开始开发微信小程序前的准备工作,认真看完奥!

小程序官方有改版了&#xff0c;搞得石头哥不得不紧急的再新出一版&#xff0c;教大家开通最新版的cms网页管理后台 一&#xff0c;技术选型和技术点 1&#xff0c;小程序前端 wxml css JavaScript MINA原生小程序框架 2&#xff0c;数据库 云开发 云数据库 云…

中毒的电脑插U盘也会中毒吗?U盘中毒了不显示数据怎么办

随着数字技术的快速发展&#xff0c;U盘作为数据存储和传输的重要工具&#xff0c;广泛应用于我们的日常生活和工作中。然而&#xff0c;U盘在带来便利的同时&#xff0c;也带来了潜在的安全风险。当一台中毒的电脑插入U盘时&#xff0c;U盘是否也会被感染&#xff1f;如果U盘中…

PHP 爬虫如何配置代理 IP(CURL 函数)

在 PHP中 配置代理IP&#xff0c;可以通过设置 CURL 库的选项来实现&#xff0c;代码如下&#xff1a; 当然你要有代理ip来源&#xff0c;比如我用的这个 代理商 &#xff0c;如果想服务稳定不建议找开源代理池&#xff0c;避免被劫持。 <?php // 初始化cURL会话 $ch cu…

C++中的stack(容器适配器)

目录 一、成员函数 一、构造函数 二、入栈 三、出栈 四、判空 empty () 五、栈大小 size 六、取栈顶元素 top 七、入栈 emplace 八、交换函数 swap 二、非成员函数重载 一、关系运算符重载 二、交换函数 C中的stack不再是容器&#xff0c;而是容器适配器 注意&a…

[InternLM训练营第二期笔记]4. XTuner 微调 LLM:1.8B、多模态、Agent

该系列是上海AI Lab举行的书生 浦语大模型训练营的相关笔记部分。 该笔记是第四节课&#xff0c;学习大语言模型微调的基本概念&#xff0c;以及利用XTuner工具进行微调。 0. 什么是LLM中的微调 0.1 两种Finetune范式 微调的目的是为了让foundation模型在特定的领域更好地发挥…

力扣练习题(2024/4/18)

1不相交的线 在两条独立的水平线上按给定的顺序写下 nums1 和 nums2 中的整数。 现在&#xff0c;可以绘制一些连接两个数字 nums1[i] 和 nums2[j] 的直线&#xff0c;这些直线需要同时满足&#xff1a; nums1[i] nums2[j]且绘制的直线不与任何其他连线&#xff08;非水平线…

mysql按季度统计数据

最近遇到按表里得交付时间换成季度取统计&#xff0c;如下&#xff1a; select sp.Id,sp.title,QUARTER(sp.expected_delivery_time) dateStr,CONCAT(DATE(MIN(sp.expected_delivery_time)),至,DATE(MAX(sp.expected_delivery_time))) dateStr2,sp.DemandType,sp.IndustryGrou…