半径滤波:判断点云在一定范围内是否有足够多相邻点。通俗讲,点云在半径R范围内领域点个数大于
M个,则保留,负责删除。
#include <iostream>
#include <pcl/io/pcd_io.h>
#include <pcl/point_types.h>
#include <pcl/filters/radius_outlier_removal.h>
#include <pcl/io/ply_io.h>
int main(int argc, char** argv)
{
// 加载点云数据
pcl::PointCloud<pcl::PointXYZ>::Ptr cloud(new pcl::PointCloud<pcl::PointXYZ>);
pcl::io::loadPLYFile<pcl::PointXYZ>("v2.ply", *cloud);
// 创建半径滤波器对象
pcl::RadiusOutlierRemoval<pcl::PointXYZ> sor;
// 设置输入点云
sor.setInputCloud(cloud);
// 设置半径范围内的邻居点数阈值
sor.setRadiusSearch(0.1); // 设置半径范围为0.1m
sor.setMinNeighborsInRadius(10); // 设置邻居点数阈值为10
// 执行半径滤波
pcl::PointCloud<pcl::PointXYZ>::Ptr filtered_cloud(new pcl::PointCloud<pcl::PointXYZ>);
sor.filter(*filtered_cloud);
// 输出滤波后的点云大小
pcl::io::savePLYFile("v3.ply", *filtered_cloud); //保存文件
return 0;
}