1、直通滤波器可以对指定的维度进行一个简单的滤波,即去掉用户指定范围内部(或外部)的点。
2、代码
using PclSharp;
using PclSharp.IO;
using System;
namespace PclSharpTest
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine($"C#--PclSharp算法库测试:");
//读取点云文件
var src_cloud = new PointCloudOfXYZ();
using (var reader = new PCDReader())
reader.Read(AppDomain.CurrentDomain.BaseDirectory + $"//pcd//table.pcd", src_cloud);
// 创建滤波器,对每个点分析的临近点的个数设置为50 ,并将标准差的倍数设置为1 这意味着如果一
//个点的距离超出了平均距离一个标准差以上,则该点被标记为离群点,并将它移除,存储起来
PointCloudOfXYZ cloudFiltered = new PointCloudOfXYZ();//滤波后的点云
using (var pass = new PclSharp.Filters.PassThroughOfXYZ())
{
pass.SetInputCloud(src_cloud);
pass.FilterFieldName = "x";//设置过滤时所需要的点云某个方向上
pass.FilterLimits = (-0.02f, 0.15f);//设置在过滤字段上的范围
//pass.Negative=true;//设置保留范围外的点
pass.filter(cloudFiltered);
}
using (var visualizer = new PclSharp.Vis.Visualizer(" visual window"))
{
//创建两个观察视点
int v1 = 0;
int v2 = 1;
visualizer.CreateViewPort(0.0, 0.0, 0.5, 1.0, v1);
visualizer.CreateViewPort(0.5, 0.0, 1.0, 1.0, v2);
//设置背景色
visualizer.SetBackgroundColor_ViewPort(0f,0f,0f,v1);
visualizer.SetBackgroundColor_ViewPort(0.05f, 0f, 0f,v2);
visualizer.AddPointCloud(cloudFiltered, "v1", v1);
visualizer.AddPointCloud(src_cloud, "v2", v2);
visualizer.SetPointCloudColor(1, 1, 0.5, "v1");//点云附色
visualizer.SetPointCloudColor(1, 0.5, 1, "v2");//点云附色
while (!visualizer.WasStopped)
visualizer.SpinOnce(100);
}
Console.ReadKey();
}
}
}
3、滤波前后点云