1、I/O模块
PCL 中I/O库提供了点云文件输入输出相关的操作类,并封装了 OpenNI 兼容的设备源数据获取接口,可直接从众多感知设备获取点云图像等数据。I/O模块利用21个类与28个函数实现了对点云的获取、读人、存储等相关操作,其依赖于 pcl_common 和 pcl_octree模块以及OpenNI 外部开发包。
OpenNI是一个多语言、跨平台的框架,它定义了一套用于编写通用自然交互应用的 API。OpenNI的主要目的就是形成标准的API,便于下面两个接口之间进行通信:
(1) 视觉和音频传感器(用来感知周围环境信息)。
(2) 视觉和音频感知中间件(用来对应用场景中所记录的音频和视觉数据进行分析与理解,例如能够接收一份可见的图像数据并返回从中检测到的手掌位置信息)。
2、KD-TREE
通过雷达、激光扫描、立体摄像机等三维测量设备获取的点云数据,具有数据量大、分布不均匀等特点。 作为三维领域中一个重要的数据来源,点云数据主要是表征目标表面的海量点集合,并不具备传统实体网格数据的几何拓扑信息。 所以点云数据处理中最为核心的问题就是建立离散点间的拓扑关系,实现基于邻域关系的快速查找。
kd-tree 或者 k维树是计算机科学中使用的一种数据结构,用来组织表示k维空间中点集合。 它是一种带有其他约束条件的二分查找树。 kd-tree 对于区间和近邻搜索十分有用。 我们为了达到目的,通常只在三个维度中进行处理,因此所有的kdtree 都将是三维 kd tree。
在树的根部所有子节点是以第一个指定的维度上被分开(也就是说,如果第一维坐标小于根节点的点它将分在左边的子树种,如果大于根节点的点它将分在右边的子树种)。树的每一级都在下一个维度上分开,所有其他的维度用完之后就到第一个维度。
2D KD-TREE,如果是3D,还有Z=a面剖分
3、OCTREE八叉树
建立空间索引在点云数据处理中已被广泛应用,常见空间索引一般是自顶向下逐级划分空间的各种空间索引结构,比较有代表性的包括BSP树、KD树、KDB树、R树、R+树、CELL树、四叉树和八叉树等索引结构,而在这些结构中KD树和八叉树在3D点云数据组织中应用较为广泛。PCL对八叉树的数据结构建立和索引方法进行了实现,以方便在此基础上的其他点云处理操作。
八叉树结构通过对三维空间的几何实体进行体元剖分,每个体元具有相同的时间和空间复杂度,通过循环递归的划分方法对大小为 2n×2n×2n的三维空间的几何对象进行剖分,从而构成一个具有根节点的方向图。在八叉树结构中如果被划分的体元具有相同的属性,则该体元构成一个叶节点;否则继续对该体元剖分成个子立方体,依次递归剖分,对于2n×2n×2n 大小的空间对象,最多剖分n次。
4、可视化
点云显示
5、滤波
在获取点云数据时,由于设备精度、操作者经验、环境因素等带来的影响,以及电磁波衍射特性、被测物体表面性质变化和数据拼接配准操作过程的影响,点云数据中将不可避免地出现一些噪声点。实际应用中除了这些测量随机误差产生的噪声点之外,由于受到外界干扰如视线遮挡,障碍物等因素的影响,点云数据中往往存在着一些离主体点云即被测物体点云较远的离散点,即离群点,不同的获取设备点云噪声结构也有不同,其他可以通过滤波重采样完成的工作,可以是孔洞修复、信息损失最小海量点云数据压缩处理等。在点云处理流程中滤波处理作为预处理的第一步,往往对后续处理管道影响很大,只有在滤波预处理中将噪声点、离群点、孔洞、数据压缩等按照后续处理定制,才能够更好地进行配准、特征提取、曲面重建、可视化等后续应用处理。PCL中点云滤波模块提供了很多灵活实用的滤波处理算法,例如双边滤波、高斯滤波、条件滤波、直通滤波、基于随机采样一致性滤波等,滤波模块是作为PCL 的一个处理成员模块,其在应用中非常方便与其他点云处理流程集成。
(1)PCL中点云滤波方案:
PCL中总结了几种需要进行点云滤波处理的情况,这几种情况分别如下:
①点云数据密度不规则需要平滑
②因为遮挡等问题造成 离群点需要去除。
③大量数据需要进行下采样(Downsample)。(缩小图像(或称为下采样(subsampled)或降采样(downsampled))的主要目的有两个:1、使得图像符合显示区域的大小;2、生成对应图像的缩略图。 放大图像(或称为上采样(upsampling)或图像插值(interpolating))的主要目的是放大原图像,从而可以显示在更高分辨率的显示设备上。对图像的缩放操作并不能带来更多关于该图像的信息, 因此图像的质量将不可避免地受到影响。然而,确实有一些缩放方法能够增加图像的信息,从而使得缩放后的图像质量超过原图质量的。)
④噪声数据需要去除。
对应的方法如下:
①按具体给定的规则限制过滤去除点。
②通过常用滤波算法修改点的部分属性。
③对数据进行下采样。
(2)双边滤波算法
双边滤波算法是通过取邻近采样点的加权平均来修正当前采样点的位置,从而达到滤波效果。同时也会有选择剔除部分与当前采样点“差异”太大的相邻采样点,从而达到保持原特征的目的。
举个简单例子:
激光扫描通常会产生密度不均匀的点云数据集。另外,测量中的误差会产生稀疏的离群点,使效果更糟。估计局部点云特征(例如采样点处法向量或曲率变化率)的运算很复杂,这会导致错误的数值,反过来有可能导致点云的配准等后期处理失败。以下方法可以解决其中部分问题:对每个点的邻域进行一个统计分析,并修剪掉那些不符合一定标准的点。我们的稀疏离群点移除方法基于在输入数据中对点到临近点的距离分布的计算。对每个点,我们计算它到它的所有临近点的平均距离。假设得到的结果是一个高斯分布(正态分布),其形状由均值和标准差决定,平均距离在标准 范围(由全局距离平均值和方差定义)之外的点,可被定义为离群点并可从数据集中去除掉。
6、深度图像
我们生活在一个三维世界中,人类视觉系统是面向三维世界的,心理学的研究结果表明:人类的视觉系统在理解和识别景物时,应用了大量的基于视觉的深度信息,因此,开展有关深度图像方面的分析与研究,对计算机视觉技术的发展有着重要的促进作用。 近年来,随着各种光学传感器技术的迅猛发展,包含物体三维结构信息的深度图像数据获取已经开始大量普及,特别是廉价类 kinect 设备的出现,引发了自然人机交互从实验室走向大众,从而基于深度图像的研究也成为人们关注的焦点。
目前,深度图像的获取方法有激光雷达深度成像法、计算机立体视觉成像、坐标测量机法、莫尔条纹法、结构光法等等。 针对深度图像的研究重点主要集中在以下几个方面:深度图像的分割技术、深度图像的边缘检测技术、基于不同视点的多幅深度图像的配准技术、基于深度数据的三维重建技术、基于深度图像的三维目标识别技术、深度数据的多分辨率建模和几何压缩技术等等。 在 PCL 中深度图像与点云最主要的区别在于,其近邻的检索方式不同,并且可以互相转换。
深度图像(Depth Images)也被称为距离影像(Range Images),是指将从图像采集器到场景中各点的距离(深度)值作为像素值的图像,它直接反映了景物可见表面的几何形状,利用它可以很方便的解决3D目标描述中的许多问题。 深度图像经过坐标转换可以计算为点云数据,有规则及必要信息的点云数据也可以反算为深度图像数据。