對於在空間分布有一定空間特徵的點雲資料,比如使用線結構光掃瞄的方式採集點雲,沿z向分布較廣,但x,y向的分布處於有限範圍內。此時可使用直通濾波器,確定點雲在x或y方向上的範圍,可較快剪除離群點,達到第一步粗處理的目的。
直通濾波器,顧名思義,就是在點雲的指定維度上設定乙個閾值範圍,將這個維度上的資料分為在閾值範圍內與不在閾值範圍內,從而選擇過濾與否。
pcl::passthroughpass; //建立直通濾波器物件
pass.setinputcloud(pointcloud_raw); //設定輸入的點雲
pass.setfilterfieldname("z"); //設定過濾時所需要點雲型別為z欄位
pass.setfilterlimits(-0.1, 10); //設定在過濾欄位的範圍
pass.setfilterlimitsnegative(true); //設定保留還是過濾掉字段範圍內的點,設定為true表示過濾掉字段範圍內的點
pass.filter(*pointcloud_filter); //執行濾波
完整**:
#include #include #include int main (int argc, char** ar**)
std::cerr << "cloud before filtering: " << std::endl;
for (size_t i = 0; i < cloud->points.size (); ++i)
std::cerr << " " << cloud->points[i].x << " "
<< cloud->points[i].y << " "
<< cloud->points[i].z << std::endl;
// create the filtering object
pcl::passthroughpass;
pass.setinputcloud (cloud);
pass.setfilterfieldname ("z");
pass.setfilterlimits (0.0, 1.0);
(true);
pass.filter (*cloud_filtered);
std::cerr << "cloud after filtering: " << std::endl;
for (size_t i = 0; i < cloud_filtered->points.size (); ++i)
std::cerr << " " << cloud_filtered->points[i].x << " "
<< cloud_filtered->points[i].y << " "
<< cloud_filtered->points[i].z << std::endl;
return (0);
}
filtering a pointcloud using a passthrough filter PCL點雲濾波(直通濾波器與統計濾波器)
利用pcl中的直通濾波器和統計濾波器對原始點雲資料進行濾波處理。通過直通濾波器將z軸方向上範圍之外的點濾除 在背景與前景有一定距離的情況下,可以除掉背景 再利用統計濾波器去除離群點 雜訊點 濾波效果視資料和濾波引數而定。include include include include include ...
點雲濾波 直通濾波
最簡單的例子 按高度篩選點雲 pcl passthrough pointxyz pass pass.setinputcloud pointcloud raw pass.setfilterfieldname z 設定過濾時所需要點雲型別的z欄位 pass.setfilterlimits 0.1,10 ...
點雲濾波 投影濾波器
適用於已知幾何模型的點雲濾波,根據幾何模型的數學約束進行投影 例如乙個球體通過3d掃瞄裝置掃瞄之後,由於掃瞄精度的限制,引入了很多雜散點,這時已知實際球體的各個引數,可以用指定引數的球模型進行投影濾波,去除雜訊。點雲資料中的所有點 都用 向引數模型上投影之後的點代替。使用ax by cz d 0平面...