1.漸進形態學濾波
#include <pcl/segmentation/progressive_morphological_filter.h>
重要參數:
// 創建形態學濾波器對象
pcl::ProgressiveMorphologicalFilter<pcl::PointXYZ> pmf;
pmf.setInputCloud(cloud);
// 設置過濾點最大的窗口尺寸
pmf.setMaxWindowSize(20);
// 設置計算高度閾值的斜率值
pmf.setSlope(1.0f);
// 設置初始高度參數被認爲是地面點
pmf.setInitialDistance(0.5f);
// 設置被認爲是地面點的最大高度
pmf.setMaxDistance(3.0f);
pmf.extract(ground->indices);
2.體素濾波
#include <pcl/filters/voxel_grid.h> //體素濾波相關
體素柵格濾波
pcl::PointCloud<pcl::PointXYZ>::Ptr cloud_filter(new pcl::PointCloud<pcl::PointXYZ>);
pcl::VoxelGrid<pcl::PointXYZ> sor;
sor.setInputCloud(cloud);
sor.setLeafSize(0.3f, 0.3f, 0.3f);//體素大小設置爲30*30*30cm
sor.filter(*cloud_filter);
3.提取點雲中的柱狀物體
尋找最大最小的xy 根據網格大小 劃分 投影 根據落在同一網格內的點雲數量判斷是否爲潛在柱狀物
計算z的最大最小高度 周圍八個柵格 使用ransac算法 提取圓柱 但只能提取出兩根 而且數據不連續 代碼報錯vector超限
4.歐式聚類
效率太低 不採取
5.目前的路燈提取方法:
漸進形態學濾波濾除地面;
目前分段處理,取出一部分車載點雲,提取出非地面點object;
體素濾波,對非地面點作一次抽稀;
根據道路中心線和道路寬度,對非地面點作一次平面方向的直通濾波,濾除建築物,只留下間斷的行道樹、路燈等交通設施;
沿Z方向將非地面點進行切分,我選擇三等分,這裏有最大的問題,實驗數據路燈高於樹木,因此在高處,路燈最爲明晰,但是若路燈完全夾雜在樹木中,則可能無法正確提取出路燈,選擇高處的另一個原因是行道樹在路燈高度主樹幹基本已經分叉,此時提取出的圓柱體大概率爲路燈設施。若在切分的低處,提取出的圓柱既有路燈又有樹幹,效果不佳;
自動循環提取圓柱體,但是在提取出兩個後,又出現vector超限問題;改用非循環提取,可以繼續提取,不報錯,理論上提取出4個路燈,實際提取出三個柱體,應該是參數的原因,導致第四個柱體未能提取,愁啊;
提取出各圓柱xy的範圍,再去原始數據中提取出所有xy在該範圍內的點,可以得到完整的路燈柱體,但路燈頭是需要後續處理的;