当前位置: 首页 > news >正文

PCL去离群点 之SOR和ROR详解

在 Point Cloud Library 里,去离群点最经典的就是:

  • SOR:StatisticalOutlierRemoval(统计滤波)
  • ROR:RadiusOutlierRemoval(半径滤波)
  • SOR:用“统计分布”找异常点(全局思维)
  • ROR:用“局部密度”找孤立点(局部思维)

一、SOR(统计离群点)详解

核心思想(本质)

用统计学判断“谁不合群” SOR = 看每个点“和邻居的平均距离”,太远的就是离群点

步骤:

  1. 对每个点 pi​,找 K 个邻居
  2. 计算这些邻居的平均距离
  3. 得到所有点的距离分布(近似高斯)
  4. 超过阈值的点 → 删除

数学直觉

这就是StddevMulThresh


特点总结

自适应(自动根据数据分布)
对随机噪声非常鲁棒
在边缘容易误删


典型效果

  • 去掉“漂浮噪声”
  • 点云整体更干净
  • 保持结构

举例说明

假设有一段 1D 点(为了简单):

正常点: 0.0, 0.1, 0.2, 0.15, 0.18 离群点: 5.0

步骤1:对每个点找邻居(假设 K=3)

比如:

点 0.1:

邻居:0.0, 0.2, 0.15
平均距离:

点 5.0(离群点):

步骤2:统计所有点的“平均距离分布”

平均距离
正常点~0.08
离群点~4.82

步骤3:计算均值 + 标准差

步骤4:设阈值(StddevMulThresh = 1)

效果
小(10)不稳定
中(30~50)推荐
大(100)平滑但慢
效果
0.5删很多(激进)
1.0常用
2.0保守
pcl::StatisticalOutlierRemoval<pcl::PointXYZ> sor; sor.setInputCloud(cloud); // 每个点找50个邻居 sor.setMeanK(50); // 标准差倍数(越小越严格) sor.setStddevMulThresh(1.0); sor.filter(*cloud_filtered);

二、ROR(半径离群点)详解

核心思想

用“邻居数量”判断是否孤立

步骤:

  1. 对每个点画一个半径 rrr
  2. 统计邻居数量 NNN
  3. 如果:

本质理解

空间密度约束

  • 正常区域:点密集
  • 离群点:孤零零

特点总结

直观、可控

对“孤立点”非常有效
对密度变化敏感(致命点)

r效果
删得多(容易误删)
推荐
几乎不删
效果
小(2~5)宽松
中(5~20)常用
大(50+)严格
pcl::RadiusOutlierRemoval<pcl::PointXYZ> ror; ror.setInputCloud(cloud); // 搜索半径(单位:米) ror.setRadiusSearch(0.05); // 最少邻居数 ror.setMinNeighborsInRadius(10); ror.filter(*cloud_filtered);

三、SOR vs ROR 本质区别(重点)

维度SORROR
判断依据距离统计邻居数量
是否自适应✅ 是❌ 否
对密度变化稳定敏感
对孤立点一般很强
对边缘易误删保留好
参数难度中等高(依赖尺度)
http://www.cnnetsun.cn/news/1585322.html

相关文章:

  • 拆解 OpenHands(11)--- Runtime主要组件
  • 提示词注入致邮件被删,AI Agent安全该如何防护?
  • springboot+vue基于web的学生学业预警系统
  • 从电价优势到低成本词元(Token)出海的叙事路径成立吗?深度解析实在Agent驱动的企业级AI智能体全球化布局
  • 2026降AI率工具红黑榜:降AIGC平台怎么选?清单来了
  • SillyTavern终极指南:5步打造专业级AI角色聊天体验
  • GitHub Desktop汉化终极指南:三分钟实现中文界面自由
  • SEO_详解SEO优化的基本原理与核心策略介绍
  • 双三相永磁同步电机直接转矩控制的Matlab/Simulink仿真探索
  • 如何快速掌握AsrTools:免费语音转文字工具完整指南
  • 利用QEMU模拟树莓派环境实现IoT固件动态分析与调试
  • 从比特币到HTTPS:图解SHA512算法在区块链和TLS握手里的核心作用
  • pk3DS终极指南:打造独一无二的3DS宝可梦世界
  • WorkshopDL:突破平台壁垒的Steam创意工坊资源解放工具
  • Stable Yogi Leather-Dress-Collection 皮革设计效果惊艳展示:多风格高清作品集
  • 大疆机场系统集成:基于Java与MQTT的无人机集群调度实战
  • Windows风扇智能调速实战指南:从噪音难题到散热优化
  • 避坑指南:重置Kafka Offset时,如何避免数据重复与丢失?
  • LunaTranslator快捷键配置实战:打造高效视觉小说翻译工作流
  • BERTopic高级实战:5大企业级文本分析难题的智能解决方案
  • 高效掌握开源工具抖音直播录制:从基础搭建到高级应用指南
  • 用STM32F103C8T6和F9P模组DIY一台RTK高精度导航小车(附PCB文件与源码)
  • 网易云无损解析工具深度指南:打造高品质音乐收藏全攻略
  • Macleod Stack在长波通滤波器设计中的优化策略
  • 【Java 25虚拟线程隔离生死线】:为什么92%的团队在v25.0.1升级后遭遇ThreadLocal泄漏?
  • Kazumi:3个步骤告别追番困扰,打造你的专属动漫播放器
  • 如何在7天内掌握实时媒体AI开发?从入门到产品落地的完整路径
  • 如何解决多设备电量焦虑?Mac全设备电量监控方案
  • SAP BTP新手避坑指南:从零开始创建Directory和Subaccount(附Region选择建议)
  • 3步掌握Hunyuan3D-2:告别传统建模,AI如何帮你10分钟生成高质量3D资产?