当前位置: 首页 > news >正文

提取边界线的思路与原理

该代码通过多步骤处理从原始点云中提取边界线
核心思路是:降噪→投影简化→边界提取→聚类优化→三维还原。以下是分步骤原理详解:


效果图

在这里插入图片描述

1. 半径滤波降噪 (radiusFilters)

pcl::RadiusOutlierRemoval<PointT> ror;
  • 原理:遍历每个点,若半径(0.5m)球体内的邻居点少于20个,判定为离群点删除
  • 目的:去除悬浮噪点,保留主体结构
  • 输出cloudRadius.pcd(降噪后点云)

2. 投影平面化 (proCloud)

pro.setModelType(pcl::SACMODEL_PLANE); // 平面投影模型
  • 原理:将所有点垂直投影到XY平面(Z=0)
  • 目的:将3D问题转化为2D处理,简化边界提取
  • 关键操作:点坐标变为(x,y,0)

3. Alpha-Shape边界提取 (ashapeBoundary)

pcl::ConcaveHull<PointT> chull;
  • 首次提取(α=0.2):
    • 小α值生成紧贴点云的凹边界
    • 捕获细节特征但可能包含冗余
  • 二次提取(α=1.9):
    • 大α值生成平滑凸边界
    • 消除细小突起,保留主体轮廓
  • 原理:通过α半径圆滚过点云外沿生成边界

4. 欧式聚类优化 (clusterFilters)

ec.setClusterTolerance(0.6); // 聚类距离阈值
ec.setMinClusterSize(100);   // 最小聚类点数
  • 原理:基于距离(0.6m)将邻近点归为同一聚类
  • 筛选逻辑
    if (cloudOut->size() > cloudIn->size() * 0.5) break;
    
    • 仅保留点数>原边界50%的最大聚类
  • 目的:剔除离散小聚类,保留主要边界

5. 三维边界还原 (recallPointCloud)

// 三维点云投影到XY平面
cylindCloud->points[i].z = 0.0; // KD树半径搜索匹配边界点
kdtree.radiusSearch(iter, 0.001, pointIdxRadiusSearch...);
  • 核心步骤
    1. 将原始3D点云投影为2D(Z=0)
    2. 用KD树建立2D索引
    3. 对每个2D边界点搜索半径0.001m内的原始3D点
  • 目的:将2D边界映射回3D空间

6. 体素滤波去重 (removePoint)

vg.setLeafSize(0.001f, 0.001f, 0.001f); // 1mm体素尺寸
  • 原理:将空间划分为1mm³小立方体
  • 操作:每个体素内仅保留一个点(中心点)
  • 作用:消除映射导致的重复点

处理流程全景图

首次α=0.2
α=1.9
原始点云
半径滤波降噪
降噪点云
投影到XY平面
2D平面点云
Alpha-Shape边界提取
细节边界
欧式聚类优化
主边界聚类
二次Alpha-Shape
平滑2D边界
KD树三维还原
3D边界点云
体素滤波去重
最终边界线

关键设计思想

  1. 维度转换:3D→2D处理→3D还原
    • 利用2D算法高效性
    • 保留3D空间信息
  2. 多级边界优化
    • 首次紧边界捕获细节
    • 聚类筛选主结构
    • 二次松边界平滑轮廓
  3. 抗噪机制
    • 前端半径滤波去离散噪点
    • 后端体素滤波除重复点

参数选择意义

参数作用
半径滤波距离0.5m覆盖典型结构尺寸
最小邻居数20过滤孤立点
聚类距离阈值0.6m大于点间距避免过度分割
首次Alpha值0.2捕获厘米级细节特征
二次Alpha值1.9生成米级平滑轮廓
体素尺寸1mm消除重复同时保留亚毫米精度

该方案通过多阶段优化,在保留边界细节的同时确保鲁棒性,特别适用于建筑、地形等结构化场景的边界提取。

http://www.dtcms.com/a/296353.html

相关文章:

  • Linux---systemd自启动
  • 论文复现-windows电脑在pycharm中运行.sh文件
  • 嵌入式——C语言:函数②
  • webGis框架
  • 元计算推动产业元宇宙改变世界
  • 将Scrapy项目容器化:Docker镜像构建的工程实践
  • Web前端开发:JavaScript reduce() 方法
  • 借助AI学习开源代码git0.7之九diff-files
  • MCU中的系统总线
  • Android 与 Windows 文件路径的设计差异
  • 机器学习概述与 KNN 算法详解
  • ESP32- 项目应用1 智能手表 之更新天气#4
  • FANUC 机器人控制末端位置的示例程序
  • Windows 主机侧日志排查
  • 【YOLOv8改进 - 特征融合】FCM:特征互补映射模块 ,通过融合丰富语义信息与精确空间位置信息,增强深度网络中小目标特征匹配能力
  • 二、计算机网络技术——第5章:传输层
  • AWS S3 生命周期管理最佳实践:IoT Core 日志的智能存储优化
  • 康养休闲旅游服务虚拟仿真实训室:赋能人才培养的创新路径
  • Java:跨越时代的编程语言,持续引领技术潮流
  • [Office]数学公式插件
  • cri-docker部署高版本k8s
  • Windows 11 24H2 中文版安装教程(2025年4月更新版/官方ISO/详细步骤)
  • 实验-OSPF
  • 完成多项问题修复,MaxKB开源企业级智能体平台v1.10.9 LTS版本发布
  • 华为OpenStack架构学习9篇 连载—— 01 OpenStack架构介绍【附全文阅读】
  • 学习游戏制作记录(技能系统)7.24
  • Selenium基础教程
  • day46.通道注意力
  • Vue2——5
  • set集合(HashSet、LinkedHashSet、TreeSet)