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

写在前面

  • 本文内容
    点云算法的学习基础,入门方法,相关领域,资源,开源库,算法等的介绍;
    以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.mfbz.cn/a/420964.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

计算机网络_2.1 物理层概述

2.1 物理层概述 一、物理层要实现的功能二、物理层接口特性 B站 深入浅出计算机网络 2.1物理层概述 一、物理层要实现的功能 物理层要实现的功能就是在各种传输媒体上传输比特0和1&#xff0c;进而给上面的数据链路层提供透明传输比特流的服务。 数据链路层“看不见”&#xff…

Golang 开发实战day01 - Variable String Numeric

Golang 教程01 - Variable String Numeric 1. Go语言的重要性 Go语言&#xff0c;又称Golang&#xff0c;是一种由Google开发的静态编译型编程语言。它于2009年首次发布&#xff0c;并在短短几年内迅速流行起来。Go语言具有以下特点&#xff1a; 语法简单易学&#xff1a;Go…

【C++从0到王者】第四十八站:最短路径

文章目录 一、最短路径二、单源最短路径 -- Dijkstra算法1.单源最短路径问题2.算法思想3.代码实现4.负权值带来的问题 三、单源最短路径 -- Bellman-Ford算法1.算法思想2.算法实现3.SPFA优化4.负权回路 四、多源最短路径 -- Floyd-Warshall算法1.算法思想2.算法实现 一、最短路…

项目解决方案:社会视频资源接入平台解决方案

目 录 一、项目背景 二、方案简述 1、监控功能 2、视频录像 三、系统构架 四、产品功能及特点 1、实时图像点播 2. 远程控制 3. 存储和备份 4. 历史图像的检索和回放 5、报警管理 &#xff08;1&#xff09;报警配置 &#xff08;2&#xff09;报警的…

优化Vue项目中 WebStorm:2023.3 对 CSS 和 HTML 的默认注释

前言 WebStorm是一种基于JetBrains IntelliJ平台的集成开发环境&#xff08;IDE&#xff09;&#xff0c;专门用于Web开发。它支持JavaScript、HTML和CSS等语言&#xff0c;并提供了丰富的功能和工具&#xff0c;以提高开发人员的效率。但是&#xff0c;在开发Vue项目中发现&a…

通过实验验证GAP、GMP、FC性能表现

深度学习 文章目录 深度学习一、背景二、什么是GAP三、GAP在Keras中的定义四、GAP VS GMP VS FC五、结论 一、背景 Global Average Pooling(简称GAP&#xff0c;全局池化层)技术最早提出是可以替代全连接层的一种新技术。在keras发布的经典模型中&#xff0c;可以看到不少模型…

Cy8c42(2.软件串口使用)

1.前言 原本早上想开始用可编程逻辑模块来做RS寄存器的&#xff0c;但是RS寄存器要两个输入&#xff0c;板载只有一个按键&#xff0c;那就先看看串口吧&#xff0c;把串口作为一个按键用。 2.初始化 芯片内部一共有两种串口 &#xff08;1&#xff09;软件串口&#xff08…

企业数字化转型的第一步:由被动多云向主动多云转变

随着经济环境、市场形势、技术发展、用户需求等诸多因素的变化&#xff0c;数字化转型为企业进一步提升效率和竞争力、提供更加丰富的个性化产品和服务、进行业务场景创新、探寻新的增长机会和运营模式提供了崭新的途径。越来越多的企业意识到&#xff0c;数字化转型已不是企业…

【嵌入式——QT】数值输入和显示组件

数值输入和显示组件 QSlider&#xff1a;滑动条&#xff0c;通过滑动来设置数值&#xff1b;QScrollBar&#xff1a;卷滚条&#xff0c;与QSlider类似&#xff0c;还可以用于卷滚区域&#xff1b;QProgressBar&#xff1a;进度条&#xff0c;一般用于显示任务进度&#xff0c;…

【Leetcode每日一题】二分查找 - 在排序数组中查找元素的第一个和最后一个位置(难度⭐⭐)(18)

1. 题目解析 Leetcode链接&#xff1a;34. 在排序数组中查找元素的第一个和最后一个位置 这个问题的理解其实相当简单&#xff0c;只需看一下示例&#xff0c;基本就能明白其含义了。 核心在于找到给定目标值所在的数组下标区间&#xff0c;设计一个O(logn)的算法。 2. 算法原…

集成测试之我的初步学习与总结

基本概念 将软件集成起来后进行测试。 集成测试又叫子系统测试、组装测试、部件测试等。集成测试主要是针对软件高层设计进行测试&#xff0c;一般来说是以模块和子系统为单位进行测试。 集成测试包含的层次 模块内的集成&#xff0c;主要是测试模块内各个接口间的交互集成…

【C++】用文件流的put和get成员函数读写文件

题目 编写一个mycopy程序&#xff0c;实现文件复制的功能。用法是在控制台输入&#xff1a; mycooy 源文件名 目标文件名 参数介绍 m a i n main main 函数的参数有两个&#xff0c;一个int类型参数和一个指针数组。 a r g c argc argc 表示参数的个数。参数为void时 a r g …

Github上最值得学习的10个Android开源项目,安卓面试题

1.Java语言进阶与Android相关技术核 Android应用是由Java语言进行开发的&#xff0c;SDK也是由Java语言编写&#xff0c;对于Android来说&#xff0c;只要SDK没有用Kotlin重写&#xff0c;那么Java语言是都需要学习的。而且Android APK的后台服务器程序大概率是Java语言构建&a…

一【初识EMC】

在作为硬件行业相关从业者&#xff0c;经常接触到EMC相关问题&#xff0c;下面来简单介绍下EMC相关方面的知识 文章目录 前言一、生活中的EMC现象&#xff1f;二、EMC是什么三、EMC的三要素四、EMI与EMS的评估方式1.RE2.CE3.HAR4.FLICKER5.Rs6.CS7.ESD8.EFT9.DIP10.PMS11.surge…

内置kpi接口短视频解析html源码

内置kpi接口短视频解析html源码&#xff0c;复制代码即可解析视频并 去水印 源码免费下载地址专业知识分享社区-专业知识笔记免费分享 (chaobiji.cn)

flutter旋转动画,Android彻底组件化方案实践方法

Android基础 & 常用 针对Android基础&常用知识&#xff0c;我认为对于初级开发者来说&#xff0c;按照优先级最主要的知识点主要包括&#xff1a;四大组件、布局使用、多线程 & 动画&#xff1b;具体介绍如下&#xff1a; 2. Android进阶 针对Android进阶知识&am…

Java通过Semaphore控制同一时间只有3个线程运行

怎么控制同一时间只有3个线程运行&#xff1f; 直接上代码 import java.util.Date; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import java.util.concurrent.Semaphore;public class SemaphoreThreadPoolExample {private static…

精酿啤酒:从原料到成品的质量控制流程

质量控制是啤酒酿造过程中重要的一环&#xff0c;它涉及到从原料选择到成品生产的每一个环节。Fendi Club啤酒对其质量控制流程有着严格的要求&#xff0c;以确保产品的品质和一致性。 Fendi Club啤酒对原料的选择进行严格把关。他们选用上好、新鲜的麦芽、水和酵母等原料&…

MySql安全加固:可信IP地址访问控制 设置密码复杂度

MySql安全加固&#xff1a;可信IP地址访问控制 & 设置密码复杂度 1.1 可信IP地址访问控制1.2 设置密码复杂度 &#x1f496;The Begin&#x1f496;点点关注&#xff0c;收藏不迷路&#x1f496; 1.1 可信IP地址访问控制 当您在创建用户时使用’%作为主机部分&#xff0c;…

zookeeper启动报错

启动zookeeper报错 从报错中可以看到 Invalid config, exiting abnormally 意思是&#xff1a;配置无效&#xff0c;异常退出 在往上看是没有zoo.cof这个配置文件 2024-02-27 14:47:03,285 [myid:] - ERROR [main:o.a.z.s.q.QuorumPeerMain99] - Invalid config, exiting…