如何学习、上手点云算法(一):点云基础

写在前面

  • 本文内容
    点云算法的学习基础,入门方法,相关领域,资源,开源库,算法等的介绍;
    以Open3D和PCL等为基础工具的点云处理代码讲解、实现;
    文中涉及的参考以链接形式给出,涉及文件资源如点云,已上传至网盘本博客资源链接,路径为:
    share_noel/csdn/how_to_learn_point_cloud/how_to_learn_point_cloud_1;
    本文尽力用最简单易懂的语言和方式来介绍相关内容,欢迎补充指正!
  • 平台/环境
    Windows10, Ubuntu1804, CMake, Open3D, PCL
  • 转载请注明出处:
    https://blog.csdn.net/qq_41102371/article/details/136288203

目录

  • 写在前面
  • 点云基础
    • 什么是点云
    • 点云获取方式、作用、相关领域
  • 点云算法有哪些有何用?
  • 资源
  • 常用开源库
  • 参考

点云基础

什么是点云

最好的认知方式莫过于实践,现在你可以下载一个开源且跨平台的点云可视化、处理软件CloudCompare(如果你以后的学习或工作经常和点云打交道,请一定记住这个软件,它将成为你的得力助手!),以及上述网盘中的点云或者你自己的点云,用CloudCompare打开下载的点云看看,建立一个感性认知,一切的故事,将从这里开始。
在这里插入图片描述
下面是比较理性的认知:
点云(PointCloud),是一种三维空间目标的表现形式,可用一群空间离散三维点 ( x , y , z ) (x, y, z) (x,y,z) 的集合来表达,如 { P } \{P\} {P} 表示一个有 N N N 个点的点云, p i , i ∈ { 0 , 1 , 2... n } p_i, i\in\{0,1,2...n\} pi,i{0,1,2...n} 是其中任意一点;另外,一个三维点除了空间位置信息 ( x , y , z ) (x, y, z) (x,y,z) ,还可包含颜色信息、强度信息、法向量等,以Open3D和PCL中点云的数据结构为例:

  • Open3D
    Open3D以点云为一个数据结构,点(points),颜色(colors),法向量(normals)都以3维的Vector表示(Eigen::vector3d)
    points: { ( x i , y i , z i ) , i ∈ 0 , 1 , 2... n } \{(x_i, y_i, z_i), i\in{0,1,2...n}\} {(xi,yi,zi),i0,1,2...n}
    colors: { ( r i , g i , b i ) , i ∈ 0 , 1 , 2... n } \{(r_i, g_i, b_i), i\in{0,1,2...n}\} {(ri,gi,bi),i0,1,2...n}
    normals { ( n x i , n y i , n z i ) , i ∈ 0 , 1 , 2... n } \{(nx_i, ny_i, nz_i), i\in{0,1,2...n}\} {(nxi,nyi,nzi),i0,1,2...n}
    具体可见
    open3d::geometry::PointCloud Class Reference
    https://github.com/isl-org/Open3D/blob/main/cpp/open3d/geometry/PointCloud.h#L463
    在这里插入图片描述
  • PCL
    PCL以点为基础的数据结构,通过模板的方式以点的类型决定点云的类型,如PointXYZ, PointXYZI, PointXYZRGB分别表示三维点、带强度的三维点、带RGB的三维点,详见
    https://pointclouds.org/documentation/namespacepcl.html
    pcl::PointXYZRGB Struct Reference
    pcl::PointCloud< PointT > Class Template Reference

点云获取方式、作用、相关领域

  • 通过传感器获取
    当前可以获取点云的常用传感器为:

    • 激光雷达
      1、大型激光雷达扫描仪(如Leica, RIEGL等),常用于需要大范围、高精度但不要求实时性的场景,比如测绘、矿山测量、灾害现场重建。如莱卡HDS8800可达上千米的扫描范围,但价格在百万以上;
      在这里插入图片描述

      以下是Leica HDS8800扫描得到室外建筑:
      在这里插入图片描述
      2、小型固态、半固态、机械式激光雷达(Livox, 禾赛, Velodyne等),常用于实时性要求较高的工业机器人、自动驾驶等领域,价格一般在千元-万元级;
      以下是Livox Avia非重复式扫描得到的点云:
      在这里插入图片描述

    • 深度相机
      如Intel Realsense, 奥比中光, 银牛等,常用于机器人、消费级产品,如体感游戏、服务机器人、扫地机、小场景三维扫描仪等;
      https://www.intelrealsense.com/lidar-camera-l515/

    • 结构光相机
      如ZIVID、Photoneo、图漾、跨维智能、Mech-Mind等,常用于精度要求极高的场景,如工业表面缺陷检测;
      示例点云见https://sketchfab.com/zivid/collections/manufacturing-point-clouds-18a888a297e34098ba4a7c478a049a70

    另可参考
    徕卡HDS8800
    leica HDS硬件产品系列
    RIEGL VZ-400i
    https://www.open3d.org/docs/release/tutorial/sensor/azure_kinect.html
    浅谈单目结构光原理
    深度相机—TOF、RGB双目、结构光原理及优势对比
    3D深度相机调研【史上最全,不服来战】

  • 通过影像三维重建获取
    运动恢复结构(Structure From Motion, SFM)可以从二维影像中恢复相机位姿和稀疏三维空间点云,再通过稠密重建得到带RGB的稠密点云,后续经过表面重建、纹理贴图可以生成带纹理的Mesh模型,其中比较基础和出名的开源方案(pipeline)是OpenMVG(SFM)+OpenMVS(稠密、表面、纹理),以及Colmap(完整pipeline);
    影像三维重建同时也是一个比较大的研究方向,通过该方式获得的点云具有稠密、带纹理等特点,但无法恢复尺度信息,需要人工或者借助GPS等信息加入算法来恢复;普通的开源方案(OpenMVG+OpenMVS, Colmap, OpenSfm, AliceVison)适用于小目标、室内、室外建筑场景三维重建,比较专业的采集+处理软件可用于城市级三维重建(摄影测量)
    有兴趣可以参考:
    Awesome 3D reconstruction list
    SFM综述
    openmvg2.0编译与使用
    openmvs编译与使用
    用cmake在win10配置colmap
    下图是SFM稀疏重建得到的点云,可参考openmvg2.0编译与使用来生成
    在这里插入图片描述

  • 通过模型采样、人工合成获取
    点云通过表面重建的方式可以生成表面模型如Mesh,反之可以从表面模型上采样得到点云
    在这里插入图片描述

  • 开源数据集
    Stanford Bunny,点云界的Lenna.jpg
    在这里插入图片描述
    武大WHU-TLS
    在这里插入图片描述
    Modelnet-40
    3DMatch数据集
    Kitti

点云算法有哪些有何用?

点云算法按整个来说应当属于计算机视觉中的3D视觉领域,主要的算法和应用为:

  • 传统的点云算法
    采样、滤波去噪、法向估计、特征提取、拟合、配准、(语义)分割、场景重建、表面(Mesh)重建等;
  • 深度学习点云算法
    近些年也有了许多点云深度学习的方法,如深度学习点云法向估计、点云语义分割、点云目标检测、点云配准、点云表面重建、点云逆向工程等,点云深度学习也是比较热门的研究方向;
  • 应用
    其中,采样、滤波去噪、法向估计、特征提取算法是最基础的算法,一般用于点云的预处理;拟合、分割、配准等算法属于更高级的应用,直接或间接地为用户提供点云处理结果,在这些算法基础上,进一步处理获得目标或场景的完整模型、语义信息、表面模型等;
    这些点云算法通常作为基础算法服务于三维重建、SLAM、自动驾驶领域,比如点云三维重建用于测绘、地质调查、文物重建、数字资产、数字城市等,SLAM中地图点云用于机器人定位、导航、避障等,自动驾驶中点云用于3D目标检测、高精地图制作的基础数据等,尤其是像点云配准、分割、3D目标检测等算法,在这些领域起到了至关重要的作用,因此点云算法可以认为是3D视觉的重要基础之一。

资源

一些点云相关的资源
点云配准系列文章
Open3D点云处理
https://github.com/topics/point-cloud
https://github.com/timzhang642/3D-Machine-Learning
https://github.com/topics/point-cloud
https://github.com/zhulf0804/3D-PointCloud

常用开源库

常用的点云算法开源库有:
Open3D, PCL, CGAL, CloudCompare等

参考

文中已列出

主要做激光/影像三维重建,配准、分割等常用点云算法,熟悉open3d、pcl等开源点云库,技术交流、咨询可私信

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/711163.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【JavaEE】_第一个SpringBoot项目

目录 1. 第一个SpringBoot项目 1.1 创建项目 1.2 加载依赖 1.3 运行启动类 1.4 创建一个简单类试运行 2. 关于SpringBoot项目的目录结构 3. 关于修改文件名 4. 关于启动日志 5. 关于访问出错 5.1 404 5.1.2 URL输入错误 5.1.2 注解错误 5.2 500 5.3 无法访问此网…

JDK动态代理如何获取动态生成的代理类的class文件

在使用JDK动态代理&#xff0c;即reflect包下的Proxy类的newProxyInstance方法时&#xff0c;会在运行时&#xff0c;根据传进来的接口类型动态生成class字节码文件。这个字节码文件是在内存中动态获取的&#xff0c;程序结束就没有了&#xff0c;如何动态获取呢。 System.set…

LeetCode 2265.统计值等于子树平均值的节点数

给你一棵二叉树的根节点 root &#xff0c;找出并返回满足要求的节点数&#xff0c;要求节点的值等于其 子树 中值的 平均值 。 注意&#xff1a; n 个元素的平均值可以由 n 个元素 求和 然后再除以 n &#xff0c;并 向下舍入 到最近的整数。 root 的 子树 由 root 和它的所…

海外代理IP干货:应该选择SOCKS55代理还是Http代理?

在使用IPFoxy全球代理时&#xff0c;选择 SOCKS55代理还是HTTP代理&#xff1f;IPFoxy代理可以SOCKS55、Http协议自主切换&#xff0c;但要怎么选择&#xff1f;为解决这个问题&#xff0c;得充分了解两种代理的工作原理和配置情况。 在这篇文章中&#xff0c;我们会简要介绍 …

Android PDFView 提示401 pom

背景 在开发安卓app&#xff0c;使用PDF组件来解析URL地址 &#xff0c;从github找到一个开源组件 AndroidPdfViewer 遇到一个大坑&#xff0c;一直提示下载依赖401 pom 打开控制台链接弹出需要登录jitpack 原因分析&#xff1a; 这个组件项目依赖库链接到了需要鉴权的…

能力认证!时代新威荣获《数据安全服务能力评定资格证书》

2024年1月17日&#xff0c;时代新威受邀出席中国计算机行业协会数据安全专业委员会&#xff08;以下简称“数专委”&#xff09;年度工作总结会。此次会议旨在聚集行业企业&#xff0c;搭建数据安全产业企业交流平台&#xff0c;共建产业发展“朋友圈”。 会上&#xff0c;数专…

初阶数据结构:链表相关题目练习(补充)

目录 1. 单链表相关练习题1.1 移除链表元素1.2 反转链表1.3 链表的中间结点1.4 链表的倒数第k个结点1.5 合并两个有序链表1.6 链表分割1.7 链表的回文结构1.8 相交链表1.9 判断一个链表中是否有环1.10 寻找环状链表相遇点1.11 链表的深度拷贝 1. 单链表相关练习题 注&#xff1…

IEEE Transactions on Industrial Electronics工业电子TIE修改稿注意事项及提交须知

一、背景 兔年末投了一篇TIE&#xff0c;手稿初次提交的注意事项也整理成了博客IEEE Transactions on Industrial Electronics工业电子TIE论文投稿须知&#xff0c;获得了许多点赞和收藏。最近也收到了审稿结果&#xff0c;给的意见是大修major revision&#xff0c;总之只要不…

基于springboot+vue的线上辅导班系统

博主主页&#xff1a;猫头鹰源码 博主简介&#xff1a;Java领域优质创作者、CSDN博客专家、阿里云专家博主、公司架构师、全网粉丝5万、专注Java技术领域和毕业设计项目实战&#xff0c;欢迎高校老师\讲师\同行交流合作 ​主要内容&#xff1a;毕业设计(Javaweb项目|小程序|Pyt…

吸猫毛空气净化器哪个好?推荐除猫毛好的宠物空气净化器品牌

如今&#xff0c;越来越多的家庭选择养宠物&#xff01;虽然家里变得更加温馨&#xff0c;但养宠可能会带来异味和空气中的毛发增多可能会引发健康问题&#xff0c;这也是一个大问题。 但我不想家里到处都是异味&#xff0c;尤其是便便的味道&#xff0c;所以很需要一款能够处…

QML中表格中数据获取

1.在生成的动态表格中获取某格数据的内容 import QtQuick 2.15 import QtQuick.Window 2.15import QtQuick.Controls 2.0 import Qt.labs.qmlmodels 1.0 import QtQuick.Layouts 1.15Window {width: 640height: 480visible: truetitle: qsTr("Hello World")TableMod…

数据分析-Pandas数据如何图示规律

数据分析-Pandas数据如何图示规律 数据分析和处理中&#xff0c;难免会遇到各种数据&#xff0c;那么数据呈现怎样的规律呢&#xff1f;不管金融数据&#xff0c;风控数据&#xff0c;营销数据等等&#xff0c;莫不如此。如何通过图示展示数据的规律&#xff1f; 数据表&…

VS2015报错:error MSB8020和MSB8036的解决方案

VS2015编译报错&#xff1a;error MSB8020 提示信息&#xff1a;error MSB8020: The build tools for v141 (Platform Toolset ‘v141’) cannot be found. To build using the v141 build tools, please install v141 build tools. Alternatively, you may upgrade to the c…

小程序框架接口-getApp

框架接口-getApp getApp() 用于获取小程序全局唯一的 App 实例&#xff0c;通过小程序应用实例可实现数据或方法的共享 &#x1f4cc; 注意事项&#xff1a; 1.不要在 App() 方法中使用 getApp() &#xff0c;使用 this 就可以拿到 app 实例通过 getApp() 获取实例之后&#x…

Android13 Audio框架

一、Android 13音频代码结构 1、framework: android/frameworks/base 1.AudioManager.java &#xff1a;音频管理器&#xff0c;音量调节、音量UI、设置和获取参数等控制流的对外API 2.AudioService.java &#xff1a;音频系统服务&#xff08;java层&#xff09;&#xff0c…

多模态论文阅读-LLaVA

Visual Instruction Tuning Abstract1. Introduction2. Related Work3. GPT-assisted Visual Instruction Data Generation4. Visual Instruction Tuning4.1 Architecture4.2 Training 5 Experiments5.1 Multimodal Chatchot5.2 ScienceQA 6 Conclusion Abstract 使用机器生成…

JS中判断是否存在逗号,如果存在给去掉

.includes() 方法判断是否存在 split("需要去掉的字符串").join(" ") 去重的方法 去重复 划分后拼接

网络——DHCP服务器、DNS服务器实验

网络——DHCP服务器、DNS服务器实验 一、DHCP服务器实验 DHCP——动态主机配置协议,用来管理ip地址的分配。网络中的每台计算机都有至少一个ip地址。在Windows网络连接对话框中可以设置成自动获取ip地址,这样主机作为DHCP client就可以自动从DHCP server获取ip地址了。 DHC…

live555学习 - 环境准备

环境&#xff1a;Ubuntu 16.04.7 ffmpeg-6.1 1 代码下载 最新版本&#xff1a; http://www.live555.com/liveMedia/public/ 历史版本下载 https://download.videolan.org/pub/contrib/live555/ 选择版本live.2023.01.19.tar.gz ps&#xff1a;没有选择新版本是新版本在…