-研究笔记-
  简要介绍通过 RGB-D 相机采集到的一个场景的图像数据和深度数据,对这个场景进行三维点云地图的简单构建。
整个步骤分为特征提取,特征匹配,位姿估计,三维重建。首先从图像中提取 ORB 特征,采用暴力匹配的方法得到图像间特征点的匹配结果,然后采用 PnP 估计相机的位姿筛选出关键帧,最后利用当前帧简历三维场景地图。后端使用 Eigen 加速矩阵计算,g2o 对相机位姿进行优化,使用 PCL 拼接点云。实验数据采用 TUM 的 RGB-D 数据集。

RGB-D 相机模型

RGB-D 相机能够主动测量每个像素的深度,比双目相机通过视差计算更为主动。相比较单目相机,RGB-D 相机没有复杂的深度恢复过程,使得算法更为简单;相较其它于双目相机,RGB-D 相机有着更好的经济性,节省了不少成本。但是 RGB-D 相机的深度测量范围有限,只能用于室内,从一定程度上限制了其适用性。
RGB-D 相机向探测目标发射一束光线,根据返回的结构光图案,计算物体与自身之间的距离。在测量完深度后,自己完成深度与彩色图像像素之间的配对,输出一一对应的彩色图和深度图。
之后通过得到的距离和色彩信息,计算像素的三维相机坐标,进行点云构建。

ORB 特征提取和匹配

直接从图像本身考虑运动估计会比较复杂,也会消耗大量计算资源,所以一般采用选取图像中比较有代表性的点,在这些点的基础上讨论相机的位姿变化并进行定位。
特征点由关键点和描述子两部分组成。视觉领域常用的特征检测算法有 SIFT、SURF、ORB 等。SIFT 和 SURF 算法提取效率和匹配效率都不高,本实验选择实时性更好的 ORB (Oriented FAST and Rotated BRIEF) 特征。

ORB 算法是 Ethan Rublee 在 2011 年提出的,是一种新的特征检测和描述算法。它改进了 FAST 检测子,并采用速度极快的 BRIEF 描述子,使图像提取环节得到加速。

FAST 主要检测局部像素灰度变化过于明显的地方,如果一个像素和邻域的像素差别比较大,那么他更可能是角点。ORB 中对原始的 FAST 进行改进,ORB 指定了要提取的角点数量 N,对原始的 FAST 角点分别计算 Harris 响应值,然后取 Top-N 个具有最大响应值得角点作为最终的角点集合。

另外 ORB 使 FAST 角点具有尺度和旋转的描述。通过对图像进行不同层次的降采样,获得不同分辨率的图像,并在每一层次进行角点检测得到尺度不变性;特征旋转通过灰度质心法 (Intensity Centroid) 实现:

  • 定义图像块的矩为
  • 通过矩可以找到图像块的质心
  • 连接图像块的几何中心 O 与质心 C,得到从 O 到 C 的方向向量,则特征点的方向可以定义为 通过以上方法,FAST 具备尺度和旋转描述

本实验采用暴力匹配 (Brute-Force Matcher) 的方法,计算每一个特征点与所有描述子的距离,然后排序。由于描述子距离表示了两个特征之间的相似程度,所以取最近的作为特征点。对于二进制描述子 BRIEF 采用汉明距离 (Hamming distance) 作为度量。

PnP 位姿估计

PnP (Perspective-n-Point) 是求解三维到二维点对运动的方法,不需要使用对极约束(存在初始化,纯旋转和尺度问题,且一般需要 8 对点),可以在较少的匹配点(最少 3 对点)中获得较好的运动估计。特征点的三维位置可以直接由 RGB-D 相机的深度图确定。

常用的 PnP 问题求解有 3 对点估计位姿 P3P、直接线性变换 (DLT) 、EPnP (Efficient PnP) 、UPnP 以及非线性优化建立最小二乘求解 (Bundle Adjustment)。本实验采用 OpenCV 提供的 EPnP 筛选匹配点来求解相机位姿。将数据集中相邻两帧图像之间进行比较,确认相机的旋转参数和平移参数。

场景地图重建

根据估算的相机位姿记录下的相机旋转平移参数,即相机的内参数和外参数,将 RGB-D 数据转化为点云 (Point Cloud),然后通过 PCL (Point Cloud Library) 进行拼接,最后得到由离散点组成的点云地图。把生成的点云地图以 PCD 格式存储,可通过 PCL 可视化程序打开相应文件。

后端优化

Eigen:C++开源线性代数库,提供有关矩阵的线性代数运算。
g2o:C++开源框架,利用图优化框架对 PnP 和位姿图进行优化,使用 Eigen 进行矩阵计算。
PCL:C++开源编程库,实现了大量点云相关的通用算法和高效数据结构,涉及到点云获取、滤波、分割、配准、检索、特征提取、识别、追踪、曲面重建、可视化等。

实验结果

通过 FAST 计算出的所有特征结点并通过 BRIEF 描述子进行配对

暴力匹配计算特征点和描述子的距离,进行优化后筛选有效的特征点


通过 PnP 算法估计相机的匹配点并计算出相机的旋转参数 R 和位移参数 t

将 Tum 数据集中的图片信息和深度信息进行两两帧特征提取和匹配,得到一组特征点和相机的位姿变换矩阵,利用 PCL 进行点云地图构建

总结

关键点的提取和描述子的计算非常耗时,尽管 ORB 已经做到了一定的优化,但进行特征提取仍然会占去实时三维建图的大部分时间。一幅图可以有几十万个像素,只提取特征点会丢弃大部分有用的图像信息,另外面对没有明显纹理的场景,室外亮环境,现有的 RGB-D 和 PnP 方案明显还有待完善的地方。
两辆帧的比较只能满足局部地图的匹配和优化,面对一个完整的场景还需要对全局进行更加真实和实时的建模。
点云建图也需要利用如深度滤波等滤波算法对结果进行优化,最终达到对相机拍摄到的场景进行半稠密地图和稠密地图重建的效果。