当前位置 : 主页 > 编程语言 > c语言 >

三维点云及算法详解

来源:互联网 收集:自由互联 发布时间:2023-08-28
一、三维点云基础信息 1.点云描述 点云是某个坐标系下的点的数据集。点包含了丰富的信息,包括三维坐标 X,Y,Z、颜色、分类值、强度值、时间等等。点云在组成特点上分为两种,

一、三维点云基础信息

1. 点云描述

点云是某个坐标系下的点的数据集。点包含了丰富的信息,包括三维坐标 X,Y,Z、颜色、分类值、强度值、时间等等。点云在组成特点上分为两种,一种是有序点云,一种是无序点云。

有序点云:一般由深度图还原的点云,有序点云按照图方阵一行一行的,从左上角到右下角排列,当然其中有一些无效点。有序点云按顺序排列,可以很容易的找到它的相邻点信息。有序点云在某些处理的时候还是很便利的,但是很多情况下是无法获取有序点云的;

无序点云:无序点云就是其中的点的集合,点排列之间没有任何顺序,点的顺序交换后没有任何影响。是比较普遍的点云形式,有序点云也可看做无序点云来处理

2. 点云获取

点云不是通过普通的相机拍摄得到的,一般是通过三维成像传感器获得,比如双目相机、三维扫描仪、RGB-D 相机;

3. 点云内容

根据激光测量原理得到的点云,包括三维坐标(XYZ)和激光反射强度(Intensity),强度信息与目标的表面材质、粗糙度、入射角方向以及仪器的发射能量、激光波长有关;

根据摄影测量原理得到的点云,包括三维坐标(XYZ)和颜色信息(RGB);

结合激光测量和摄影测量原理得到点云,包括三维坐标(XYZ)、激光反射强度(Intensity)和颜色信息(RGB)

4. 点云属性

空间分辨率、点位精度、表面法向量等。

点云可以表达物体的空间轮廓和具体位置,我们能看到街道、房屋的形状,物体距离摄像机的距离也是可知的;

其次,点云本身和视角无关,可以任意旋转,从不同角度和方向观察一个点云,而且不同的点云只要在同一个坐标系下就可以直接融合

5. 点云格式

点云目前的主要存储格式包括:pts、LAS、PCD、.xyz

1) pts格式

pts 点云文件格式是最简便的点云格式,直接按XYZ 顺序存储点云数据, 可以是整型或者浮点型

三维点云及算法详解_点云


2) LAS格式

LAS 是激光雷达数据(LiDAR),LAS 格式点云截图,其中 C:class(所属类),F:flight(航线号),T:time(GPS 时间),I:intensity(回波强度),R:return(第几次回波),N:number of return(回波次数),A:scan angle(扫描角),RGB:red green blue(RGB 颜色值)

三维点云及算法详解_点云_02

3) PCD格式

PCD 存储格式是 PCL 库官方指定格式,PCD 格式具有文件头,用于描绘点云的整体信息:定义数字的可读头、尺寸、点云的维数和数据类型;一种数据段,可以是 ASCII 码或二进制码。数据本体部分由点的笛卡尔坐标构成,文本模式下以空格做分隔符

三维点云及算法详解_点云_03

4) xyz格式

xyz  一种文本格式,前面 3 个数字表示点坐标,后面 3 个数字是点的法向量,数字间以空格分隔

三维点云及算法详解_点云_04

6. 点云数据

1) 数据类型

l pcl::PointCloudpcl::PointXYZ

PointXYZ 成员:float x,y,z;表示了xyz3D信息,可以通过points[i].data[0]或points[i].x访问点X的坐标值

l pcl::PointCloudpcl::PointXYZI

PointXYZI成员:float x, y, z, intensity; 表示XYZ信息加上强度信息的类型。

l pcl::PointCloudpcl::PointXYZRGB

PointXYZRGB 成员:float x,y,z,rgb; 表示XYZ信息加上RGB信息,RGB存储为一个float。

l pcl::PointCloudpcl::PointXYZRGBA

PointXYZRGBA 成员:float x , y, z; uint32_t rgba; 表示XYZ信息加上RGBA信息,RGBA用32bit的int型存储的。

l 成员:float x,y;简单的二维x-y点结构

l Normal结构体:表示给定点所在样本曲面上的法线方向,以及对应曲率的测量值,用第四个元素来占位,兼容SSE和高效计算

2) 数据坐标系

相机坐标系  右手三维坐标系——红色是X轴,绿色是Y轴,蓝色是Z

三维点云及算法详解_点云_05

3) 数据表示

l 点表示形式

点表示形式直接对点云进行处理,即采用最原始的点作为输入,数据表示形式如下图所示,使用最原始的点云数据,保留最丰富细致的信息,在所有方法中输入信息损失最小,但是,点表示方法需要处理的数据量较大,运行速度较慢;

三维点云及算法详解_点云_06

l 体素表示形式

体素是体积元素的简称,是数字数据在三维空间分割上的最小单位,类似于二维空间的最小单位像素,数据表示形式如下图所示,体素表示形式将点云转化为规则的体素形式,对点云进行处理。点云体素化首先需要设置参数,包括体素大小及每个体素可容纳的点云数量;

基于体素的方法不仅性能较优,计算速度也较可观,尤其是稀疏卷积的发展,促进体素方法的应用。但是,基于体素的方法受设置参数的影响,不可避免地丢失一部分点云信息;

三维点云及算法详解_点云算法_07


l 图表示形式

图表示形式,如下图所示。核心在于构建图神经网络,再通过图卷积进行特征提取。图神经网络的计算费时,对于应用是一个严重限制,但是图表示方法能较好地适应点云的不规则性,并且可得到更多局部信息;

三维点云及算法详解_点云算法_08


二、三维点云基础算法

1. 滤波算法

点云滤波作为常见的点云处理算法,一般是点云处理的第一步,对后续处理有很重要作用。滤波有很多方面也有很多种功能,比如去除噪声点、离群点、点云平滑以及空洞、数据压缩等

一般以下情况需要进行点云滤波处理:点云数据密度不规则需要平滑、因为遮挡等问题造成离群点需要去除、大量数据需要下采样、噪声数据需要去除;

PCL滤波算法的实现是通过滤波器类来完成的,需要实现滤波功能时则新建一个滤波器对象并设置参数,从而保证可以针对不同的滤波任务,使用不同参数的滤波器对点云进行处理;

1) 直通滤波

使用三维方向上的某个阈值直接过滤掉该方向上不符合阈值的点云滤波,常用于点云数据的阈值滤除;

三维点云及算法详解_点云_09

2) 体素滤波

点云按照空间三维划分体素(空间网格),并使用数学方法将每个体素内的点云替换成一个点,从而减少点云数量,常用于点云数据的下采样;

三维点云及算法详解_点云算法_10

3) 统计滤波

基于计算点到邻点的距离在输入数据集中的分布,使用统计分析技术从点云数据集中去除噪声,常常用于点云数据的离群点滤除;

三维点云及算法详解_点云算法_11

4) 半径滤波

给定指定半径,和半径内最少点数进行滤波,常常用于点云数据的离群点滤除;

三维点云及算法详解_点云算法_12

5) 滤波效果

不同的滤波器在滤波过程中,总是先创建一个对象,再设置对象参数,最后调用滤波函数对点云进行处理(点云为智能指针指向的一块区域);

三维点云及算法详解_点云_13

效果图依次是点云原始数据、直通滤波、体素滤波、统计滤波、半径滤波


2. 边缘检测算法

边缘提取采用PCL库里BoundaryEstimation的方法基于法线估计来实现的边界检测与提取:首先从原始点云上计算出法线,再由法线结合数据估计出边界;


三维点云及算法详解_点云算法_14

效果图依次是点云原始数据、边缘数据

BoundaryEstimation方法需计算点云法线,只适用于简单的点云;

3. 聚类算法

pcl的RegionGrowing区域生长算法输出数据结构是由聚类组成的数组,其中每个聚类都是被认为是同一光滑表面的一部分的点的集合,合并在平滑约束条件下足够接近的点,该算法的工作原理(光滑度的计算)是基于两点法线之间的角度比较;

三维点云及算法详解_点云算法_15


4. 关键点检测算法

NARF关键点是稳定性、区别性的点集,从深度图像提取出来的特征,减少特征提取时的搜索空间,对NARF关键点提取过程有以下要求:提取的过程必须将边缘及物体表面变化信息考虑在内;关键点的位置必须稳定,可以被重复探测,即使换了不同的视角;关键点所在的位置必须有稳定的支持区域,可以计算描述子并进行唯一的法向量估计,可以加快后续识别、定位的处理速度;

三维点云及算法详解_点云_16

三维点云及算法详解_点云_17

三、三维点云深度学习算法

1. PointNet算法

PointNet可以直接对点云进行处理的,对输入点云中的每一个点,学习其对应的空间编码,之后再利用所有点的特征得到一个全局的点云特征;

三维点云及算法详解_点云算法_18

代码详解

三维点云及算法详解_点云算法_19

分类结果

三维点云及算法详解_点云算法_20

2. PointNet++算法

PointNet++网络在PointNet基础上添加了分层次的结构,进而提取不同尺度下的特征

三维点云及算法详解_点云算法_21

代码详解

模型分为三步:采样、分组、提取特征 采样:最远点采样(FPS) 分组:寻找最远点集球形领域中的点 提取特征:多次卷积后取max,最后多个维度特征进行拼接

三维点云及算法详解_点云算法_22

分类结果

三维点云及算法详解_点云算法_23

3. PointNN算法

PointNN网络由非参数编码器(最远点采样(FPS)、k近邻(k-NN)、三角函数(Trigonometric Functions)和池化(Pooling))和点云特征匹配库组成,不需要任何参数或训练;

三维点云及算法详解_点云算法_24

代码详解

非参数编码器

三维点云及算法详解_点云_25


点云特征库

三维点云及算法详解_点云_26

分类结果

三维点云及算法详解_点云算法_27

4. PointPN算法

在PointNN结构上插入线性层来构建参数化网络Point-PN,仅用少量可学习参数表现出高性能-效率的权衡;

三维点云及算法详解_点云算法_28

模型分为两步:参数编码器提取特征、线性层结构;

代码详解

三维点云及算法详解_点云算法_29

分类结果

三维点云及算法详解_点云_30

上一篇:C语言进阶—— 分支语句和循环语句 1
下一篇:没有了
网友评论