基于传感器的扫描技术已经可以很成功的重建室内场景,但在这些扫描方案的应用中,镜子和玻璃等表面的重建成了显著的问题,一个镜子会在其中形成现实世界的镜像,而对于扫描系统来说,镜像世界和现实世界实际上很难区分,玻璃也会产生与镜子很相似的效果,然而这两者都是在扫描生活场景是不可避免的成分,由于它们造成的困难,最近场景重建方法(如Matterport3D)甚至都需要用户在扫描时手动选择窗户和镜子。
最近,Facebook的研究人员发表了一篇论文,用于在扫描过程中自动识别镜子和玻璃等容易产生镜像的表面,并且对该表面平面实现精确的识别和边界的检测。
根据论文,Facebook的研究人员采用的是一种称为AprilTag的标记方案。这个AprilTag实际上是一种用于机器人视觉等的技术,看起来就像是一个二维码,在机器人视觉的运用中,AprilTag可以贴于障碍物上,传感器对这个“二维码”进行识别,就可以了解前方的障碍,并做出应对。
在论文中,对AprilTag的运用更有趣一些,简单地说,它没有选择将AprilTag贴在镜子和玻璃表面再由扫描设备识别(可能这样还不如直接在扫描过程中选择镜面方便),而是在扫描装置的下方的一个画有AprilTag的薄片上,对于可以形成镜像的物品,扫描设备即可识别镜像中的AprilTag,对于不能形成镜像的物品,就没有AprilTag的镜像了。
关于镜面表面和边缘的识别,镜面表面是通过将Slam装置精确的姿势估计和观测AprilTag的镜面图像在空间的移动两者结合起来运算得到的。
而对于的边缘的识别,则是依靠多个功能通道的识别实现的,其中包括几何识别、图像强度识别、AprilTag特征识别等等,通过将这些不同特征的识别计算,即可估计出镜面边缘的位置和样式,这还被用来区分玻璃和镜面的反射,因为玻璃的反射更模糊,图像范围更大,而镜面反射则更加保真。
当然这里只是简单的解释,实际上,为了均匀的镜面反射和更好地识别,对于照明光线、画有AprilTag的薄片的组成都有更为严谨的要求,而如果去看镜面表面识别和边缘估计的论文部分,就会看到大量的公式计算。
那么,这种方法的效果如何呢?Facebook的研究人员在i7-5930K 、NVIDIA TITAN Xp GPU和Ubuntu16.04的环境下实现了重建系统的配备,其中深度图的分辨率为960×640像素,RGB图像的分辨率为1224×1024像素。包括深度提取,深度融合,几何使用双轮廓提取,纹理生成在内的重建系统可以在在大约37Hz的频率下运行;在使用12个线程时,系统可以以大约70Hz估算RGB图像中的AprilTag位置。
另外,对于边界提取的特征计算在大约38Hz的频率下运行;边界分割优化的吞吐量是每秒60k像素,640×480像素的特征通道集需要约5.12秒进行分割,在700帧下重建一面面积大约0.5平方米的镜子大约需要90秒,而且单个镜面观察的几何误差基本始终为零。
这种方法当然也有它的局限性,首先它对于无框镜面或者遮挡镜面的边缘识别并不好;再者,由于它对镜面的识别完全基于AprilTag,如果输入装置没有观测到或者无法识别图像质量很差的AprilTag,那对于镜面的重建就会出现问题。比如虽然这种方法可以在单个的观察中精确观测镜面,但它在门、玻璃、或者是弯曲非常严重的表面(凸面镜、凹面镜等)的观测效果很明显更差,就是由于检测到的AprilTag的投影位置变化、扭曲了的缘故;另外,如果扫描装置快速移动,也有可能会造成AprilTag图像的失真,系统无法检测到该图像,导致重建失败。