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

PCL对点云进行滤波处理并进行颜色可视化

介绍

和图像滤波相似,点云的滤波处理非常重要。在获取点云数据时 ,由于设备和操作者经验环境因素带来的影响,被测物体表面性质变化和数据拼接配准操作过程的影响,点云数据中讲不可避免的出现一些噪声。在点云处理流程中滤波处理作为预处理的第一步,对后续的影响比较大,只有在滤波预处理中将噪声点 ,离群点,孔洞,数据压缩等按照后续处理定制,才能够更好的进行配准,特征提取,曲面重建,可视化等后续应用处理。

源代码

#include <iostream>
#include <pcl/io/pcd_io.h>
#include <pcl/point_types.h>
#include <pcl/filters/statistical_outlier_removal.h>
#include <pcl/visualization/cloud_viewer.h>int
main()
{pcl::PointCloud<pcl::PointXYZ>::Ptr cloud(new pcl::PointCloud<pcl::PointXYZ>);pcl::PointCloud<pcl::PointXYZ>::Ptr cloud_filtered(new pcl::PointCloud<pcl::PointXYZ>);// 定义读取对象pcl::PCDReader reader;// 读取点云文件reader.read<pcl::PointXYZ>("model.pcd", *cloud);pcl::visualization::PCLVisualizer viewer("Head Point Before Blur");viewer.setBackgroundColor(0, 0, 0);pcl::visualization::PointCloudColorHandlerGenericField<pcl::PointXYZ> fildColor(cloud, "z");//按照z字段进行渲染viewer.addPointCloud<pcl::PointXYZ>(cloud, fildColor, "sample");//显示点云,其中fildColor为颜色显示viewer.setPointCloudRenderingProperties(pcl::visualization::PCL_VISUALIZER_POINT_SIZE, 3, "sample");//设置点云大小while (!viewer.wasStopped()){viewer.spinOnce();}std::cerr << "Cloud before filtering: " << std::endl;std::cerr << *cloud << std::endl;// 创建滤波器,对每个点分析的临近点的个数设置为50 ,并将标准差的倍数设置为1  这意味着如果一//个点的距离超出了平均距离一个标准差以上,则该点被标记为离群点,并将它移除,存储起来pcl::StatisticalOutlierRemoval<pcl::PointXYZ> sor;   //创建滤波器对象sor.setInputCloud(cloud);                           //设置待滤波的点云sor.setMeanK(50);                               //设置在进行统计时考虑查询点临近点数sor.setStddevMulThresh(1.0);                      //设置判断是否为离群点的阀值sor.filter(*cloud_filtered);                    //存储pcl::visualization::PCLVisualizer viewer1("Head Point Before Blur");viewer1.setBackgroundColor(0, 0, 0);viewer1.addPointCloud<pcl::PointXYZ>(cloud_filtered, fildColor, "sample");//显示点云,其中fildColor为颜色显示viewer1.setPointCloudRenderingProperties(pcl::visualization::PCL_VISUALIZER_POINT_SIZE, 3, "sample");//设置点云大小while (!viewer1.wasStopped()){viewer1.spinOnce();}std::cerr << "Cloud after filtering: " << std::endl;std::cerr << *cloud_filtered << std::endl;pcl::PCDWriter writer;writer.write<pcl::PointXYZ>("model_inliers.pcd", *cloud_filtered, false);sor.setNegative(true);sor.filter(*cloud_filtered);writer.write<pcl::PointXYZ>("model_outliers.pcd", *cloud_filtered, false);return (0);
}

实验结果

在这里插入图片描述


http://www.taodudu.cc/news/show-1782129.html

相关文章:

  • 【physx/wasm】在physx中添加自定义接口并重新编译wasm
  • excel---常用操作
  • Lora训练Windows[笔记]
  • linux基础指令讲解(ls、pwd、cd、touch、mkdir)
  • InnoDB 事务处理机制
  • 启明云端ESP32 C3 模组WT32C3通过 MQTT 连接 AWS
  • PCL中的关键点
  • PCL点云参数估计算法之RANSAC和LMEDS
  • PCL计算点云的法线
  • PCL中的点云分割算法
  • PCL中把点云拟合成曲面(附源代码)
  • 环形链表 II
  • C++调用caffe分类模型-Opencv3.4.3
  • C++调用SSD caffe模型进行物体检测-Opencv3.4.3
  • C++调用tensorflow训练好的SSD物体检测模型-opencv3.4.3
  • C++调用mask rcnn进行实时检测--opencv4.0
  • tensorflow线下训练SSD深度学习物体检测模型,C++线上调用模型进行识别定位(干货满满)
  • python训练Faster RCNNC++调用训练好的模型进行物体检测-基于opencv3.4.3(超详细)
  • mask rcnn数据转换为tfrecord数据
  • opencv3.4.2调用训练好的Openpose模型
  • python训练mask rcnn模型C++调用训练好的模型--基于opencv4.0(干货满满)
  • leetcode之移除链表的元素
  • leetcode之奇偶链表
  • leetcode之回文链表
  • ubuntu16.04下安装配置caffe2和detectron(亲测有效,非常简单)
  • leetcode之字符串中的第一个唯一字符
  • 哈希表中处理冲突的方法
  • SENet算法解析
  • SNIP物体检测算法理解
  • yolov3聚类自己数据的anchor box
  • Ubuntu下安装qt57creator-plugin-ros,在QT中进行ROS开发(亲测有效)
  • ROS下面调用自定义的头文件和.cpp/.so文件(亲测有效)
  • C++调用编译好的darknet来进行物体监测
  • hard-negative mining详细介绍
  • yolov3中如何进行聚类得到anchor box的
  • ubuntu16.04下编译安装Autoware