三维点云基础入门
1 3D图像概述
三维图像是在二维彩色图像的基础上又多了一个维度,即深度(Depth,D),可用一个很直观的公式表示为:三维图像 = 普通的RGB三通道彩色图像 + Depth Map
。
和二维图像相比,三维图像借助第三个维度的信息,可以实现天然的物体-背景解耦。
点云数据是最为常见也是最基础的三维模型。点云模型往往由测量直接得到,每个点对应一个测量点,未经过其他处理手段,故包含了最大的信息量。这些信息隐藏在点云中需要以其他提取手段将其萃取出来,提取点云中信息的过程则为三维图像处理。
1.1 3D图像分类
第一种分法:
- 多边形网格
- 基于体素的描述
- 点云
- 隐式表面
- 基于视图的描述
第二种分法:
- 深度图像(Depth Images)
- 点云
- 网格(Meshes)
- 体积网格(Volumetric Grids)
1.2 RGB-D
RGB-D是广泛使用的3D格式,其图像每个像素都有四个属性:即红(R)、绿(G)、蓝(B)和深度(D)。
在一般的基于像素的图像中,可以通过(x,y)
坐标定位任何像素,分别获得三种颜色属性(R,G,B)
。而在RGB-D图像中,每个(x,y)
坐标将对应于四个属性——(D,R,G,B)
。
2 3D点云基本概念
三维点云(3D Point Cloud)是一种用于表示三维空间中对象或场景的数据结构。在最基础的形式中,它是一个包含多个三维坐标点(X,Y,Z)
的集合。这些点是通过对实际物体或场景表面进行离散采样而获得的,因此,点云可以被视为场景表面在给定坐标系下的离散表示。
2.1 特点与研究现状
点云具有如下特性:
- 高度灵活性:点云可以用于表示任何类型的三维形状,包括不规则形状。
- 数据密度可变性:点云的密度可以非常不同,从只包含一个点(称为孤点或奇点)到包含几百万个数据点的高密度点云。
- 附加信息丰富性:除了基本的三维坐标外,点云数据还可能包含其他属性,如颜色、分类值、强度值和时间等。
三维点云表示的优点:保留了三维空间中原始的几何信息,不进行离散化。
目前,点云主要面临如下挑战:
- 数据集规模小
- 高维性
- 3维点云的非建构化特性
应用场景:
- 地理信息系统(GIS):用于地形测绘和环境建模。
- 机器人导航和SLAM:用于环境感知和路径规划。
- 工业检测:用于产品质量控制。
- 文化遗产保护:用于古建筑和艺术品的数字化。
- 虚拟现实和游戏:用于生成高度逼真的三维环境。
- 医学成像:用于体积重建和可视化。
- ……
2.2 分类
- 有序点云:一般由深度图还原的点云,点按照图方阵一行一行地从左上角到右下角排列,当然其中有一些无效点。
- 有序点云按顺序排列,可以很容易地找到相邻点信息(邻近搜索),如果某些点数据丢失或无效,通常会被标记为
NaN
或其他标识符。 - 有序点云在某些处理时较为便利,但是很多情况下无法获取有序点云。
- 有序点云按顺序排列,可以很容易地找到相邻点信息(邻近搜索),如果某些点数据丢失或无效,通常会被标记为
- 无序点云:点的集合,点排列之间没有任何顺序,点的顺序交换后没有任何影响。
- 无序点云是比较普遍的点云形式,有序点云也可看做无序点云来处理。
- 点的位置基于其在物理空间中的实际位置,而不是在某种预定义的网格或数组中的位置。
2.3 获取方式
三维点云常见的3种获取方式如下:
- 激光雷达(LiDAR)
- 工作原理:通过发送激光脉冲并测量其返回时间来计算距离。
- 应用场景:自动驾驶、地形测绘、林业等。
- 优点:高精度,能在各种环境条件下工作。
- 局限性:通常成本较高,数据量大。
- 立体视觉(Stereo Vision)
- 工作原理:使用两个或多个相机从不同角度捕捉场景,然后通过匹配相应的图像点来重建三维结构。
- 应用场景:机器人导航、游戏、影视制作。
- 优点:成本较低,实施简单。
- 局限性:需要明确的纹理或特征点进行匹配,对光照和纹理有一定依赖。
- 结构光(Structured Light)【重点】
- 工作原理:投射一系列已知模式的光线(通常是条纹或网格)到场景中,然后通过观察这些模式如何变形来重建三维结构。
- 应用场景:3D扫描、质量检测、面部识别。
- 优点:高精度,适用于小范围和室内环境。
- 局限性:对光照和表面反射敏感,通常范围有限。
一般通过三维成像传感器获得,例如双目相机、三维扫描仪、RGB-D相机等。
目前主流的RGB-D相机有微软的Kinect系列、Intel的 realsense系列、structure sensor(需结合iPad使用)等。
可通过扫描的RGB-D图像,以及扫描相机的内在参数创建点云,方法是通过相机校准,使用相机内在参数计算真实世界的点(x,y,z)
。因此RGB-D图像是网格对齐的图像,而点云则是更稀疏的结构。
2.4 内容与属性
根据不同的获取方式,点云包含如下内容:
- 根据激光测量原理得到的点云,包括三维坐标(XYZ)和激光反射强度(Intensity),强度信息与目标的表面材质、粗糙度、入射角方向以及仪器的发射能量、激光波长有关。
- 根据摄影测量原理得到的点云,包括三维坐标(XYZ)和颜色信息(RGB)。
- 结合激光测量和摄影测量原理得到点云,包括全部三种信息,即三维坐标(XYZ)、激光反射强度(Intensity)和颜色信息(RGB)。
点云的属性有空间分辨率、点位精度、表面法向量等。
点云可以表达物体的空间轮廓和具体位置,例如街道、房屋的形状、物体距离摄像机的距离等都是可知的。
点云本身与视角无关,可以任意旋转,从不同角度和方向观察一个点云,而且不同的点云只要在同一个坐标系下就可以直接融合。
2.5 处理方法
- 数据预处理:包括去噪、滤波和对齐。
- 特征提取:识别关键点、边缘和表面。
- 数据分割:将点云分成有意义的部分或区域。
- 三维重建:从点云生成更完整的三维模型。
3 主要存储格式
点云目前的主要存储格式包括:PTS、LAS、PCD、XYZ和pcap等
- PTS格式:最简便的点云格式,直接按XYZ顺序存储点云数据,可以是整型或浮点型。[PTS格式示例]
- LAS格式:激光雷达数据(LiDAR),存储格式比PTS复杂,旨在提供一种开放的格式标准,允许不同的硬件和软件提供商输出可互操作的统一格式。LAS格式点云如[LAS格式示例]所示,其中——
- C:class(所属类),F:flight(航线号),T:time(GPS时间),I:intensity(回波强度),R:return(第几次回波),N:number of return(回波次数),A:scan angle(扫描角),RGB:red green blue(RGB颜色值)。
- PCD格式:PCL库官方指定格式,是典型的为点云量身定制的格式。优点是支持
n
维点类型扩展机制,能够更好地发挥PCL库的点云处理性能。文件格式有文本和二进制两种格式。PCD格式的文件头用于描绘点云的整体信息。[PCD格式示例] - XYZ格式:一种文本格式,前3个数字表示点坐标,后3个数字是点的法向量,数字间以空格分隔。[XYZ格式示例]
- PCAP格式:一种通用的数据流格式,是当前流行的Velodyne公司出品的激光雷达默认采集数据文件格式(厂商格式)。是一种二进制文件。[PCAP文件结构图]
- OBJ格式:一种文本文件,通常用以
#
开头的注释行作为文件头,数据部分每一行的开头关键字代表该行数据所表示的几何和模型元素,以空格做数据分隔符。
4 基础算法库
主要的点云相关开源工具及库:
- PCL(Point Cloud Library)
- 官网:pointclouds.org
- API文档:PCL API Documentation
- 语言:C++
- 特点:全面、成熟,提供了大量的点云处理算法和工具。
- 应用场景:点云滤波、特征提取、模型拟合、分割等。
- Open3D
- 官网:www.open3d.org
- API文档:Open3D Documentation
- GitHub仓库:github.com/isl-org/Open3D
- 语言:C++,Python
- 特点:现代、易用,设计上更注重易用性和灵活性。
- 应用场景:点云可视化、三维重建、深度学习等。
- CloudCompare
- 官网:www.danielgm.net/cc
- 语言:C++
- 特点:主要用于3D点云和网格的可视化和分析。
- 应用场景:数据可视化、对比、分析等。
- PDAL(Point Data Abstraction Library)
- 官网:pdal.io
- 语言:C++
- 特点:专注于地理空间数据,支持多种数据格式。
- 应用场景:地理信息系统、地形分析等。
- MeshLab
- 官网:www.meshlab.net
- 语言:C++
- 特点:除了点云处理,还提供了丰富的三维网格处理功能。
- 应用场景:三维扫描、数据清理、网格优化等。
- libpointmatcher
- GitHub仓库:github.com/norlab-ulaval/libpointmatcher
- 语言:C++
- 特点:专注于点云配准。
- 应用场景:机器人导航、SLAM(同时定位与地图构建)等。
- PyTorch3D
- 官网:pytorch3d.org
- 语言:Python
- 特点:基于PyTorch,专为深度学习和点云处理设计。
- 应用场景:点云分类、分割、生成等。
安装Open3D:
pip install open3d
《3D点云基础(1):点云概述》有1条评论