赞
踩
故事背景和目的:在进行机载LiDAR数据处理的时候,需要将激光雷达采集的点云数据进行分类,分离出地面点云以及地物点云。基于地面点云,再经过一定的处理,可生成DEM(数字高程模型),通过DEM能详细掌握区域内的地形地貌,是目前测绘领域广泛采用的方法。生成DEM的关键是有从原始点云中分类产生的地面点,分类结果对后面的处理至关重要。本文主要介绍基于改进的形态学滤波器方法,分离地面点和地物点的方法。该算法主要思想来自《A Progressive Morphological Filter for Removing Nonground Measurements From Airborne LIDAR Data》论文,这是2003年发表的一篇比较经典的论文,刊登在 IEEE TRANSACTIONS ON GEOSCIENCE AND REMOTE SENSING,这是遥感领域级别比较高的杂志,这篇论文的引用率也非常高,在很多后来的论文中都有提到。
算法的主要思想是基于数学形态学方法,采用开运算(先腐蚀,再膨胀)对点云进行处理,使用渐进的滤波窗口,逐渐对地面点和地物点进行分离。在PCL中,刚好有基于该方法的算法实现,具体请参见【pcl::ProgressiveMorphologicalFilter类】。但是 在PCL中的代码实现好像和原文中的算法不太一样,在此处主要给出该算法涉及到的关键步骤。
算法描述:利用改进的形态学滤波器对激光点云进行分类,分离出地面点和地物点。
输入:pointClouds 原始点云
cellSize 格网大小
Max windows size 最大滤波窗口
slope 坡度
输出:groundPoints 地面点云 ,objectPOints 地物点云
算法步骤:
(1)找到原始点云中的 min(x), min(y), max(x), max(y).
(2)计算 m=floor[(max(y)-min(y))/cellSize]+1
n=floor[(max(x)-min(x))/cellSize]+1
(3)构造二维数组A[m, n],将原始点云存入该数组。对任意一点p(x, y, z),M=(y-min(y))/cellSize,N=(x-min(x))/cellSize。如果有多个点落入数组同一个元素中,取其中高程值即z最小的点。
(4)对数组A进行插值,填补其中没有元素的位置,可采用最近邻插值方法。新建B[m, n],并将A赋值给B。新建flag[m][n]二维数组,并初始化为0。
(5)根据初始窗口b和最大窗口计算一系列滤波窗口。计算方法有以下两种:
Wk=2kb+1 或者
Wk=2×pow(b, k)+1
通常,第二种方法能得到更少的滤波窗口,从而进行更少的迭代。
(6)设dhT=dh0;
(7)for each windows size wk
for i=1 to m
Pi=A[i; ]//取A[m][n]中的第i行存入Pi中
Z=Pi
Zf=erosion(Z, wk);//腐蚀处理
Zf=delation(Zf,wk);//膨胀处理
Pi=Zf;
A[i; ]=Pi;
for j=1 to n
if(Z[j]=Zf[j]>dhT) then flag[i][j]=wk;
if(dhT<dhmax)
dhT=dhmax;
else dhT=s(wk-w(k-1))C+dh0;
(8)for i=1 to m
for j=1 to n
if(B[i][j].x>0 and B[i][j].y>0)
if(flag[i][j]=0)
B[i][j] is a ground point
else
B[i][j] is a nonground point
腐蚀和膨胀:
(1)腐蚀Erosion
Erosion(Z, wk):
for j=1 to n
Zf[j]=min(Z[l]), where j-wk/2<l<j+wk/2
return Zf
(2)膨胀Dilation
Dilation(Z, wk):
for j=1 to n
Zf[j]=max(Z[l]), where j-wk/2<l<j+wk/2
return Zf
原文链接:https://blog.csdn.net/huang1004943336/article/details/51868204
赞
踩
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。