点云的算法
Ⅰ 提取平面点云的轮廓
一. 基于凸包的凹点挖掘算法:
1. 提取点云的凸包
2. 计算凸包每条边的顶点的点密度(即该点 K 个临近点到该点的距离平均值)
3. 如果顶点点密度大于所在边的长度的 X 倍,则删除该边,并从内部点中选择出一个满足夹角最大的点,插入边界边,形成两条新的边界边
4. 迭代 2 和 3,一直到全部边界边的 X 倍小于其端点的点密度,算法结束
二. 基于 Delaunay 三角网的轮廓提取算法:
A. 不使用辅助点:
1. 首先对点云进行 Delaunay 三角构网
2. 同上,判断每条网格边长度的X倍和其端点的点密度之间的大小关系,并删除长的网格边
3. 提取只属于一个三角形的边界,作为边界边
4. 分类排序,得到有顺序关系的内外轮廓
B. 使用辅助点:
1. 手动在点云的边界附近选点
2. Delaunay构网
3. 判断每个三角形,如果其中一个点是辅助点,而另外两个点是点云中的点,则连接这两个点做为边界边
4. 分类排序,得到有顺序关系的内外轮廓
总体来说,由于构网算法的时间复杂度较高,因此可以有选择的使用上面两种算法,比如只有在确定要提取内轮廓的情况下,可以选择第二种轮廓提取算法
Ⅱ 点云重建有哪些经典的算法
三维重构算法得看你用什么传感器了,如果是双目相机,那一般都是极线几何加视觉特征配准的算法了,优化就用bundleadjustment。如果是单目,较早的有PTAM,DTAM,近几年structfrommotion比较火。如果是用Kinect之类的RGBD相机,比较好的有微软的KinectFusion,PCL的开源KinFu,以及MIT的加强版Kintinuous。如果用激光,那一般都是当SLAM做了,前端嘛就各种ICP配准算法了,后端的话,三维中主要还是用图优化来做。
Ⅲ 点云数据处理的5个步骤
1.点云滤波方法(数据预处理): 双边滤波、高斯滤波、条件滤波、直通滤波、随机采样一致性滤波。 VoxelGrid
2.关键点 ISS3D、Harris3D、NARF SIFT3D、
3.特征和特征描述 法线和曲率计算NormalEstimation、特征值分析Eigen-Analysis、EGI PFH、FPFH、3D Shape Context、Spin Image
4.点云匹配 ICP、稳健ICP、point to plane ICP、Point to line ICP、MBICP、GICP NDT 3D、Multil-Layer NDT FPCS、KFPCS
Ⅳ ICP算法的三维点云算法
三维激光扫描技术的快速发展,使其在各个领域得到广泛应用。由于物理上的一些限制,一次三维激光扫描不能获取扫描物体的全部数据,因此要对扫描点云进行拼接。首先,对最常用的ICP算法进行一系列研究,ICP算法的前提条件是具有一个良好的配准初值,文中在配准初值的选取上采用主成分分析法,为后续ICP算法的工作提供一个良好前提条件,增加点集预处理,点对查找上增加各种限制,采用kd-tree加速查找,以此对算法进行改进,并通过实例来验证本算法的有效性及合理性。
Ⅳ 点云滤波相关
复制于:https://zhuanlan.hu.com/p/102748557
介绍
主要方法
直通滤波(PassThrough 滤波)
VoxelGrid滤波器对点云进行下采样
均匀采样
增采样
statisticalOutlierRemoval滤波器移除离群点
使用参数化模型投影点云
ConditionalRemoval
RadiusOutlinerRemoval 移除离群点
从一个点云中提取索引 根据点云索引提取对应的点云
介绍
点云滤波,顾名思义,就是滤掉噪声。原始采集的点云数据往往包含大量散列点、孤立点,在获取点云数据时 ,由于设备精度,操作者经验环境因素带来的影响,以及电磁波的衍射性,被测物体表面性质变化和数据拼接配准操作过程的影响,点云数据中讲不可避免的出现一些噪声。在点云处理流程中滤波处理作为预处理的第一步,对后续的影响比较大,只有在滤波预处理中将噪声点 ,离群点,孔洞,数据压缩等按照后续处理定制,才能够更好的进行配准,特征提取,曲面重建,可视化等后续应用处理。其类似于信号处理中的滤波,
点云滤波方法主要有:
1. 直通滤波器pcl::PassThrough<pcl::PointXYZ> pass
2. 体素格滤波器pcl::VoxelGrid<pcl::PCLPointCloud2> sor;
3. 统计滤波器 pcl::StatisticalOutlierRemoval<pcl::PointXYZ> sor;
4. 半径滤波器 pcl::RadiusOutlierRemoval<pcl::PointXYZ> outrem;
5. 双边滤波 pcl::BilateralFilter<pcl::PointXYZ> bf;
该类的实现利用的并非XYZ字段的数据进行,而是利用强度数据进行双边滤波算法的实现,所以在使用该类时点云的类型必须有强度字段,否则无法进行双边滤波处理,双边滤波算法是通过取临近采样点和加权平均来修正当前采样点的位置,从而达到滤波效果,同时也会有选择剔除与当前采样点“差异”太大的相邻采样点,从而保持原特征的目的 。
6. 高斯滤波 pcl::filters::GaussianKernel< PointInT, PointOutT >
是基于高斯核的卷积滤波实现 高斯滤波相当于一个具有平滑性能的低通滤波器
7. 立方体滤波 pcl::CropBox< PointT>
过滤掉在用户给定立方体内的点云数据
8. 封闭曲面滤波 pcl::CropHull< PointT>
过滤在给定三维封闭曲面或二维封闭多边形内部或外部的点云数据
9. 空间剪裁:
pcl::Clipper3D<pcl::PointXYZ>
pcl::BoxClipper3D<pcl::PointXYZ>
pcl::CropBox<pcl::PointXYZ>
pcl::CropHull<pcl::PointXYZ> 剪裁并形成封闭曲面
10. 卷积滤波:实现将两个函数通过数学运算产生第三个函数,可以设定不同的卷积核
pcl::filters::Convolution<PointIn, PointOut>
pcl::filters::ConvolvingKernel<PointInT, PointOutT>
11. 随机采样一致滤波
等,
通常组合使用完成任务。
PCL中点云滤波的方案
点云数据密度不规则需要平滑
因为遮挡等问题造成离群点需要去除
大量数据需要下采样
噪声数据需要去除
对应的方案如下
按照给定的规则限制过滤去除点
通过常用滤波算法修改点的部分属性
对数据进行下采样
去除噪音
直通滤波(PassThrough 滤波)
最简单的一种滤波器,它的作用是过滤掉在指定维度方向上取值不在给定值域内的点。直通滤波器的实现原理如下:首先,指定一个维度以及该维度下的值域,其次,遍历点云中的每个点,判断该点在指定维度上的取值是否在值域内,删除取值不在值域内的点,最后,遍历结束,留下的点即构成滤波后的点云。直通滤波器简单高效,适用于消除背景等操作。
#include <pcl/filters/passthrough.h>
如果使用线结构光扫描的方式采集点云,必然物体沿z向分布较广,
但x,y向的分布处于有限范围内。
此时可使用直通滤波器,确定点云在x或y方向上的范围,
可较快剪除离群点,达到第一步粗处理的目的。
结果:
VoxelGrid滤波器对点云进行下采样
使用体素化网格方法实现下采样,即减少点的数量 减少点云数据,并同时保存点云的形状特征,在提高配准,曲面重建,形状识别等算法速度中非常实用,PCL是实现的VoxelGrid类通过输入的点云数据创建一个三维体素栅格,容纳后每个体素内用体素中所有点的重心来近似显示体素中其他点,这样该体素内所有点都用一个重心点最终表示,对于所有体素处理后得到的过滤后的点云,这种方法比用体素中心(注意中心和重心)逼近的方法更慢,但是对于采样点对应曲面的表示更为准确。
在网格内减少点数量保证重心位置不变
下采样 同时去除 NAN点
如果使用高分辨率相机等设备对点云进行采集,往往点云会较为密集。
过多的点云数量会对后续分割工作带来困难。
体素格滤波器可以达到向下采样同时不破坏点云本身几何结构的功能。
点云几何结构 不仅是宏观的几何外形,也包括其微观的排列方式,
比如横向相似的尺寸,纵向相同的距离。
随机下采样虽然效率比体素滤波器高,但会破坏点云微观结构.
使用体素化网格方法实现下采样,即减少点的数量 减少点云数据,
并同时保存点云的形状特征,在提高配准,曲面重建,形状识别等算法速度中非常实用,
PCL是实现的VoxelGrid类通过输入的点云数据创建一个三维体素栅格,
容纳后每个体素内用体素中所有点的重心来近似显示体素中其他点,
这样该体素内所有点都用一个重心点最终表示,对于所有体素处理后得到的过滤后的点云,
这种方法比用体素中心(注意中心和重心)逼近的方法更慢,但是对于采样点对应曲面的表示更为准确。
结果:
结果不太明显,换一个:
均匀采样 pcl::UniformSampling
这个类基本上是相同的,但它输出的点云索引是选择的关键点,是在计算描述子的常见方式。
原理同体素格 (正方体立体空间内 保留一个点(重心点))
而 均匀采样:半径求体内 保留一个点(重心点)
#include <pcl/filters/uniform_sampling.h>//均匀采样
增采样 setUpsamplingMethod
增采样是一种表面重建方法,当你有比你想象的要少的点云数据时,
增采样可以帮你恢复原有的表面(S),通过内插你目前拥有的点云数据,
这是一个复杂的猜想假设的过程。所以构建的结果不会百分之一百准确,
但有时它是一种可选择的方案。
所以,在你的点云云进行下采样时,一定要保存一份原始数据!
statisticalOutlierRemoval滤波器移除离群点
作用是去除稀疏离群噪点。在采集点云的过程中,由于测量噪声的影响,会引入部分离群噪点,它们在点云空间中分布稀疏。在估算点云局部特征(例如计算采样点处的法向量和曲率变化率)时,这些噪点可能导致错误的计算结果,从而使点云配准等后期处理失败。统计滤波器的主要思想是假设点云中所有的点与其最近的k个邻居点的平均距离满足高斯分布,那么,根据均值和方差可确定一个距离阈值,当某个点与其最近k个点的平均距离大于这个阈值时,判定该点为离群点并去除。统计滤波器的实现原理如下:首先,遍历点云,计算每个点与其最近的k个邻居点之间的平均距离;其次,计算所有平均距离的均值μ与标准差σ,则距离阈值dmax可表示为dmax=μ+α×σ,α是一个常数,可称为比例系数,它取决于邻居点的数目;最后,再次遍历点云,剔除与k个邻居点的平均距离大于dmax的点。
#include <pcl/filters/statistical_outlier_removal.h>
统计滤波器用于去除明显离群点(离群点往往由测量噪声引入)。
其特征是在空间中分布稀疏,可以理解为:每个点都表达一定信息量,
某个区域点越密集则可能信息量越大。噪声信息属于无用信息,信息量较小。
所以离群点表达的信息可以忽略不计。考虑到离群点的特征,
则可以定义某处点云小于某个密度,既点云无效。计算每个点到其最近的k(设定)个点平均距离
。则点云中所有点的距离应构成高斯分布。给定均值与方差,可剔除n个∑之外的点
激光扫描通常会产生密度不均匀的点云数据集,另外测量中的误差也会产生稀疏的离群点,
此时,估计局部点云特征(例如采样点处法向量或曲率变化率)时运算复杂,
这会导致错误的数值,反过来就会导致点云配准等后期的处理失败。
解决办法:对每个点的邻域进行一个统计分析,并修剪掉一些不符合标准的点。
具体方法为在输入数据中对点到临近点的距离分布的计算,对每一个点,
计算它到所有临近点的平均距离(假设得到的结果是一个高斯分布,
其形状是由均值和标准差决定),那么平均距离在标准范围之外的点,
可以被定义为离群点并从数据中去除。
使用参数化模型投影点云
使用参数化模型投影点云
如何将点投影到一个参数化模型上(平面或者球体等),
参数化模型通过一组参数来设定,对于平面来说使用其等式形式。
在PCL中有特定存储常见模型系数的数据结构。
投影前的Z轴都不为0 ,投影之后,打印的结果表明,xy的值都没有改变,z都变为0。所以该投影滤波类就是输入点云和投影模型,输出为投影到模型上之后的点云。
ConditionalRemoval 或 RadiusOutlinerRemoval 移除离群点
ConditionalRemoval 滤波器的理解
可以一次删除满足对输入的点云设定的一个或多个条件指标的所有的数据点
删除点云中不符合用户指定的一个或者多个条件的数据点
RadiusOutlierRemoval移除离群点
一个比较简单常用的方法就是根据空间点半径范围临近点数量来滤波,对应的类名是 RadiusOutlinerRemoval,这个很容易理解,它的滤波思想非常直接,就是在点云数据中,设定每个点一定半径范围内周围至少有足够多的近邻,不满足就会被删除。比如你指定了一个半径d,然后指定该半径内至少有1个邻居,那么下图中只有黄色的点将从点云中删除。如果指定了半径内至少有2个邻居,那么黄色和绿色的点都将从点云中删除。
球半径滤波器与统计滤波器相比更加简单粗暴。
以某点为中心画一个球计算落在该球内的点的数量,当数量大于给定值时,
则保留该点,数量小于给定值则剔除该点。
此算法运行速度快,依序迭代留下的点一定是最密集的,
但是球的半径和球内点的数目都需要人工指定。
Ⅵ 激光点云预处理研究概述
3D点云数据的预处理是利用有效点云信息进行三维重建及障碍物感知的基础,是3D点云配准、3D点云拼接环节的前提。一般的 3D 点云预处理工作包括地面点云去除、点云滤波和点云分割。在三维点云数据处理过程中,点云数据离群点、噪声点的剔除以及点云数据的配准不仅是点云数据处理中的重要环节,也是后期对点云数据进行特征提取完成检测环节的基础。
在进行目标物体分割时,将离散的三维数据点聚类的判断依据为点与点之间距离是否接近,而在激光雷达点云数据中,有很大一部分数据属于地面点数据,并且地面点云呈现为纹理状,这对后续障碍物点云的分类,识别带来干扰,如果不将这些地面点数据去除,在进行目标物体分割时会导致分割算法失效,因此需要先进行过滤。所以,地面点云数据去除是减少数据量以及提高分割算法准确度的有效手段。
因此为了提高去除地面点云算法的准确性和鲁棒性,许多学者提出了大量研究方法,这些方法主要有以下两类:基于栅格图方法的地面去除研究、基于三维激光雷达原始扫描线数据的地面去除研究。
通过激光雷达扫描得到的点云包含大部分地面点,常用的栅格图方法地面滤除点云方法有栅格高度差法、法向量方法和高度法。栅格高度法首先根据栅格大小生成网格,计算每个网格最低点与最高点的高度差,比较h与预设高度差阈值大小,对网格进行分类,最后根据网格对网格内的点进行分类。法向量法是基于计算出地面法向量为竖直向下或向上的假设,即地面点法向量值为(0,0,1)或(0,0,-1)。方法过程是计算点法向量并设定点分类的法向量阈值。高度法去除地面点云,是最常用且耗时最小的方法。根据激光雷达安装位置与姿态,可以根据设定阈值直接将点云分为地面点和障碍物点。
基于栅格图的点云处理方式是通过将三维点云数据投影到地面,建立多个栅格单元,采用连通区域标记算法或者邻域膨胀策略对目标进行聚类,这类方法被广泛应用在激光雷达三维建模中。一是因为三维点云向二维平面投影过程极大地压缩了数据量,能够提高算法处理的实时性;二是因为点云向栅格图的映射,将复杂的三维点云处理问题转化为图像处理问题,可以使用成熟的图像处理相关算法,提高了算法处理的时间效率。栅格法简单可靠、计算效率高,但是栅格单元参数固定且往往凭经验确定,远距离目标点云较为稀疏往往会出现过分割,而近距离目标点云较为稠密又会出现欠分割,算法严重依赖于阈值参数的选择,且往往需要逐帧进行分析,必然损失部分实时性。
由于三维激光雷达的原始三维数据包含了详细的空间信息,所以也可以用来进行相关点云数据处理。激光扫描线在地面和障碍物形成的角度值存在显着的不同,可作为分离地面点的重要依据。激光雷达中的多个激光器水平扫描周围环境中的物体,在两个相邻物体之间形成的角度很小,而同一物体的角度值很大。这启示了我们可以充分利用这一特性,大于角度阈值可认为这两点是同一物体,较好地处理了相邻目标欠分割的问题。通过将非地面点云分割为不同物体,然后进行目标物体的识别,可以为无人车提供更加详细的车辆、行人等障碍物信息,在运动中避免与不同类型的障碍物发生碰撞并进行及时避让。地面点云欠分割会导致目标漏检,过分割又会对后续的识别等操作带来影响。利用激光雷达产生点云的几何特性,研究人员提出了多种特征构建的方法,基于三维激光雷达原始扫描线数据的地面去除研究属于其中较为常用的方法。
激光雷达在采集三维点云数据的过程中,会受到各类因素的影响,所以在获取数据时,就会出现一些噪声。其实在实际工作中除了自身测量的误差外,还会受到外界环境的影响如被测目标被遮挡,障碍物与被测目标表面材质等影响因素;另外,一些局部大尺度噪声由于距离目标点云较远,无法使用同一种方法对其进行滤波。
噪声就是与目标信息描述没有任何关联的点,对于后续整个三维场景的重建起不到任何用处的点。但是在实际的点云数据处理算法中,把噪声点和带有特征信息的目标点区别开来是很不容易的,去噪过程中由于许多外在因素总是不可避免的伴随着一些特征信息的丢失。一个好的点云滤波算法不仅实时性要求高,而且在去噪的同时也要很好的保留模型的特征信息[88]。就需要把点云数据的噪声点特征研究透彻,才能够提出效果更好的去噪算法。
点云数据是一种非结构化的数据格式,激光雷达扫描得到的点云数据受物体与雷达距离的影响,分布具有不均匀性,距离雷达近的物体点云数据分布密集,距离雷达远的物体点云数据分布稀疏。此外,点云数据具有无序和非对称的特征,这就导致点云数据在数据表征时缺乏明确统一的数据结构,加剧了后续点云的分割识别等处理的难度。神经网络作为一种端到端的网络结构,往往处理的数据是常规的输入数据,如序列、图像、视频和3D数据等,无法对点集这样的无序性数据直接进行处理,在用卷积操作处理点云数据时,卷积直接将点云的形状信息舍弃掉,只对点云的序列信息进行保留。
点云滤波是当前三维重建技术领域的研究热点,同时也是许多无人驾驶应用数据处理过程中至关重要的一步。3D点云滤波方法主要可以分为以下三类,主要包括基于统计滤波、基于邻域滤波以及基于投影滤波。
由于统计学概念特别符合点云的特性,因此,许多国内外学者都将统计学方法引用到点云滤波技术中,Kalogerakis 等人将一种稳健统计模型框架运用到点云滤波中,取得了非常好的滤波效果。在这个统计模型框架中,通过使用最小二乘迭代方法来估计曲率张量,并在每次迭代的时候根据每个点周围的领域来为样本分配权重,从而细化每个点周围的每一个邻域。然后利用计算获得的曲率以及统计权重来重新校正正态分布。通过全局能量的最小化并通过计算出的曲率和法线来把离群点去掉,并且能较好的保持点云的纹理特征。
基于邻域的点云滤波技术,就是通过使用一种相似性度量的方法来度量点和其他周围邻域对滤波效率与结果影响比较大点的相似性,从而来确定滤波点的位置。一般来说,可以通过点云的位置、法线和区域位置来度量其相似性。1998年,Tomasi等人将双边滤波器扩展到 3D 模型去噪,由于双边滤波器具有维持边缘平滑的特点,所以在除去点云数据噪声的同时也能较好的保持细节。但是,由于该方法是通过一个网格生成的过程来去噪的,而在生成网格的过程就会引入额外的噪声。相比较于规则格网、不规则三角网等数据结构,体元是真3D的结构并且隐含有邻域关系,能够有效的防止生成网格的过程中引入噪声,但该方法的需要设置的参数比较多,不能满足实际工业运用。
基于投影滤波技术通过不同的投影测量来调整点云中每个点的位置,从而实现噪声点云的去除。但是,如果输入的点云特别不均匀,经过局部最优投影处理后的点云将变得更散乱。孙渡等人提出了一种基于多回波及 Fisher 判别的滤波算法。首先结合格网划分思想划分点云网格,在每个网格内,通过点云数据的回波次数和强度进行划分,分出待定的样本;其次,利用Fisher判别的分析法将点云投影到一维空间内,通过判定临界值将植被点云与地面点云分离,实现陡坡点云的滤波,但是,该方法只针对点云中含有回波强度的属性才有效,对于不包含回波强度信息的点云,该方法失去作用。
为弥补点云本身的无序性、不对称性、非结构化和信息量不充分等缺陷,在对点云进行特征识别及语义分割等操作之前,需先对点云进行数据形式的变换操作。常用的点云形式变换方法有网格化点云、体素化点云、将点云进行球面映射等。
体素化是为了保持点云表面的特征点的同时滤除不具备特征的冗余的点云数据。由于常用的法向量计算取决于相邻点的数量,并且两个云点的分辨率也不同。所以具有相同体素大小的体素化就是为了在两个不同分辨率的点云中生成等效的局部区域。在实际进行点云配准算法的过程中,由于用于配准的源点云数据与目标点云数据的数量比较庞大、点云密集,并且这些原始点云数据中含有许多点云对于描述物体形状特征没有任何作用的点,如果使用算法直接对源点云与目标点云进行配置的话,整个过程将耗费大量时间,所以必须对点云进行下采样的同时仍保留住可以体现形状轮廓特征的那部分点云。
由于点云本身的稀疏性、无序性和非均匀分布的特点,在利用深度全卷积神经网络结构对激光雷达点云数据进行语义分割时,端到端的卷积神经网络无法直接对无序排布点云进行操作。为使端到端的神经网络在无序性分布的点云数据上具有通用性,需先对点云数据进行映射,常见的投影方式有基于平面的投影、基于圆柱面的投影以及基于球面的点云投影方式。
参考:
周天添等(基于深度神经网络的激光雷达点云语义分割算法研究)
李宏宇(激光雷达的点云数据处理研究)
范小辉(基于激光雷达的行人目标检测与识别)
Ⅶ 标题 点云数据三种采集方法的优缺点
格点采样、均匀采样、几何采样。
1.格点采样:优点:效率非常高。采样点分布比较均匀,但是均匀性没有均价采样高,可以通过格点的尺寸控制点间距。缺点:不能精确控制采样点个数。
2.均匀采样:优点:采样点分布均匀。缺点:算法时间复杂度有些高,因为每次采样一个点,都要计算集合到集合之间的距离。
3.几何采样:优点:计算效率高,采样点局部分布是均匀的,稳定性高:通过几何特征区域的划分,使得采样结果抗噪性更强。
点云数据(point cloud data)是指在一个三维坐标系统中的一组向量的集合。扫描资料以点的形式记录,每一个点包含有三维坐标,有些可能含有颜色信息(RGB)或反射强度信息。
Ⅷ 点云数据UDP数据包解析算法举例
# fill pcl msg
fields = [PointField('x', 0, PointField.FLOAT32, 1),
PointField('y', 4, PointField.FLOAT32, 1),
PointField('z', 8, PointField.FLOAT32, 1),
PointField('intensity', 12, PointField.FLOAT32, 1)]
包括激光点的三维坐标、多次回波信息、强度信息、扫描角度、分类信息、飞行航带信息、飞行姿态信息、项目信息、GPS信息、数据点颜色信息等
C–class(所属类)
F一flight(航线号)
T一time(GPS时间)
I一intensity(回波强度)
R一return(第几次回波)
N一number of return(回波次数)
A一scan angle(扫描角)
RGB一red green blue(RGB颜色值)
点云数据UDP数据包解析算法举例
以某一个UDP数据包中Block 3中的Channel 5为例,具体的线束分布请参考附录I:
1)由附录I可知,Channel 5对应的水平角度偏移量为-1.042°,垂直角度为3.04°。
2)水平角度为转子此时的角度加上水平角度偏移量=(Azimuth Angle 3+(-1.042))度
(注意 我们定义从上往下看时,顺时针为水平角度正方向)。
3)解析UDP包Channel 5 Unit 3的值,其高位2个bytes构成的距离值乘以4mm即可得到以毫米为单位的真实世界的测距值。
至此,这一个测距点表示的测距方向和测距距离都得到了解析,可以在极坐标系或者直角坐标系中画出此次测距对应的障碍物点位置。对每个UDP包中所有的测距数据都做这样的解析,即可画出实时的激光雷达测距点云。
3.2 GPS数据UDP包
每一个GPS数据包都含有42 bytes以太网包头及512 bytes UDP数据。所有的多字节值均为小端字节序Little Endian。GPS数据包每秒被触发一次,端
口10110。
在接收到GPS数据前,激光雷达内部的1Hz的信号上升沿会触发一个GPS数据包。GPS数据包中的初始时间为000101000000(yymmddhhmmss,年,
月,日,时,分,秒)。如果GPRMC信息在开始时没有被提供,此非真实的GPS时间会随着内部1Hz信号更新。如果雷达接收到PPS信号和GPRMC数
据,本地的1Hz信号会被锁定到PPS信号。GPS数据包还是通过内部1Hz信号上升沿触发。同时,GPS数据包中的时间会被更新为GPRMC信息中的真实
时间。
GPS模块首先会发送PPS信号,再发送GPRMC信息。雷达可以从中提取出UTC信息,并把6 bytes的UTC时间(年:月:日:时:分:秒)输入到点云
数据包中。用户可以通过相加点云数据包中4 bytes的时间戳和6 bytes的UTC时间来获得此数据包的绝对时间。
一旦雷达获取到GPS信号,数据包中的GPS时间就会根据接收到的GPRMC信息进行更新。如果GPS模块停止发送数据,雷达依然会根据内部1Hz信号上
升沿触发GPS数据包,并且数据包中GPS时间会根据之前得到的真实GPS时间计时。
Ⅸ 点云概念与点云处理
点云概念
点云与三维图像的关系 :三维图像是一种特殊的信息表达形式,其特征是表达的空间中三个维度的数据,表现形式包括:深度图(以灰度表达物体与相机的距离),几何模型(由CAD软件建立),点云模型(所有逆向工程设备都将物体采样成点云)。和二维图像相比,三维图像借助第三个维度的信息,可以实现天然的物体——背景解耦。点云数据是最为常见也是最基础的三维模型。点云模型往往由测量直接得到,每个点对应一个测量点,未经过其他处理手段,故包含了最大的信息量。这些信息隐藏在点云中需要以其他提取手段将其萃取出来,提取点云中信息的过程则为三维图像处理。
点云的概念 :点云是在同一空间参考系下表达目标空间分布和目标表面特性的海量点集合,在获取物体表面每个采样点的空间坐标后,得到的是点的集合,称之为“点云”(Point Cloud)。
点云的获取设备 :RGBD设备是获取点云的设备,比如PrimeSense公司的PrimeSensor、微软的Kinect、华硕的XTionPRO。
点云的内容 :根据激光测量原理得到的点云,包括三维坐标(XYZ)和激光反射强度(Intensity),强度信息与目标的表面材质、粗糙度、入射角方向,以及仪器的发射能量,激光波长有关。
根据摄影测量原理得到的点云,包括三维坐标(XYZ)和颜色信息(RGB)。
结合激光测量和摄影测量原理得到点云,包括三维坐标(XYZ)、激光反射强度(Intensity)和颜色信息(RGB)。
点云的属性 :空间分辨率、点位精度、表面法向量等。
点云存储格式 :*.pts; *.asc ; *.dat; .stl ; [1] .imw;.xyz; .las。LAS格式文件已成为LiDAR数据的工业标准格式,LAS文件按每条扫描线排列方式存放数据,包括激光点的三维坐标、多次回波信息、强度信息、扫描角度、分类信息、飞行航带信息、飞行姿态信息、项目信息、GPS信息、数据点颜色信息等。
C–class(所属类)
F一flight(航线号)
T一time(GPS时间)
I一intensity(回波强度)
R一return(第几次回波)
N一number of return(回波次数)
A一scan angle(扫描角)
RGB一red green blue(RGB颜色值)
点云的数据类型 :
(1)pcl::PointCloudpcl::PointXYZ
PointXYZ 成员:float x,y,z;表示了xyz3D信息,可以通过points[i].data[0]或points[i].x访问点X的坐标值
(2)pcl::PointCloudpcl::PointXYZI
PointXYZI成员:float x, y, z, intensity; 表示XYZ信息加上强度信息的类型。
(3)pcl::PointCloudpcl::PointXYZRGB
PointXYZRGB 成员:float x,y,z,rgb; 表示XYZ信息加上RGB信息,RGB存储为一个float。
(4)pcl::PointCloudpcl::PointXYZRGBA
PointXYZRGBA 成员:float x , y, z; uint32_t rgba; 表示XYZ信息加上RGBA信息,RGBA用32bit的int型存储的。
(5) PointXY 成员:float x,y;简单的二维x-y点结构
(6)Normal结构体:表示给定点所在样本曲面上的法线方向,以及对应曲率的测量值,用第四个元素来占位,兼容SSE和高效计算。
点云的处理
点云处理的三个层次 :Marr将图像处理分为三个层次,低层次包括图像强化,滤波,关键点/边缘检测等基本操作。中层次包括连通域标记(label),图像分割等操作。高层次包括物体识别,场景分析等操作。工程中的任务往往需要用到多个层次的图像处理手段。
PCL官网对点云处理方法给出了较为明晰的层次划分,如图所示。
此处的common指的是点云数据的类型,包括XYZ,XYZC,XYZN,XYZG等很多类型点云,归根结底,最重要的信息还是包含在pointpcl::point::xyz中。可以看出,低层次的点云处理主要包括滤波(filters),关键点(keypoints)/边缘检测。点云的中层次处理则是特征描述(feature),分割(segmention)与分类。高层次处理包括配准(registration),识别(recognition)。可见,点云在分割的难易程度上比图像处理更有优势,准确的分割也为识别打好了基础。
低层次处理方法:
①滤波方法:双边滤波、高斯滤波、条件滤波、直通滤波、随机采样一致性滤波。②关键点:ISS3D、Harris3D、NARF,SIFT3D
中层次处理方法:
①特征描述:法线和曲率的计算、特征值分析、SHOT、PFH、FPFH、3D Shape Context、Spin Image
②分割与分类:
分割:区域生长、Ransac线面提取、全局优化平面提取
K-Means、Normalize Cut(Context based)
3D Hough Transform(线、面提取)、连通分析
分类:基于点的分类,基于分割的分类,基于深度学习的分类(PointNet,OctNet)
高层次处理方法:
①配准:点云配准分为粗配准(Coarse Registration)和精配准(Fine Registration)两个阶段。
精配准的目的是在粗配准的基础上让点云之间的空间位置差别最小化。应用最为广泛的精配准算法应该是ICP以及ICP的各种变种(稳健ICP、point to plane ICP、Point to line ICP、MBICP、GICP、NICP)。
粗配准是指在点云相对位姿完全未知的情况下对点云进行配准,可以为精配准提供良好的初始值。当前较为普遍的点云自动粗配准算法包括基于穷举搜索的配准算法和基于特征匹配的配准算法。
基于穷举搜索的配准算法:遍历整个变换空间以选取使误差函数最小化的变换关系或者列举出使最多点对满足的变换关系。如RANSAC配准算法、四点一致集配准算法(4-Point Congruent Set, 4PCS)、Super4PCS算法等……
基于特征匹配的配准算法:通过被测物体本身所具备的形态特性构建点云间的匹配对应,然后采用相关算法对变换关系进行估计。如基于点FPFH特征的SAC-IA、FGR等算法、基于点SHOT特征的AO算法以及基于线特征的ICL等…
②SLAM图优化
Ceres(Google的最小二乘优化库,很强大), g2o、LUM、ELCH、Toro、SPA
SLAM方法:ICP、MBICP、IDC、likehood Field、NDT
③三维重建
泊松重建、 Delaunay triangulations、表面重建,人体重建,建筑物重建,树木重建。结构化重建:不是简单的构建一个Mesh网格,而是为场景进行分割,为场景结构赋予语义信息。场景结构有层次之分,在几何层次就是点线面。实时重建:重建植被或者农作物的4D(3D+时间)生长态势;人体姿势识别;表情识别;
④点云数据管理:点云压缩,点云索引(KD、Octree),点云LOD(金字塔),海量点云的渲染
Ⅹ 如何对一片散乱点云进行坐标变换
合并到一个统一的坐标系下,这就是点云数据的配准,该相关技术在逆向工程、曲面质量检测和虚拟现实等领域均有着广泛的应用1
目前,解决不同点云数据集配准问题的直接方法有在被测物体上贴固定球和使用高精度的旋转工作台[1]1固定球会使部分物体不可见,一般应贴在相对较平坦的区域1流动式光学扫描仪Atos是在物体上或固定物体的工具上贴特制的圆形标签,其作用相当于固定球1根据前后2个视角观察的3个或3个以上不共线的公共标签来对数据进行配准,利
用旋转工作台可直接对测量数据进行配准,但是物体底部和下部的数据点是无法采集的1
在三维点云数据的自动配准中,运用最为广泛的是由Besl等提出的最近点迭代(iterativeclosestpoint,ICP)算法[2]1但是ICP算法要求2个匹配点
集中的一个点集是另外一个点集的子集,即2个点集之间存在着包含关系,当这个条件不满足时,将影响ICP的收敛结果,产生错误的匹配1显然,对于2个点云数据之间的部分配准问题,这种包含关系是不存在的1另外,ICP算法对2个点云相对初始位置要求较高,点云之间的的初始位置不能相差太大;否则,ICP的收敛方向是不确定的,因而配准结果也是不可靠的1
Chen[3]等运用2个曲面在法矢方向的距离来
代替某一点到其最近点的距离,并将其作为匹配的目标评价函数1这一设想最初是由Potmesil[4]于1983年提出的,在文献[3]的工作中它被推广为最
优加权的最小二乘方法1但文献[3]的方法需要求解非线性最小二乘问题,速度较慢1Masuda等[5]对点集进行随机采样,用最小中值平方误差作为度量准则,该方法在每一次迭代后都需要进行重新采样1Johnson等
[6]
使用特征提取策略去除没有启发信息
的平面点来提高配准速度,在点云数据法矢变化连续、突变比较少的情况下,其速度没有明显的提高1文献[728]通过引入参考点的方法来实现三维点云数据的配准,这些参考点其实也是一种标签点,需要在测量前贴在被测物体上1
本文提出了一种更为通用的空间散乱点云的配准算法,该算法不需要在被测物体上附加任何参考点或标签点,仅利用点云数据自身所具有的几何信息,对待配准散乱点云的相对位置没有要求,可以处在空间任意位置上;而且本文算法能够实现散乱点云的部分配准和整体配准1
1 算法概述
散乱点云的整体配准是一个点云数据与另一个
点云数据进行整体的数据融合,而部分配准是将一个点云数据的子集与另一个点云或其子集进行数据融合1本文算法的基本思想是首先估算出散乱点云数据中每一个测点的法矢和曲率,并根据一个点集中每个测点的曲率来寻找其在另一个点集中的曲率相近点,所有的曲率相近点构成一系列点对1计算将每个点对的法矢方向映射为一致的三维空间变换,每个点对间所有可能的三维变换构建一个哈希列表,找出列表中使得最多数量的点对法矢一致的变换,该变换能够将2个点云数据进行粗略配准1将粗略配准后2个点云的位置作为新的初始位置,用统计出的曲率相近点对作为初始的配准点对集合,运用ICP算法对散乱点云的初始配准结果做进一步地优化,从而实现散乱点云的精确配准1
2 算法原理及步骤
211 散乱点云数据微分几何特性估算
光学扫描设备采集到的点云数据密度很高,存在大量的冗余数据,严重影响后续算法的效率,因此在对散乱点云的微分几何特性估算前,应先按照一定要求减少测量点的数量1
对简化后的点云数据进行空间划分,并在点集中寻找每个测点的k2近邻1设测点pi的k2近邻且包括该点记为Nbhd(pi),为计算该点的法矢和曲率,借鉴文献[9]的方法,采用参数二次曲面来逼近散乱数据点,设二次曲面的参数方程。