前言
最近借到了一款奥比中光的深度相机,型号为Femto Bolt。笔者之前也接触过USB相机、工业摄像机等等,现在正好尝试上手这款相机,学习一下深度相机的使用,记录一下自己的学习过程。
什么是深度相机
我们之前都接触过RGB相机,他获得的图像是一张二维的图像,由三个通道组成,其本质就是储存了数据的一个矩阵而已。那么深度相机和之前的相机相比,有什么区别呢?
深度相机也被称为3D相机,它和普通2D相机的区别在于可以获取物体到相机的距离信息,加之2D平面的X,Y坐标,可计算出每个点的三维坐标,以此我们可推断深度相机的应用,如三维重建、目标定位、导航避障等。普通的彩色相机拍摄到的图片能看到相机视角内的所有物体并记录下来,但是其所记录的数据不包含这些物体距离相机的距离。仅仅能通过图像的语义分析来判断哪些物体离我们比较远,哪些比较近,但是并没有确切的数据。而深度相机则恰恰解决了该问题,通过深度相机获取到的数据,我们能准确知道图像中每个点离摄像头距离,这样加上该点在 2D 图像中的(x,y)坐标,就能获取图像中每个点的三维空间坐标。通过三维坐标就能还原真实场景,实现场景建模等应用。
所以说,深度相机就是泛指一类可以获得深度信息的相机。
深度相机的分类
目前常见的深度相机,他们用的技术可以分为三类:
双目
结构光
ToF(光飞行时间法)
分类方法
双目相机
双目相机的原理是通过左右两个摄像头同时拍摄同一物体,然后利用计算机算法计算两个摄像头之间的视差,从而得出物体的深度信息。
视差是指两个摄像头拍摄同一物体时,物体在两个图像中的位置差异。计算机通过测量这个差异来确定物体离相机的距离。视差类似人的双眼,你单独睁开左、右眼,与同时睁开双眼观看物体的位置、远近是不一样的。
双目相机不主动对外发射光源,因此称为被动深度相机。
优点
不需要结构光、TOF的发射器和接收器,因此结构简单硬件成本低,适合成本敏感的应用场景。因为依靠自然光,可在室内外使用。
缺点
强光、暗光影响较大,因为依赖于自然光。对无纹理的物体或表面影响较大,如纯色墙,因双目相机依据视觉特征进行图像匹配,单一问题会引起匹配失效。
结构光相机
结构光,英文叫做 Structured light,其原理是基本原理是,通过近红外激光器,将具有一定结构特征的光线投射到被拍摄物体上,再由专门的红外摄像头进行采集。这种具备一定结构的光线,会因被摄物体的不同深度区域,而采集不同的图像相位信息,然后通过运算单元将这种结构的变化换算成深度信息,以此来获得三维结构。简单来说就是,通过光学手段获取被拍摄物体的三维结构,再将获取到的信息进行更深入的应用。通常采用特定波长的不可见的红外激光作为光源,它发射出来的光经过 一定的编码投影在物体上,通过一定算法来计算返回的编码图案的畸变来得到物体的位置和深度信息。根据编码图案不同一般有:
条纹结构光,代表传感器 enshape ,
编码结构光,代表传感器 Mantis Vision, Realsense(F200),
散斑结构光 ,代表传感器 apple(primesense), 奥比中光。
典型的结构光相机示意图:
优点
近距离(1米内)精度较高,毫米级。测量范围广、对光线和颜色的敏感度低等。主动投影,适合弱光照使用。
缺点
测量距离和分辨率存在一定的局限性。远距离精度差,随着距离的拉长,精度也随之变差。对环境光的干扰较大,室外强光照不宜使用,强光容易干扰投影光。
ToF
光飞行时间法,顾名思义就是通过测量光飞行时间来取得距离。相机通过发送一束光到目标物体上,这个光的波长通常为红外线。当这束光被目标物体反射回来时,相机的光电二极管(PD)阵列接收反射光,并测量光的时间飞行(ToF)。基于ToF的测量技术可以计算光从相机到物体然后返回相机的时间,从而确定物体的距离。我们使用的Femto Bolt就是利用的这种原理。
优点
因为是依靠投射自身光线的技术,所以它不需要任何外部光源来扫描周围环境,即使在光线很少或没有光线的情况下也能正常工作。TOF的测量距离较远,不受表面灰度和特征影响,达百米,可用于无人驾驶
深度距离计算,不会随距离的变化而变化,稳定在厘米级
不像双目相机、结构光需要经过算法处理才能输出三维数据,TOF可以直接输出被测物体三维数据
缺点
对环境的光强和干扰比较敏感,室外强光照基本不能使用。由于基于飞行时间的技术依赖于发射和接收自身光的反向反射,因此在自然环境中(例如暴露在阳光下)它们可能表现不佳,这是因为其他光源发出的波会干扰相机设备发出的光。类似地,还有其他因素使ToF传感器更难正常工作,如“反光”表面(在不同方向反射光)或角落(产生多次反射)等
三种相机的对比
类别 | 双目 | 结构光 | ToF |
---|---|---|---|
软件复杂度 | 高 | 中等 | 低 |
成本 | 低 | 高 | 中 |
精度 | 低 | 高 | 中 |
低光下性能 | 差 | 好 | 好 |
测距方式 | 被动式 | 主动式 | 主动式 |
户外强光下工作 | 无影响 | 有影响 | 有影响 |
Femto Bolt介绍
简介
了解了三种深度相机的区别,下面我们就来看看我们上手的这款相机:
Femto Bolt 是奥比中光与微软联合打造的一款先进iToF 3D相机。其中深度相机采用了微软最新的先进ToF传感技术,拥有与微软AKDK深度相机完全一致的工作模式和性能表现。Femto Bolt 3D相机整合了包括多模式深度相机、彩色视频相机和惯性传感器在内的多种感知方式,通过单条USB Type-C连接,即可同时实现数据传输和对相机供电。同时Microsoft推荐使用Femto Bolt作为Azure Kinect DK的替代选择。详情可参阅:Microsoft’s Azure Kinect Developer Kit Technology Transfers to Partner Ecosystem。Femto Bolt可在Femto Bolt 购买链接中购买。
同时,奥比中光还提供了配套的Orbbec SDK,供开发者使用,这也是我们后续需要学习的。
SDK 介绍(来自官网)
Orbbec SDK 功能
Orbbec SDK 是 Orbbec Femto Bolt 的原生 SDK,能够使用 Femto Bolt 的全部功能:
深度相机访问,分辨率、帧率控制(包括被动 IR 模式)。
RGB 相机的访问,分辨率、帧率及图像效果控制(例如曝光、白平衡、镜像)。
IMU(陀螺仪和加速度传感器)访问,不同采样率及量程控制。
深度和 彩色相机硬件同步及 SDK 侧的软件同步(基于数据帧时间戳进行匹配实现软同步),相机之间的延迟可配置。
外部设备同步控制,设备之间的延迟偏移量可配置。
Free Run 模式可实现深度和彩色相机不同帧率配置。
用于处理图像分辨率、时间戳等的相机帧元数据访问。
设备校准数据访问。
彩色图像格式转换、点云数据生成等实用 Filter。
与 彩色对齐的深度数据流输出(即 D2C,输出的深度坐标系及图像分辨率与 RGB 一致)
完整设置信息获取(设备名、固件版本、SN、设备温度等)
数据录制功能支持数据压缩。
C / C++ 原生 API 及 Python、ROS1、ROS2、Android 等不同语言或系统 wrapper
此外,Orbbec SDK 还支持目前奥比几乎所有主流相机。
总结
通过这篇文章,我们了解了什么是深度相机和三种深度相机的区别,也粗略了解了Femto Bolt相机的功能。下一篇文章,笔者将实际上手这款相机的基本使用。