pcl滤波器
pcl一共是有十二个主要模块,详细了解可以查看官网。https://pcl.readthedocs.io/projects/tutorials/en/latest/#basic-usage
今天学习一下pcl的滤波器模块。
滤波器模块,官网一共是提供了6个例程,今天看第三个、第四个。
滤波器移出离群点
激光扫描通常会产生不同点密度的点云数据集。此外,测量误差会导致稀疏的异常值,从而影响结果。这使得局部点云特征(如表面法线或曲率变化)的估计变得复杂,导致错误的值,进而可能导致点云配准失败。其中一些不规则现象可以通过对每个点的邻域进行统计分析来解决,并去除那些不符合特定标准的点。
#include <iostream>
#include <pcl/io/pcd_io.h>
#include <pcl/point_types.h> //声明点类型
#include <pcl/filters/statistical_outlier_removal.h>
int
main (int argc, char** argv)
{
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> ("../table_scene_lms400.pcd", *cloud);
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)