当前位置: 首页 > 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.lryc.cn/news/619020.html

相关文章:

  • 编程模型设计空间的决策思路
  • QT第四讲-QString和QT数据类型之间转换
  • 当多模态大语言模型遇上视觉难题!AI视觉探索之旅
  • NLP基础
  • CASS11计算斜面面积
  • sqli-libs通关教程(41-50)
  • 【leetcode】45. 跳跃游戏2
  • cuda排序算法--双调排序(Bitonic_Sort)
  • __base__属性
  • 【动态规划】leecode 198的打家劫舍2:dp集合有两种写法对比
  • 关系型数据库中,如果某一列的选项只有几种(比如性别、状态等低基数枚举值),添加索引的效果如何?
  • day26-IO(2)
  • 学习笔记《区块链技术与应用》ETH 第二天 状态树
  • 数据分析—双十一
  • B.10.02.3-分布式一致性:电商业务场景下的理论与工程实践
  • IDEA插件开发实践
  • 从阶段演进到智能跃迁:企业合同管理的发展与趋势
  • SynAdapt:通过合成连续思维链实现大语言模型的自适应推理
  • @Rancher简介部署使用 - Docker Compose
  • Spring MVC 处理请求的完整流程详解
  • 【Unity】Spine重新播放动画时会闪烁上次动画的残影
  • 秋招笔记-8.12
  • Tauri Qt孰优孰劣
  • 【Unity】Unity中ContentSizeFitter有时无法及时自适应大小问题解决
  • 终端安全检测和防御技术总结
  • Python初学者笔记第二十四期 -- (面向对象编程)
  • SpringBoot集成MyBatis的SQL拦截器
  • MES系统怎么实现数字化闭环与设备预测性维护?
  • SQL180 每类试卷得分前3名
  • 单例模式,动态代理,微服务原理