StatisticalOutlierRemoval:离群点移除
官方代码解析
首先解析一波官方代码:
pcl::PCDReaderreader;//定义读取对象
reader.read<pcl::PointXYZ>("table_scene_lms400.pcd",*cloud);//读取点云文件
然后,创建了一个pcl::StatisticalOutlierRemoval滤波器,将对每个点分析的临近点个数设为50,并将标准差倍数设为1,这意味着如果一个点的距离超出平均距离一个标准差以上,则该点被标记为离群点,并将被移除。计算后的输出结果储存在cloud_filtered中。
pcl::StatisticalOutlierRemoval<pcl::PointXYZ> sor;// 创建滤波器对象
sor.setInputCloud(cloud); //设置呆滤波的点云
sor.setMeanK(50); //设置在进行统计时考虑查询点邻近点数
sor.setStddevMulThresh(1.0); //设置判断是否为离群点的阈值
sor.filter(*cloud_filtered); //执行滤波处理保存内点到cloud_filtered
剩下的数据(内部点)将被存入磁盘,以供其他使用,例如可视化等。
pcl::PCDWriterwriter;
writer.write<pcl::PointXYZ>("table_scene_lms400_inliers.pcd",*cloud_filtered,false);
然后,使用同样的参数再次调用该滤波器,但是利用函数setNegative设置使输出取外点,以获取离群点数据(也就是原本滤除掉的点)。
sor.setNegative(true);
sor.filter(*cloud_filtered);
并将数据写回到磁盘。
writer.write<pcl::PointXYZ>("table_scene_lms400_outliers.pcd",*cloud_filtered,false);
实战数据:
#include <iostream>
#include <vector>
#include <ctime>
//---------------------------------------------
#include <pcl/point_types.h>
#include <pcl/point_cloud.h>
#include <pcl/io/pcd_io.h>
#include <pcl/io/vtk_lib_io.h> //obj读取头文件
#include <pcl/visualization/pcl_visualizer.h>
#include <pcl/kdtree/kdtree_flann.h>
#include <pcl/features/normal_3d.h>
//-法向显示错误:no override found for vtkActor--
#include <vtkAutoInit.h>
VTK_MODULE_INIT(vtkRenderingOpenGL);
//outlier
#include <pcl/filters/statistical_outlier_removal.h>using namespace std;int main() {pcl::PointCloud<pcl::PointXYZ>::Ptr cloud(new pcl::PointCloud<pcl::PointXYZ>);pcl::PointCloud<pcl::PointXYZ>::Ptr bottom(new pcl::PointCloud<pcl::PointXYZ>);//-------------------------------读取点云文件---------------------------------------------------pcl::PolygonMesh mesh;if (pcl::io::loadPolygonFile("D:/pcd/shoeData/0422/0423-1.obj", mesh) == -1){cout << "COULD NOT READ FILE mid.pcl \n";system("pause");return (-1);}pcl::fromPCLPointCloud2(mesh.cloud, *cloud);cout << "points sieze is:" << cloud->size() << endl;//outlierpcl::PointCloud<pcl::PointXYZ>::Ptr cloud_filtered(new pcl::PointCloud<pcl::PointXYZ>);pcl::StatisticalOutlierRemoval<pcl::PointXYZ> sor;sor.setInputCloud(cloud);sor.setMeanK(200); //设置在进行统计时考虑查询点邻近点数sor.setStddevMulThresh(1.0); //设置判断是否为离群点的阈值,如果一个点的距离超出平均距离一个标准差以上,则该点被标记为离群点,并将被移除。sor.filter(*cloud_filtered);//---------------------------------显示---------------------------------------------------------------------boost::shared_ptr<pcl::visualization::PCLVisualizer> viewer(new pcl::visualization::PCLVisualizer("3D viewer"));int v1(0);viewer->createViewPort(0.0, 0.0, 0.5, 1.0, v1);//xmin, ymin, xmax, ymax,取值范围0-1viewer->setBackgroundColor(0, 0, 0, v1);pcl::visualization::PointCloudColorHandlerCustom<pcl::PointXYZ> green0(cloud, 0, 225, 0);viewer->addPointCloud(cloud, green0, "cloud", v1);int v2(0);viewer->createViewPort(0.5, 0.0, 1.0, 1.0, v2);viewer->setBackgroundColor(0.3, 0.3, 0.3, v2);pcl::visualization::PointCloudColorHandlerCustom<pcl::PointXYZ> green1(cloud_filtered, 0, 225, 0);viewer->addPointCloud(cloud_filtered, green1, "cloud_filtered", v2);while (!viewer->wasStopped()) {viewer->spinOnce(100);}system("pause");return 0;
}
效果图
StatisticalOutlierRemoval:离群点移除相关推荐
- 从Hadoop集群中移除一块磁盘的操作
2019独角兽企业重金招聘Python工程师标准>>> 背景 由于历史原因,CDH的hadoop的每个DataNode节点下挂载了多个磁盘,后要对一些配置差的磁盘要用配置较好的新磁盘 ...
- 使用 kubectl drain 从集群中移除节点
对节点执行维护操作之前(例如:内核升级,硬件维护等),您可以使用 kubectl drain 安全驱逐节点上面所有的 pod.安全驱逐的方式将会允许 pod 里面的容器遵循指定的 PodDisrupt ...
- 记hadoop集群黑名单移除节点出现问题及解决
首先区分一下通过直接下线服务和通过黑名单来移除节点的区别,这两个动作都会涉及到block副本数不够而复制移动恢复的问题,但是通过黑名单的话可以同时移除多个节点,这个是两种情况的主要区别: 步骤: 1. ...
- mysql 集群怎么卸载节点_Greenplum移除节点
基于某某原因,我们的Greenplum需要卸载一个节点(测试环境的Greenplum集群),由于该集群使用了很久,里面有许多开发所需要的数据,所以在卸掉一个节点后,还要保证数据不会丢失. 当然,期间也 ...
- PCL学习记录-3 Filter-3 StatisticalOutlierRemoval filter(离散点去除)功能及用法解析
稀疏离群值的消除基于输入数据集中点到邻居距离的分布的计算.对于每个点,我们计算从它到所有相邻点的平均距离.通过假设结果分布是具有均值和标准差的高斯分布,可以将其平均距离在由全局距离均值和标准差定义的区 ...
- docker 实现redis集群搭建
摘要:接触docker以来,似乎养成了一种习惯,安装什么应用软件都想往docker方向做,今天就想来尝试下使用docker搭建redis集群. 首先,我们需要理论知识:Redis Cluster是Re ...
- redis集群之REDIS CLUSTER
redis集群之REDIS CLUSTER 时间 2016-04-11 17:05:00 NoSQL_博客园 原文 http://www.cnblogs.com/zhanchenjin/p/537 ...
- ElasticSearch之集群原理
ElasticSearch 的主旨是随时可用和按需扩容. 而扩容可以通过购买性能更强大(垂直扩容,或 纵向扩容) 或者数量更多的服务器(水平扩容,或 横向扩容 )来实现. 虽然 ElasticSear ...
- redis集群扩容和缩容_redis集群cluster搭建,扩容缩容
1. 概要说明 1.1. 概述 本文旨在说明平台部署环境搭建的过程和详细步骤说明,为后面系统部署提供清晰的参考依照. 以下搭建部署的环境,为一个小型的分布式集群环境.满足负载均衡和单点故障 ...
最新文章
- 制药行业智能化发展现状趋势及建议
- 阿里云低代码行业智能开放平台开拓行业AI应用新方法
- 叉叉框架_叉/连接框架
- cbitmap 从内存中加载jpg_Pytorch数据加载的分析
- mybatis官方文档知识点梳理
- 个人笔记1:display与visibility用法
- c语言中row是什么意思中文,row是什么意思
- Linux内核——任务管理
- win10隐藏正在运行的程序怎么操作_win10怎么隐藏正在运行的软件
- 一种利用强核力和弱核力复制物质原子的仪器
- Flex入门基础——项目item的属性(order、flex-grow、flex-shrink、flex-basis、flex、align-self)
- Linux下so文件的生成和使用
- 项目部署的常用进程管理命令
- 熔断器Hystrix配置及使用
- python 贪吃蛇大作战_Python 实现 贪吃蛇大作战 代码分享
- SkyWalking 详细安装
- 玳鸽信息:近一年多数产业端对于转型升级有了明确的需求 | FBEC 2020特别策划...
- 美图秀秀2015年实习生android应用开发方向招聘笔试题
- 联想企业网盘:SaaS服务集群化持续交付实践
- Delphi ActionList详解