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

pcl 按比例去除点云的噪点

之前halcon3d中是这么做的;

1,先查找点云中每个点最近第15个最近点的距离

2,将距离进行排序

3,求排序后在距离数组70%位置的距离 d

4,筛选点云中每个点半径为d,近邻点的数量大于14的点

用pcl实现的代码如下(我是个中年pcl小学生,有更好 的方法的大佬,请留言)
#define _CRT_SECURE_NO_WARNINGS#include <iostream>
#include <pcl/pcl_config.h>
#include<pcl/io/ply_io.h>
#include<pcl/io/pcd_io.h>
#include<pcl/point_types.h>
#include<pcl/visualization/cloud_viewer.h>
#include<pcl/visualization/pcl_visualizer.h>
#include<pcl/filters/passthrough.h>
#include<pcl/filters/voxel_grid.h>
#include<pcl/filters/radius_outlier_removal.h>
#include<pcl/features/normal_3d.h>
#include<pcl/filters/statistical_outlier_removal.h>
#include<pcl/common/common.h>
#include "tolls.h"
using namespace std;int main(int argc, char* argv)
{pcl::PointCloud<pcl::PointXYZRGB>::Ptr cloud(new pcl::PointCloud<pcl::PointXYZRGB>);std::string filename = "D:\\Desktop\\pacl_learning\\pointcloud\\table\\table_scene_mug_stereo_textured.pcd";pcl::io::loadPCDFile(filename, *cloud);cout << cloud->points.size() << endl;vector<int> a;pcl::removeNaNFromPointCloud(*cloud, *cloud, a);cout << cloud->points.size() << endl;pcl::search::KdTree < pcl::PointXYZRGB > tree;tree.setInputCloud(cloud);vector<float> max_distance_15;for (int i=0;i<cloud->points.size();i++){vector<int> indexs;vector<float> distacne_s;tree.nearestKSearch(cloud->points[i],15,indexs,distacne_s);auto max_it = std::max_element(distacne_s.begin(), distacne_s.end());max_distance_15.push_back(sqrt(*max_it));//cout << *max_it << endl;}int length1 = max_distance_15.size();cout << length1 << endl;cout << max_distance_15[length1-1] << endl;std::sort(max_distance_15.begin(), max_distance_15.end());cout << max_distance_15[length1 - 1] << endl;float distance_thr = max_distance_15[int(length1*0.7)];cout << distance_thr << endl;//开始做半径滤波//初始化一个接受点云pcl::PointCloud<pcl::PointXYZRGB>::Ptr cloud_filter(new pcl::PointCloud<pcl::PointXYZRGB>);pcl::RadiusOutlierRemoval<pcl::PointXYZRGB> r_filter;r_filter.setInputCloud(cloud);r_filter.setRadiusSearch(distance_thr);r_filter.setMinNeighborsInRadius(14);r_filter.filter(*cloud_filter);//cout << "滤波后点云的数量--" << cloud_filter->points.size() << endl;pcl::visualization::PCLVisualizer::Ptr show(new pcl::visualization::PCLVisualizer(""));show->setBackgroundColor(0.1, 0.1, 0.1);pcl::visualization::PointCloudColorHandlerRGBField < pcl::PointXYZRGB > rgb(cloud_filter);show->addPointCloud(cloud, rgb, "cloud_normal");show->setPointCloudRenderingProperties(pcl::visualization::PCL_VISUALIZER_POINT_SIZE, 5, "cloud_normal");show->addCoordinateSystem(0.5);while (!show->wasStopped()){show->spinOnce(100);}}

http://www.dtcms.com/a/327961.html

相关文章:

  • 自动化运维实验
  • Baumer高防护相机如何通过YoloV8深度学习模型实现纸箱的实时检测计数(C#代码UI界面版)
  • 备份单表的方法
  • 工业相机镜头选型
  • HTTPS加密与私有CA配置全攻略
  • AI智能体平台大爆发,2025AI智能体平台TOP30
  • 【Unity3D实例-功能-下蹲】角色下蹲(二)穿越隧道
  • Python爬虫获取淘宝店铺所有商品信息API接口
  • IoTDB与传统数据库的核心区别
  • 【Linux系列】服务器 IP 地址查询
  • OpenBMC中C++单例模式架构与实现全解析
  • 站在Vue的角度,对比鸿蒙开发中的递归渲染
  • 线缆桥架、管道设计规范详解
  • 异步并发×编译性能:Dart爬虫的实战突围
  • USB 2.0 3.0 插拔 ftrace 详解
  • MySQL相关概念和易错知识点(5)(索引、事务、MVCC)
  • LintCode第1526-N叉树的前序遍历
  • MongoDB 入门指南(一):从 0 到 1 学会文档数据库
  • QT之问题解决记录1:上下位机通信中断而不自知
  • react+redux+toolkit来实现公共数据的处理-对比vuex
  • 深度学习日志及可视化过程
  • 【机器学习深度学习】归一化层
  • Java 编程每日一题:实现一个简易的 LRU 缓存
  • JavaSE:数据类型与变量
  • 13-docker的轻量级私有仓库之docker-registry
  • 网络安全第1—2天笔记
  • 【19】万集科技——万集科技嵌入式,校招 一面,二面,面试问答记录
  • 数据分析与可视化
  • Unity数据可视化图表插件XCharts
  • CS2服务器是何方神圣