PCL官方給的filter示例實際上是一個空間切割,也就是隻保留設定範圍內的點,超出邊界的就過濾掉了。直接看例子:
pcl::PassThrough<pcl::PointXYZ> pass; pass.setInputCloud (cloud); pass.setFilterFieldName ("z"); pass.setFilterLimits (0.0, 1.0); //pass.setFilterLimitsNegative (true); pass.filter (*cloud_filtered);這裏cloud就是需要過濾的點雲,cloud_filtered就是過濾後的點雲,使用setFilterFieldName來設置過濾Z軸,用setFilterLimits來設置範圍,也就是隻保留z座標在0-1之間的點,其他的全部不要了。
另外一種濾波是圓形濾波,這個是遍歷圖像中每一個點,如果他周圍給定半徑內點的數量小於自己設置的一個閾值,那麼這一個點將被忽略。
pcl::RadiusOutlierRemoval<pcl::PointXYZ> pass;
pass.setInputCloud (cloud);
pass.setRadiusSearch (0.2);
pass.setMinNeighborsInRadius (20);
pass.filter (*cloud_filtered);
依然是創建一個PassThrough的濾波對象,然後對cloud點雲進行濾波,設置半徑爲0.2,設置周邊點的閾值爲20,如果每個點0.2範圍內的點的數量少於20則忽略這個點。
注意,註釋掉的那一行
pass.setFilterLimitsNegative (true);
代表了是否顯示被過濾掉的點,如果設置爲true則將被過濾的以紅色表示,沒過濾的用綠色表示。默認是false.