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在该范围内的点,可以得到完整的路灯柱体,但路灯头是需要后续处理的;
来源:CSDN
作者:Plutovv
链接:https://blog.csdn.net/qq_38350792/article/details/104496244