前言:對pcl點雲處理方法進行整理,方便後續查找使用
一、點雲庫的濾波算法
直通濾波器:對xy軸進行限定,粗暴去噪
pcl::PassThrough<pcl::PointXYZ> pass;
pass.setInputCloud (cloud);
pass.setFilterFieldName ("z");
pass.setFilterLimits (0.0, 1.0);
//pass.setFilterLimitsNegative (true);
pass.filter (*cloud_filtered);
統計濾波器:考慮到噪聲常是離羣點。計算每個點到其最近的k個點平均距離。則點雲中所有點的距離應構成高斯分佈。給定均值與方差,可剔除分佈之外的點
pcl::StatisticalOutlierRemoval<pcl::PointXYZ> sor;
sor.setInputCloud (cloud);
sor.setMeanK (50);
sor.setStddevMulThresh (1.0);
sor.filter (*cloud_filtered);
體素柵格濾波器:把點雲分成若干立體空間,以空間中心的點代表體素的所有點。不破壞點雲整體結構。
pcl::VoxelGrid<pcl::PCLPointCloud2> sor;
sor.setInputCloud (cloud);
sor.setLeafSize (0.01f, 0.01f, 0.01f);
sor.filter (*cloud_filtered);
半徑濾波器:以某點爲中心畫一個圓計算落在該圓中點的數量,當數量大於給定值時,則保留該點,數量小於給定值則剔除該點。此算法運行速度快,依序迭代留下的點一定是最密集的,但是圓的半徑和圓內點的數目都需要人工指定。
pcl::RadiusOutlierRemoval<pcl::PointXYZ> outrem;
outrem.setInputCloud(cloud);
outrem.setRadiusSearch(0.8);
outrem.setMinNeighborsInRadius (2);
// apply filter
outrem.filter (*cloud_filtered);