【PCL】Segmentation 模块—— 渐进式形态学滤波(Progressive Morphological Filtering)

Progressive Morphological Filtering(渐进式形态学滤波) 是一种用于从机载LiDAR(激光雷达)数据中分离地面点与非地面点的滤波算法。该算法通过逐步增大滤波窗口尺寸,并结合高程差阈值,能够有效去除建筑物、车辆、植被等非地面点,同时保留地形特征,生成高精度的数字地形模型(DTM)或数字高程模型(DEM)。


1. 算法背景

机载LiDAR技术能够快速、低成本地获取大范围的高精度地形数据。然而,LiDAR点云中不仅包含地面点,还包含建筑物、车辆、植被等非地面点。为了生成高精度的DTM/DEM,需要将这些非地面点从点云中分离出来。Progressive Morphological Filtering 正是为解决这一问题而设计的。


2. 核心原理

2.1 形态学滤波基础

形态学滤波基于数学形态学中的**膨胀(Dilation)腐蚀(Erosion)**操作:

  • 膨胀:在窗口内选择最大高程值,用于扩大地物特征。
  • 腐蚀:在窗口内选择最小高程值,用于缩小地物特征。
  • 开操作:先腐蚀后膨胀,用于去除细小地物(如树木)并保留大型地物(如建筑物)。
2.2 渐进式滤波

传统形态学滤波使用固定窗口尺寸,难以同时处理不同尺寸的地物(如小汽车和大型建筑物)。渐进式形态学滤波通过逐步增大窗口尺寸来解决这一问题:

  1. 初始窗口:使用较小的窗口去除细小地物(如树木、汽车)。
  2. 逐步增大窗口:随着窗口尺寸增大,逐步去除更大的地物(如建筑物)。
  3. 高程差阈值:引入高程差阈值,区分地面点与非地面点。地面点的高程变化是渐变的,而非地面点(如建筑物屋顶)的高程变化是突变的。

3. 算法流程

  1. 点云划分:将不规则点云划分为规则网格,每个网格中选择高程最低点作为初始地面点。
  2. 迭代滤波
    • 使用初始窗口尺寸进行形态学开操作,去除细小地物。
    • 逐步增大窗口尺寸,重复开操作,去除更大尺寸的地物。
    • 根据高程差阈值判断地面点与非地面点。
  3. 参数调整
    • 窗口尺寸:可通过线性或指数增长方式调整。
    • 高程差阈值:根据地形坡度和地物高度动态调整。
  4. 输出结果:生成地面点云和非地面点云,用于后续的DTM/DEM生成。

4. 参数设置

  • 窗口尺寸:决定滤波的粒度,过小会保留过多非地面点,过大会丢失地形细节。
  • 高程差阈值:用于区分地面点与非地面点,通常根据地形坡度和地物高度设置。
  • 坡度:影响高程差阈值的计算,坡度越大,阈值越高。

5. 应用与优化

  • 应用场景:广泛应用于地形建模、洪水模拟、滑坡预测等领域。
  • 优化方法
    • 多线程加速:如PCL库中的ApproximateProgressiveMorphologicalFilter,通过多线程提高计算效率。
    • 参数调优:根据具体场景调整窗口尺寸和高程差阈值,以获得最佳滤波效果。

6. 代码示例

以下是PCL库中Progressive Morphological Filtering的简单实现,代码读取点云数据,应用渐进式形态学滤波,并输出地面点云。

  • 读取PCD文件:使用 pcl::PCDReader 读取点云数据。
  • 应用渐进形态滤波器:使用 pcl::ProgressiveMorphologicalFilter 提取地面点。
  • 提取地面点并保存:通过 pcl::ExtractIndices 从原始点云中提取地面点并保存到一个新的 PCD 文件。
  • 提取非地面点并保存:通过设置 setNegative(true),提取非地面点并保存到另一个新的 PCD 文件。

创建bare_earth.cpp

#include <iostream>
#include <pcl/io/pcd_io.h>  // 用于读取和写入PCD文件
#include <pcl/point_types.h> // 用于点云数据类型
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值