PCL入門點雲的濾波

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.

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章