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

PanoSAM:使用 Meta Segment Anything 模型对全景图像中的点云数据进行无监督分割

背景

全景图像可以通过地面激光扫描 (TLS) 获取的点云高效生成。由于 TLS 从固定静止位置捕获数据,因此与传统的俯视图相比,相应的全景投影能够提供更直观的场景分割方法。

假设全景图像是使用点云的首次离散回波构建的,那么对图像的分割实际上相当于对点云的首次回波进行分割。从全景图像中获得分割蒙版后,可以将其重新投影到原始的3D点云上。此过程允许基于机器学习对图像格式的点云进行分割,从而提供一种实用高效的初步分类方法。

https://github.com/ottoykh/PanoSAM?source=post_page-----443ee1085f30---------------------------------------

演示 1

演示 2

使用我们的代码

下载requirements.txt文件和Pano.py里面需要的包,在 python cmd 中运行下面一行:

python Pano.py -input_e57 “e57_file.e57”

相关函数

e57Pano

  1. 加载 E57 点云文件
  2. 读取扫描数据并提取传感器位置
  3. 从点中提取 x、y、z
    从点计算角度 (θ 和 ϕ)
    θ=arctan2(y/x)(方位角)
    ϕ=arccos(z/距离)
  4. 将角度归一化为像素坐标
    Pixel X = Pixel_x=(θ+π/ 2π)⋅width
    Pixel Y = Pixel_y=(phi/π)⋅height
  5. 从 3D 点云数据集生成 2D 全景图像
  6. 提取 XYZ 坐标并计算相对坐标
    relative_xyz=xyz−sensor_pos
  7. 计算距离
  8. 颜色的标准偏差缩放
    颜色=(颜色-平均值)/ std + 1e-5
  9. 使用球面投影将 3D 点投影到 2D 像素坐标
  10. 使用深度缓冲区将点绘制到全景图像上

全景SAM:

  1. 使用 transforms 管道加载 SAM(任意分段模型)
  2. 打开图像并将其转换为 RGB 格式
  3. 调整图像大小(尽管它保持其原始大小)
  4. 使用生成器获取图像的蒙版
  5. 遍历生成的掩码并在掩码数组中标记它们
  6. 为每个标记的段创建一个具有随机颜色的叠加层
  7. 使用 tifffile 将标记的掩膜保存为 TIFF 文件
  8. 创建一个包含两个子图的图形:原始图像和分段叠加图

Pano2e57:

  1. 从 TIFF 文件加载分割蒙版
  2. 从 E57 文件加载点云数据并检索传感器的位置
  3. 根据传感器位置将 3D 点投影到 2D 掩模上
  4. 计算点与传感器的相对位置
  5. 计算每个点的半径 r 并过滤点
  6. 计算球坐标
    θ=arctan2(y/x)(方位角)
    ϕ=arccos(z/r)
  7. 将球面坐标标准化并转换为像素坐标
  8. 使用像素坐标从掩码中检索相应的标签
  9. 将投影点及其标签保存到 PLY 文件

限制

这种方法的一个关键限制在于,全景图像仅捕捉扫描仪视角下的第一个可见表面。因此,任何位于遮挡物后方或场景深处的特征都可能在分割蒙版中被错误呈现或完全缺失。因此,这些背面的特征可能会被错误分类或未经处理。尽管存在此限制,该方法仍然是 TLS 数据集预分类的有力工具,尤其是在单次扫描(每次设置)工作流程中。

http://www.xdnf.cn/news/15036.html

相关文章:

  • 深入理解 classnames:React 动态类名管理的最佳实践
  • 设计模式之迭代器模式
  • 基于改进多目标优化算法的众包物流配送调度研究
  • 【机器学习笔记Ⅰ】2 线性回归模型
  • 百度文心大模型 4.5 开源深度测评:技术架构、部署实战与生态协同全解析
  • 编程语言艺术:C语言中的属性attribute笔记总结
  • bro code笔记 inheritance
  • 从前端转nest.js开发的学习路线
  • 【Guava】1.0.设计虚拟机的方向
  • java学习——guava并发编程练习
  • Redis ①⑤-集群
  • Vue+Openlayers加载OSM、加载天地图
  • 周任务自动化升级:N8N与多维表格无缝联动全解析
  • 2025年03月 C/C++(四级)真题解析#中国电子学会#全国青少年软件编程等级考试
  • 【架构艺术】IC(个人贡献者)视角下产品研发规划的实战Tips
  • 一次内存“卡顿”全流程实战分析:从制造问题到优化解决
  • java中,stream的filter和list的removeIf筛选速度比较
  • JMM--数据原子操作
  • SpringAI与智能体入门
  • 解决kali Linux在VMware中的全局缩放问题
  • 量化可复用的UI评审标准(试验稿)
  • Python PyJWT详解:从入门到实战
  • 3dmax烘焙插件3dmax法线贴图烘焙教程glb和gltf元宇宙灯光效果图烘焙烘焙光影贴图支持VR渲染器
  • 针对工业触摸屏维修的系统指南和资源获取途径
  • NumPy-核心函数np.matmul()深入解析
  • CppCon 2018 学习:Surprises In Object Lifetime
  • 设计模式之访问者模式
  • 使用Langchain访问个人数据
  • SpringBoot系列—入门
  • PostgreSQL表操作