最近导师让我查一查深度相机相关的东西,所以就对SLAM中用到的相机进行了简单的整理。
1.单目相机
即我们平时最常见的相机类型,手机、电脑、相机等等都是这种类型。如下是小米MIX 3手机的摄像头。
(1)成像原理
成像基于小孔成像模型,关于小孔成像模型,在之前的这篇博客中有详细的介绍。 在成像方式上,比较常见的有CCD(电荷耦合器件,Charge Coupled Device)和CMOS(Complementary Metal-Oxide-Semiconductor,互补金属氧化物半导体)两种方式,两种方式有什么优劣和区别,这方面的资料网上有很多。可以参考下面两个网页,写的比较好:
在接受光照之后,感光元件产生对应的电流,电流大小与光强对应,因此感光元件直接输出的电信号是模拟的。在CCD传感器中,每一个感光元件都不对此作进一步的处理,而是将它直接输出到下一个感光元件的存储单元,结合该元件生成的模拟信号后再输出给第三个感光元件,依次类推,直到结合最后一个感光元件的信号才能形成统一的输出。
由于感光元件生成的电信号实在太微弱了,无法直接进行模数转换工作,因此这些输出数据必须做统一的放大处理。这项任务是由CCD传感器中的放大器专门负责,经放大器处理之后,每个像点的电信号强度都获得同样幅度的增大。但由于CCD本身无法将模拟信号直接转换为数字信号,因此还需要一个专门的模数转换芯片进行处理,最终以二进制数字图像矩阵的形式输出给专门的中央控制器处理芯片。
相比而言CMOS传感器中每一个感光元件都直接整合了放大器和模数转换逻辑(ADC),当感光二极管接受光照、产生模拟的电信号之后,电信号首先被该感光元件中的放大器放大,然后直接转换成对应的数字信号。
CCD和CMOS的工作原理有一个共通点,那就是都是用光敏二极管来作为光-电信号的转化元件。它们每个感光元件的像素点分别对应图像传感器中的一个像点,由于感光元件只能感应光的强度,无法捕获色彩信息,因此彩色CCD/CMOS图像传感器必须在感光元件上方覆盖彩色滤光片。在这方面,不同的传感器厂商有不同的解决方案,最常用的做法是覆盖RGB红绿蓝三色滤光片,以1:2:1的构成由四个像点构成一个彩色像素(即红蓝滤光片分别覆盖一个像点,剩下的两个像点都覆盖绿色滤光片),这种解决方案就是大名鼎鼎的贝尔滤镜,如下。采用贝尔插值可以分别获得RGB三个分量的灰度信息。
2.双目相机
在SLAM中,除了单目相机之外,还有一种很常见的相机类型——双目相机。双目相机其实就是按照某种相对位置摆放的两个普通相机,成像模型、成像方式都是一样的。双目相机相比于单目相机,多了基线信息。所谓基线信息即是两个相机光心之间的距离。
在已知基线长度和相机内参的条件下,即可以根据两个相机中拍摄的同一物体的视差计算出物体的深度信息。
(1)双目深度计算原理
有一个空间点P,在左眼和右眼影像上的坐标记为\(P_{L}\)、\(P_{R}\),理想情况下,认为相机只在x轴上有位移,因此P点也只在图像的u轴上有差异。记它的左侧坐标为\(u_{L}\)、右侧为\(u_{R}\)。根据\(△PP_{L}P_{R}\)和\(△PO_{L}O_{R}\)的相似关系,有:
\[\frac{z-f}{z}=\frac{b-u_{L}+u_{R}}{b}\]整理可得:
\[z=\frac{fb}{d},d=u_L-u_R\]d为左右图的横坐标之差,即视差(Disparity)。在实际计算中由于像素坐标都为整数,因此视差最小为一个像素,因此双目的深度存在一个理论上能分辨的最大值,即由fb确定。当物体距离大于这个值的时候,双目相机无法分辨出距离远近。当基线越长时,双目能测到的最大距离就会越远;反之就会越近。小型双目器件只能测量很近的距离。
3.深度相机
深度相机又称RGB-D相机,是从2010年左右开始兴起的一种相机,它的最大特点是可以通过红外结构光或Time-of-Flight(ToF)原理,像激光传感器一样通过主动向物体发射光并接收返回的光,测出物体与相机之间的距离。相比于双目相机通过软件计算,深度计算通过物理的测量手段获得深度,所以可以节省大量的计算。目前常用的RGB-D相机有微软的Kinect、英特尔的RealSense等。但受限于传感器的精度以及测量范围,深度相机还存在测量范围窄、噪声大、视野小、易受日光干扰、无法测量透射材质等诸多问题。在SLAM中主要用于室内,室外则较难应用。相关参考资料:
- 人脸识别中的3D结构光和ToF有什么不同?技术原理和优缺点总结
- Time of Flight Cameras: Principles, Methods, and Applications
- 一文带你读懂,人脸识别原理,以及部分手机采用的3D结构光原理
- 【深度相机系列四】深度相机原理揭秘–结构光(iPhone X 齐刘海原理),这个博客里面的内容都很不错,有挺多跟计算机视觉和SLAM相关的东西,值得一看
- 深度相机原理揭秘–双目立体视觉
(1)3D结构光(Structured Light)
3D结构光技术的基本原理是,通过近红外激光器,将具有一定结构特征的光线投射到被拍摄物体上,再由专门的红外摄像头进行采集。这种具备一定结构的光线,会因被摄物体的不同深度区域,而采集不同的图像相位信息,然后通过运算单元将这种结构的变化换算成深度信息,以此来获得三维结构。简单来说就是,通过光学手段获取被拍摄物体的三维结构,再将获取到的信息进行更深入的应用。
(2)ToF(Time of Flight)
ToF是3D深度摄像头的其中一种方案。ToF测距有单点和多点两种,其中手机上一般会用多点测距。多点测距的原理和脉冲的单点测距类似,但是其收光器件为CCD,即带电荷保持的光敏二极管阵列,对光响应具有积分特性。基本原理是激光源发射一定视野角激光,其中激光时长为dt(从t1到t2),CCD每个像素利用两个同步触发开关S1(t1到t2)、S2(t2到t2+dt)来控制每个像素的电荷保持元件采集反射光强的时段,得到响应C1、C2。物体距离每个像素的距离L=0.5cdt*c2/(c1+c2),其中c是光速(该公式可以去除反射物反光特性差异对测距的影响)。简单来说就是,发出一道经过处理的光,碰到物体以后会反射回来,捕捉来回的时间,因为已知光速和调制光的波长,所以能快速准确计算出到物体的距离。
下表即是结构光与ToF的对比。
本文作者原创,未经许可不得转载,谢谢配合