点云地面点识别-matlab示列与免费资源共享-2021-8-13-

从点云数据中识别地面信息,提取地面点的过程,称为地面点滤波,是生成数字高程模型(Digital elevation model,DEM)的重要前提。

现有的地面点滤波算法有很多,大部分滤波算法在场景相对简单的区域有较好的效果,但是在一些较为复杂的区域,效果就会变差,现有的算法还缺少较强的普适性。

本文在这里以matlab为例,寻找已写好的滤波算法,实现地面点滤波。

布料滤波(CSF)

布料滤波已广受人们知晓,这里不在做过多的介绍,详细其他博主。

其资源可在以下网址免费下载:github

https://github.com/jianboqi/CSF         

首先加载示例数据,以做显示:pcshow函数

clear
% 读取示列数据
a = pcread('sample.ply');
% 提取xyz值
a = a.Location;
% 显示点云
pcshow(a)

 然后使用CSF滤波实现地面点识别

% 使用CSF滤波函数滤波
[g,ng] = csf_filtering(a,1,true,0.5,0.5,500,0.65);
% 制作地面点标记
col = zeros(length(a),1);
% 为地面点标记为1
col(g,:) =1;
% 显示地面点和非地面点
pcshow(a(:,1:3),col)

 下图中黄色的高亮点即为地面点

简单形态学滤波(SMRF)

简单形态学滤波,其具体原理不再做介绍,方法及资源如下方链接免费下载:github

https://github.com/thomaspingel/smrf-matlab

加载示例数据并设置参数

clear
a = pcread('sample.ply');
pcshow(a)
a = a.Location;

% 参数设置
c = 3;
s = .2;
w = 16;
et = .45;
es = 2.0;
% gest中标识了地面点
[ZI R gest] = smrf(a(:,1),a(:,2),a(:,3),'c',c,'s',s,'w',w,'et',et,'es',es);
% o是地面点,1是非地面点
idx = gest==0;
col = zeros(length(a),1);
col(idx,:) = 1;
pcshow(a,col);

 经验模态分解(EMD)

经验模态分解滤波,其具体原理不再做介绍,方法及资源如下方链接免费下载:github

https://github.com/himmetozcan/EMD_Lidar

clear
a = pcread('sample.ply');
pcshow(a)
a = a.Location;

par.cellSize = 1; 
par.outlierThr = 5; 

par.iterationNum = 10; 
par.maxW = 20/par.cellSize;
par.maxThr = 4; 
par.te = 0.6;

par.slopeThr = true;

% Pobjects储存了地面点标记
[Gdsm, Gdtm, Pdtm, Pobjects] = filterlidar_emd(a(:,1:3), par);
imshow( Gdtm)
idx = Pobjects==0;
classground = zeros(length(a(:,1)),1);
%地面点标记为1
classground(idx,:) = 1;
pcshow(a(:,1:3),classground)

其他滤波方法

1 在免费软件中,点云魔方PCM中可以实现形态学滤波、坡度滤波、移动曲面滤波、三角网滤波、CSF滤波

2 Lidar360可以实现改进的渐进三角网滤波

3 Globar mapper 可以实现形态学滤波

  • 2
    点赞
  • 44
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值