机械之心原创
作者:陈萍
打开手机举行 人脸解锁;VR、AR 手艺 带来云云 虚拟却真实的场景……3D 视觉险些无所不能,在智能家居、智能安防、汽车电子、工业丈量、新零售、智能物流等领域施展 主要 作用,堪称赋能工业创新的最大推力。这些手艺 的背后涉及了 3D 视觉相关内容,那么盘算机是怎样 「看」这个三维天下 的?
随着信息手艺 的快速生长,盘算机视觉 3D 手艺 已经应用到了诸多领域,推动了虚拟现实(VR)、增强现实(AR)等手艺 的一直 前进 。3D 视觉问题变得越来越主要 ,它提供了比 2D 越发富厚的图像信息。
现现在 ,随处可见 3D 视觉手艺 带来的便利,工业机械人、工件识别与定位、3D 成像手艺 、产物虚拟设计、智能制造、自动驾驶、SLAM、无人机、3D 重修 、人脸识别等等,都涉及到 3D 视觉相关内容。
3D 视觉应用举例,图源:https://zhuanlan.zhihu.com/p/52049458
总结来说,3D 视觉是盘算机视觉与盘算机图形学高度交织的一个主要 研究偏向。由于三维传感手艺 的飞速生长和三维几何数据的爆炸式增添 ,3D 视觉研究突破传统的二维图像空间,实现三维空间的剖析 、明确 和交互。
我们生涯 在三维空间中,怎样 智能地感知和探索外部情形 一直是个热门 课题。2D 视觉手艺 借助强盛 的盘算机视觉和深度学习算法取得了逾越人类认知的成就,而 3D 视觉则由于 算法建模和情形 依赖等问题,一直处于正在研究的前沿,而三维信息才真正能够反映物体和情形 的状态,也更靠近 人类的感知模式。
随着手艺 的一直 前进 ,三维视觉领域也取得了快速前进 ,例如 3D+AI 识别功效,扫描人脸三维结构完成手机解锁;自动驾驶领域通太过析 3D 人脸信息,判断司机驾驶时的情绪状态;SLAM 通过重修 周边情形 ,完成建图与感知;AR 领域通过三维重修 手艺 完成目的 的重现等。那么云云 适用 的手艺 ,是怎样实现的呢?
在深入相识 之前,让我们先来相识 一下 3D 视觉手艺 的一些基础知识。
3D 图像先容
在举行 3D 图像先容 之前,首先简朴回首一下 2D 图像。我们一样平常 生涯 中所见的图像可以称为物理图像,这种图像不能直接被盘算机识别,需要转换成数字名堂 ,即数字图像。数字图像是二维图像有限数字数值像素的体现。由数组或矩阵体现,其光照位置和强度都是离散的。其有两种存储方式:位图存储和矢量存储,常见的存储名堂 包罗 PNG、GIF、JPEG、BMP 等。
2D 图像可分为二值图像、彩色图像等。其中二值图像中每个像素可以由 0(黑) 到 255(白) 的亮度值体现。0-255 之间体现差异的灰度级。而彩色图像是由三种差异颜色的灰度图像组合而成,一个为红色分量(R),一个为绿色分量(G),一个为蓝色分量(B)。
图像彩色显示法,RGB 图像三个分量,图源:https://blog.csdn.net/Hello_Chan/article/details/89094790
与二维图像类似,三维图像是在二维彩色图像的基础上又多了一个维度,即深度(Depth,D),可用一个很直观的公式体现为:三维图像 = 通俗 的 RGB 三通道彩色图像 + Depth Map。
RGB-D
RGB-D 是普遍 使用的 3D 名堂 ,其图像每个像素都有四个属性:即红(R)、绿(G)、蓝(B)和深度(D)。
深度图是三维图像特有的,是指存储每个像素所用的位数,也用于怀抱图像的色彩分辨率。确定彩色图像每个像素可能有的颜色数,或者确定灰度图像每个像素可能有的灰度级数。它决议 了彩色图像中可泛起的最多颜色数,或灰度图像中的最大灰度品级。其数值是规整的,适合直接用于现存的图像处置赏罚 框架。
关于深度图的诠释 ,例如,一幅彩色图像的每个像素用 R、G、B 三个分量体现,若每个分量用 8 位,那么一个像素共用 24 位体现,那么像素的深度为 24,则每个像素可以是 16777216(224) 种颜色中的一种。因此,可以把像素深度明确 成是深度图像距离值。体现一个像素的位数越多,它能表达的颜色数目就越多,而它的深度就越深。
RGB-D 图像名堂 ,图源:https://www.sohu.com/a/249567571_114877
在一样平常 的基于像素的图像中,我们可以通过(x,y)坐标定位任何像素,划分获得三种颜色属性(R,G,B)。而在 RGB-D 图像中,每个(x,y)坐标将对应于四个属性(深度 D,R,G,B)。
点云
我们在做 3D 视觉的时间 ,处置赏罚 的主要是点云,点云就是一些点的荟萃。相对于图像,点云有其不行替换 的优势——深度,也就是说三维点云直接提供了三维空间的数据,而图像则需要通过透视几何来反推三维数据。
作甚点云?着实 点云是某个坐标系下的点的数据集。点包罗了富厚的信息,包罗三维坐标 X,Y,Z、颜色、分类值、强度值、时间等等。点云在组成特点上分为两种,一种是有序点云,一种是无序点云。
点云示例,图源:https://www.jianshu.com/p/ffedad5e8e30
点云的获取:点云不是通过通俗 的相机拍摄获得的,一样平常 是通过三维成像传感器获得,好比双目相机、三维扫描仪、RGB-D 相机等。现在 主流的 RGB-D 相机有微软的 Kinect 系列、Intel 的 realsense 系列、structure sensor(需团结 iPad 使用)等。点云可通过扫描的 RGB-D 图像,以及扫描相机的内在参数建设点云,要领是通过相机校准,使用相机内在参数盘算真实天下 的点(x,y)。因此,RGB-D 图像是网格对齐的图像,而点云则是更希罕 的结构。此外,获得点云的较好要领还包罗 LiDAR 激光探测与丈量,主要通过星载、机载和地面三种方式获取。
点云的内容:凭证 激光丈量原理获得的点云,包罗三维坐标(XYZ)和激光反射强度(Intensity),强度信息与目的 的外貌材质、粗拙度、入射角偏向以及仪器的发射能量、激光波长有关。凭证 摄影丈量原理获得的点云,包罗三维坐标(XYZ)和颜色信息(RGB)。团结 激光丈量和摄影丈量原理获得点云,包罗三维坐标(XYZ)、激光反射强度(Intensity)和颜色信息(RGB)。
点云的属性:空间分辨率、点位精度、外貌法向量等。
虽然 RGB-D 相机应用普遍 ,但会受到许多硬件的限制,现在 深度相机输出的深度图存在许多问题,好比对于平滑物体外貌反射、透明物体、半透明物体、深色物体等都市造成深度图缺失。而且许多深度相机是大片的深度值缺失,后续还需要进一步的深度图补全操作。
图源:https://www.cnblogs.com/CV-life/p/10105480.html
上图为拍摄的室外一个街道的点云图,若是 仔细视察,能看清修建物、树木的轮廓等。就上图而言,点云的优点可以归为以下几点:首先,点云可以表达物体的空间轮廓和详细 位置,我们能看到街道、衡宇的形状,物体距离摄像机的距离也是可知的;其次,点云自己和视角无关,可以恣意 旋转,从差异角度和偏向视察一个点云,而且差异的点云只要在统一 个坐标系下就可以直接融合。
接下来,放大点云,如下图所示,若是 将点云放大,最后看到的就是一个个离散的点。也就是空间中成千上万的点组成了一个点的荟萃,这个点荟萃组成了上面的街道衡宇等。
点云放大图,图源:https://www.cnblogs.com/CV-life/p/10105480.html
从放大的点云图侧面反映了点云的弱点 ,可归结为以下几点:三维点云比图像多了一个维度,即深度;点云是不规则漫衍的,相比于图像式的规整网格更难处置赏罚 ;点云缺少了图像中的纹理,而是一个个伶仃的点,会丢失许多信息。除此以外,点云是漫衍在空间中(XYZ 点)非结构化数据(无网格);在图像中,像素的数目 是一个给定的常数,取决于相机。然而,点云的数目 可能会有很大的转变 ,取决于种种传感器;点云的分辨率和离相机的距离有关。不能近距离的视察,只能在一个很远的视角才气视察整体。
下面来看一下点云效果 对比,原始的 RGB-D 天生 的点云效果 如下:
图源:https://zhuanlan.zhihu.com/p/42084058
下面动图显示了经由 深度图补全后天生 的点云效果 如下:
图源:https://zhuanlan.zhihu.com/p/42084058
点云的数据存储名堂
点云存储文件名堂 有许多。一些文件名堂 致力于尺度化与通用性,现在被多个相关软件或软件库所支持,也被大多数业内人士所认同和使用。点云现在 的主要存储名堂 包罗:pts、LAS、PCD、.xyz 和. pcap 等。选择合适的通用名堂 可以更好地与其它工具以致 其它组织对接,进而提高事情效率。下面简朴枚举 一下点云的数据存储名堂 。
pts 点云文件名堂 是最轻盈 的点云名堂 ,直接按 XYZ 顺序存储点云数据, 可以是整型或者浮点型。如下图是截取的塑像点云的一部门。示例如下:
LAS 是激光雷达数据(LiDAR),存储名堂 比 pts 重大 ,旨在提供一种开放的名堂 尺度,允许差异的硬件和软件提供商输出可互操作的统一名堂 。现在 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 颜色值)。图源:https://www.cnblogs.com/chenbokai/p/6010143.html
PCD 存储名堂 ,现有的文件结构因自己组成的缘故原由 不支持由 PCL 库(后文会举行 先容 )引进 n 维点类型机制处置赏罚 历程中的某些扩展,而 PCD 文件名堂 能够很好地补足这一点。PCD 名堂 具有文件头,用于描绘点云的整体信息:界说数字的可读头、尺寸、点云的维数和数据类型;一种数据段,可以是 ASCII 码或二进制码。数据本体部门由点的笛卡尔坐标组成,文本模式下以空格做脱离 符。
PCD 存储名堂 是 PCL 库官方指命名 堂 ,典型的为点云量身定制的名堂 。优点是支持 n 维点类型扩展机制,能够更好地施展 PCL 库的点云处置赏罚 性能。文件名堂 有文本和二进制两种名堂 。示例如下:
图源:https://cloud.tencent.com/developer/article/1475778
.xyz 一种文本名堂 ,前面 3 个数字体现点坐标,后面 3 个数字是点的法向量,数字间以空格脱离 。示例如下:
.pcap 是一种通用的数据流名堂 ,现在盛行 的 Velodyne 公司出品的激光雷达默认收罗数据文件名堂 。它是一种二进制文件。
数据组成结构如下:
整体一个全局头部 (GlobalHeader),然后分成若干个包(Packet),每个包又包罗头部(Header)和数据(Data)部门。
响应 基础算法库对差异名堂 的支持
点云的数据量重大 ,需要专门的数据存储库举行 显示和生涯 。例如,一张 640 x 480 尺寸的深度图就可以转换为约莫三十万个空间点的点云,大的点云可达百万甚至万万 以上,这时专门用来举行 点云的读写、处置赏罚 等种种操作数据存储库就显得很是主要 。
PCL(Point Cloud Library)库支持跨平台存储,可以在 Windows、Linux、macOS、iOS、Android 上部署。可应用于盘算资源有限或者内存有限的应用场景,是一个大型跨平台开源 C++ 编程库,它实现了大量点云相关的通用算法和高效数据结构,其基于以下第三方库:Boost、Eigen、FLANN、VTK、CUDA、OpenNI、Qhull,实现点云相关的获取、滤波、支解、配准、检索、特征提取、识别、追踪、曲面重修 、可视化等操作,很是利便 移动端开发。
此处的 common 指的是点云数据的类型,包罗 XYZ、XYZC、XYZN、XYZG 等许多类型点云。可以看出,低条理的点云处置赏罚 主要包罗滤波(filters)、要害点(keypoints)、边缘检测。点云的中条理处置赏罚 则是特征形貌 (feature)、支解(segmention)与分类。高条理处置赏罚 包罗配准(registration)、识别(recognition)。
除了 PCL 库以外,VCG 库(Visulization and Computer Graphics Libary)是专门为处置赏罚 三角网格而设计的,该库很大,且提供了许多先进的处置赏罚 网格的功效,以及较量 少的点云处置赏罚 功效。
CGAL(Computational Geometry Algorithms Library)盘算几何算法库,设计目的 是以 C++ 库的形式,提供利便 、高效、可靠的几何算法,着实 现了许多处置赏罚 点云以及处置赏罚 网格的算法。
Open3D 是一个可以支持 3D 数据处置赏罚 软件快速开发的开源库。支持快速开发处置赏罚 3D 数据的软件。Open3D 前端在 C++ 和 Python 中果真了一组全心 选择的数据结构和算法。后端经由 高度优化,并设置为并行化。Open3D 是从一最先 就开发出来的,带有很少的、经由 仔细思量 的依赖项。它可以在差异的平台上设置,而且可以从源代码举行 最小的编译。代码清洁 ,样式一致,并通过清晰的代码审查机制举行 维护。在点云、网格、rgbd 数据上都有支持。
本文是针对 3D 视觉的总结性文章,先容 了几个较量 主要 的知识点,希望可以在一定水平上资助各人更深刻地明确 3D 视觉。在接下来的文章中,我们将继续先容 3D 视觉领域算法的实现。
参考链接:
https://zhuanlan.zhihu.com/p/42772630
https://www.cnblogs.com/ostin/p/9237544.html
https://www.cnblogs.com/CV-life/p/10105480.html
https://www.cnblogs.com/chenbokai/p/6010143.html
https://cloud.tencent.com/developer/article/1475778
https://www.jianshu.com/p/ffedad5e8e30
https://zhuanlan.zhihu.com/p/42084058