机载Lidar数据滤波方法研究

01前言
机载LiDAR的主要应用之一是快速获取测区的高精度DEM。而激光扫描过程是盲目的,即激光脉冲既可能打在地面上,又可能打在建筑物、植被、车辆等地物上。因此,获取的LiDAR点云数据中既有地面点,又有地物点。而为了获得测区的DEM必须把点云数据中的地面点和非地面点分离开,得到用于生成DEM的地面激光脚点。从LiDAR点云数据中分离出地形表面激光脚点数据子集的过程,称为滤波(张小红,2007),如图5-1所示。目前,机载LiDAR数据的滤波是机载LiDAR数据后处理的关键问题之一。本文将围绕机载LiDAR数据的滤波做进一步的研究。
在这里插入图片描述
图5-1 机载激光雷达滤波处理示意图

02滤波基本原理
机载LiDAR数据滤波的基本原理是,通常认为邻近激光脚点间的高程突变(即局部不连续),不是由于地形自然的陡然起伏所造成的,而更可能是由于高于地表的地物突然出现形成的。我们可以通过大量的观察证实该原理。不难发现,在一局部区域内,地面激光脚点和邻近的地物激光脚点(如建筑物、立交桥、电线杆、树木等)之间的高程有明显的差异,在两者的交界处,高程变化尤为显著。当然,这种高程变化与距离有着密切的关系。一般认为,距离越近,高差变化越大,则相对较高点是地面点的可能性越小;而随着距离的增加,则不能简单的通过高差来判断地面点或非地面点。这主要是考虑到大范围内较大的高差可能是地形起伏产生的高程变化。

03滤波方法综述
1、不规则三角网渐进加密的滤波方法
Axelsson(2000)提出了一种基于不规则三角网(TIN)的滤波算法(见图5-2)。该算法首先将测区分块,选取测区内每一块的最低点作为种子点构建初始三角网(最终的结果对种子点的选取并不敏感)。然后,依据一定的准则判别其他的激光脚点(见图5-2(b)),并将符合判别准则的点加密到初始三角网中。该判别准则为:待定点到最近三角面片的距离以及待定点与最近三角形顶点的连线与该三角面片的夹角均小于所设定的阈值。对于不符合条件的点,采用了镜像技术做进一步判断。即对于上述不符合条件的点,通过判别该点的镜像点是否符合要求。如果镜像点符合要求,则仍把该点当做地面点;否则,作为非地面点。这样,部分解决了陡砍、山崖等地面点的判别问题。该滤波过程通过三角形迭代加密进行,当没有新的点加入三角网时运算结束。该算法已在商业软件TerraSolid中实现,获得了广泛的使用和推广。

在这里插入图片描述
(a)初始网格的划分和不规则三角形构建
在这里插入图片描述
(b)角度和距离的判别
在这里插入图片描述
(c)镜像点技术

图5-2 不规则三角网渐进加密的示意图

2、基于最小二乘的稳健线性内插的滤波方法
利用最小二乘插值法,从机载LiDAR数据中提取DTM的研究最早由奥地利维也纳大学的Kraus和Pfeifer(1998)提出,也是目前应用比较广泛和成功的一个算法。该方法首先要确定一个粗糙的DTM,然后计算出待分类的每个激光脚点的权值,权值的大小通过该点与上一步DTM面之间距离获得;接着利用权值和点云高程重新内插生成DTM,并重复以上步骤,通过不断地迭代计算直到得到最后结果。商业软件SCOP++集成了该算法(Kraus 和 Rieger,1999)。该算法最初是设计用来剔除森林地区的植被点,生成DTM,随后Pfeifer又将这种方法推广到城市地区的滤波应用中(Kraus 和 Pfeifer,2001)。

3、基于区域分割的滤波方法
区域分割是数字图像处理的常用技术之一,是指将图像中具有特殊含义的不同区域区分开来,这些区域是互相不重叠的,每一个区域都满足某种一致性的特征。该方法通常需要迭代处理,首先选择像素种子点,然后根据局部区域像素间的“同质性”判断合并同质像素点,最后利用迭代处理不断增长区域,完成分割。基于LiDAR点云的分割处理与传统的图像分割处理方法存在一定的差异,前者是针对空间分布不规则的离散点进行处理,后者则是处理规则分布的像素;此外,二者在分割条件的选择上也有所区别(徐景中,2003)。

在这里插入图片描述
图5-5 机载LiDAR的多扫描线分割方法(Sithole,2005)

4、基于数学形态学的滤波方法

数学形态学方法是图像处理与分析中常用的方法,其应用于机载LiDAR数据滤波处理的时间并不长,较早的应用是德国斯图加特大学的Lindenberger在1993年采用水平结构元素对机载激光雷达数据进行开运算,实现对激光点云的滤波,并利用自回归算法改善滤波的结果。这种滤波算法的出发点是:建筑物、树木和车辆等地物的高程都高于其周围的地面点高程。其基本处理过程为:首先对所有激光数据进行预处理,提取窗口数据,搜寻窗口内的最低点,接着进行开运算和闭运算处理。这种算法的难点在于窗口尺寸的选取,窗口的大小参数决定了地形细节的保留程度。窗口越大,地形越平滑,反之,则会保留较多地形细节和地物点。

[参考文献] 王丽英. 机载LiDAR数据误差处理理论与方法[M]. 测绘出版社, 2013

  • 0
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
以下是一个简单的 c++ 代码示例,用于执行渐进式不规则三角网滤波: ```c++ #include <iostream> #include <vector> #include <cmath> using namespace std; vector<vector<double>> progressive_irregular_triangle_filter(vector<vector<double>> input, double threshold) { int rows = input.size(); int cols = input[0].size(); vector<vector<double>> output(rows, vector<double>(cols)); for (int i = 1; i < rows - 1; i++) { for (int j = 1; j < cols - 1; j++) { double sum = 0.0; double count = 0.0; for (int x = -1; x <= 1; x++) { for (int y = -1; y <= 1; y++) { if (abs(input[i][j] - input[i + x][j + y]) >= threshold) { sum += input[i + x][j + y]; count++; } } } if (count != 0) { output[i][j] = sum / count; } else { output[i][j] = input[i][j]; } } } return output; } int main() { int rows = 5; int cols = 5; double threshold = 0.5; vector<vector<double>> input(rows, vector<double>(cols)); // 填充输入数据 input[0] = {1.0, 2.0, 3.0, 4.0, 5.0}; input[1] = {6.0, 7.0, 8.0, 9.0, 10.0}; input[2] = {11.0, 12.0, 13.0, 14.0, 15.0}; input[3] = {16.0, 17.0, 18.0, 19.0, 20.0}; input[4] = {21.0, 22.0, 23.0, 24.0, 25.0}; vector<vector<double>> output = progressive_irregular_triangle_filter(input, threshold); // 输出结果 for (int i = 0; i < rows; i++) { for (int j = 0; j < cols; j++) { cout << output[i][j] << " "; } cout << endl; } return 0; } ``` 此代码使用渐进式不规则三角网滤波算法,对输入数据进行滤波处理,并返回输出结果。在输入数据的每个元素与其周围元素的差值超过阈值时,该元素将被替换为其周围元素的平均值。如果周围元素的数量为零,则该元素不进行滤波处理。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值