RGB-D相机基本原理
基本原理
深度相机生成深度图,深度图是图像中每个像素点的深度值,通常以毫米为单位。
它通过测量光线从相机到物体表面的距离,再返回相机的时间或相位差,计算出每个像素的深度信息。
通常,RGB-D 相机由以下组件构成:
- RGB 相机:捕捉彩色图像。
- 红外投影器(IR Emitter):发射红外光(通常为点阵、光栅或结构光)。
- 红外相机(IR Camera):捕捉由投影器发出的红外光反射信号。
- 计算单元:结合 RGB 和 IR 数据计算深度图。
接近传感器
深度相机中的接近传感器主要用于检测物体与相机的距离,提供粗略的距离信息或触发相机的工作流程。它是一种重要的辅助设备,但无法替代深度相机的核心功能(如生成高分辨率的深度图)。在使用过程中,可以根据具体需求选择合适的接近传感器类型,实现优化与集成。
- 距离检测
- 接近传感器可以快速检测物体是否进入相机的工作范围,并提供粗略的距离测量。
- 常用于:
- 触发深度采集过程(节能或优化工作流程)。
- 判断物体是否在相机的有效测量范围内。
- 范围优化
- 检测物体是否超出深度相机的测量范围(例如太近或太远)。
- 在近距离(如小于相机的最小工作距离)或远距离(超出测量上限)时,深度数据可能出现错误或不可靠,接近传感器可以提前识别并发出警告。
- 辅助对焦或视场调整
- 某些深度相机通过接近传感器来优化光学或红外投影的焦点设置,提升数据质量。
- 环境感知
- 在非成像任务中(如机器人避障、自动门控制),接近传感器可以作为一种快速响应机制,触发更复杂的深度感知或其他设备操作。
品牌/型号
kinect
realsense
奥比中光
光鉴
ToF vs. Lidar
**ToF(Time-of-Flight)和激光雷达(LiDAR)**都是基于时间飞行原理的测距技术,用于获取物体与传感器之间的距离。
尽管二者共享相似的基本原理,但它们的具体实现方式、适用场景和硬件架构有显著区别。
1. 基本原理
ToF(时间飞行)
原理:通过测量光脉冲从发射到返回的时间差,计算物体的距离。公式为:
d=2c⋅t
其中 c 为光速,t 为光脉冲的飞行时间。d=c⋅t2d = \frac{c \cdot t}{2}
实现方式:
- 使用调制光源(如红外光或激光)和光电探测器。
- 通常采用面阵传感器(如 CMOS 或 CCD)捕获深度图。
激光雷达(LiDAR)
- 原理:同样基于时间飞行,但多采用高能量、窄束的激光进行测量。
- 实现方式:
- 发射单点激光或激光束,并通过机械或电子方式扫描区域。
- 激光点的反射信号由接收器捕获,测量距离。
- 输出的是点云数据。
2. 数据输出形式
ToF:
- 深度图:
- 每个像素点对应一个深度值(二维平面上的密集深度信息)。
- 适合需要高分辨率的场景。
- RGB-D 数据:
- 可以将深度图与 RGB 图像结合,生成彩色的三维信息。
LiDAR:
- 点云:
输出的是稀疏的三维点云。
每个点有三维坐标 (x,y,z) 和可能的强度值(反射率)。
x,y,zx, y, z
适合大范围、高精度的三维场景重建。
3. 技术特点对比
特性 | ToF | 激光雷达(LiDAR) |
---|---|---|
光源 | 红外光(LED/激光) | 激光(常为 905 nm 或 1550 nm) |
检测方式 | 面阵检测(二维传感器) | 单点或线扫描 |
输出数据 | 深度图(密集) | 点云(稀疏) |
测量范围 | 一般 0.1-10 米,适合近距离 | 通常可达数十米到数百米 |
精度 | 准确性较高(毫米级) | 高精度(毫米到厘米级) |
分辨率 | 高分辨率(与传感器像素数有关) | 较低(取决于扫描点数) |
视场(FOV) | 广视场(通常 > 60°) | 可调(通常视场较窄) |
移动部件 | 无移动部件 | 有(机械 LiDAR)或无(固态 LiDAR) |
成本 | 较低 | 较高 |
关键差异总结
- 分辨率与数据密度:
- ToF 提供的是高分辨率深度图,适合近距离且需要高密度数据的场景。
- LiDAR 输出稀疏点云,适合远距离测量和大范围场景。
- 测量范围:
- ToF 通常用于近距离测量。
- LiDAR 可实现几十米甚至更远的距离测量。
- 硬件复杂度:
- ToF 通常没有机械运动部件,结构简单。
- LiDAR 可能包含机械旋转部件,或者使用更复杂的 MEMS 或光栅扫描技术。
- 成本:
- ToF 的成本较低,适合消费级设备。
- LiDAR 成本较高,多用于工业和高端应用。
选择依据
- 如果需要近距离检测且注重分辨率(如手势识别、工业检测):选择 ToF。
- 如果需要远距离测量且注重场景精确建模(如自动驾驶、测绘):选择 LiDAR。
数据配准
深度相机与RGB 相机通常需要进行外参标定
RGB-D 相机的外参标定是指对 RGB 相机与深度相机之间的位置关系(即旋转矩阵和平移向量)进行标定。这是实现 RGB 图像与深度图像对齐(或融合)的关键步骤。通过外参标定,可以将深度图中的点投影到 RGB 图像上,或者反过来,将 RGB 图像的像素对应到三维空间中。
标定目标
标定的主要目的是获取以下外参:
- 旋转矩阵 R:描述 RGB 相机和深度相机的坐标系之间的旋转关系。
- 平移向量 T:描述 RGB 相机和深度相机坐标系的平移关系。
最终,外参描述为:
标定的步骤
1. 准备工具和环境
- 标定板:常用的是棋盘格或圆点阵列标定板(黑白对比明显)。
- 标定工具:如
OpenCV
的标定模块、ROS
的标定包(如camera_calibration
或rgbd_calibration
)。 - 稳定环境:避免相机或标定板的晃动,确保拍摄过程中的数据质量。
2. 采集标定数据
- 目标:同时获取 RGB 图像和深度图像中标定板的清晰视图。
- 将标定板放置在相机视场范围内,并采集多组数据(一般建议 10-20 组):
- RGB 图像:从 RGB 相机捕捉彩色图像。
- 深度图像:从深度相机捕捉深度图(需与 RGB 图像对齐)。
- 多角度、多位置拍摄:确保标定板覆盖视场的不同区域,避免结果受视场中心点的偏差影响。
3. 标定过程
(1)RGB 相机内参标定
- 使用 RGB 图像中的标定板角点,标定 RGB 相机的内参:
- 焦距 fx,fy
- 主点 cx,cy
- 畸变参数 k1,k2,…
- 使用 OpenCV 的
cv2.calibrateCamera
函数实现。
(2)深度相机内参标定
- 同样基于标定板,标定深度相机的内参。
(3)外参标定
通过标定板角点在 RGB 图像和深度图像中的位置关系,计算两者的外参(旋转矩阵 R 和平移向量 T)。
RR
TT
常用方法:
- 点云匹配法:
- 将深度图转换为点云。
- 将 RGB 图像中的标定板角点对应到点云中,利用 ICP(Iterative Closest Point)算法估算外参。
- 直接标定法:
- 使用
cv2.stereoCalibrate
,将标定板角点作为对应点对输入,直接计算外参。
- 使用
- 点云匹配法:
(4)验证标定结果
- 检查标定结果的准确性:
- 使用外参将深度图像点投影到 RGB 图像,检查对齐效果。
- 若标定结果偏差大,可增加数据集或优化标定过程。
接收器 or 发射器
外参标定主要针对 RGB 相机与深度接收器(深度相机模块)之间的几何关系,与发射器无直接关系。
外参标定与接收器的关系
- 外参标定目标:
- 标定的是**RGB 相机与深度接收器(即深度相机的感应模块)**之间的相对位置和方向。
- 发射器只是深度接收器的辅助组件,其位置通常固定,且不会影响 RGB 与深度模块的几何关系,因此不需要单独标定发射器。
- 标定的原理:
- 使用深度接收器捕获深度图,结合 RGB 相机捕获的彩色图像,通过标定板提取对应点对,计算两者的旋转矩阵 R 和平移向量 T。
为什么发射器不参与外参标定?
- 发射器只负责照明或投影:
- 发射器的作用是辅助接收器生成深度图(例如通过投影图案或测量光传播时间)。
- 它本身并不直接生成深度数据。
- 与 RGB 图像无直接对应关系:
- RGB 图像与深度图的对齐是通过接收器获取的数据完成的,而非发射器。
- 相对位置固定:
- 在大多数 RGB-D 相机中,发射器与接收器的相对位置是出厂前固定的,通常无需额外标定。
数据准确性
待续…
缺失值nan
深度相机(如 Kinect、Intel RealSense 或 Azure Kinect 等)在工作过程中,由于硬件限制、采集环境或处理算法的原因,可能会在生成的深度图或点云数据中产生 NaN 值。这些 NaN 值通常表示传感器在某些像素位置无法测量到有效的深度值。
1. 透明或高反射物体
原因:
- 深度相机的原理通常是红外结构光或 ToF(飞行时间),对于透明物体(如玻璃、水)或高反射物体(如镜子、金属),红外光可能会:
- 穿透透明物体而未返回有效信号。
- 被高反射表面散射,导致接收不到反射信号。
表现:
这些区域的深度值无法被检测到,结果为 NaN 或无效值。
2. 测量范围限制
原因:
- 深度相机通常有一个有效的工作距离范围(例如 0.5 米到 5 米)。如果物体距离传感器太近或太远,设备可能无法正确测量深度值。
表现:
- 超出范围的像素点会被记录为 NaN。
- 近距离(如遮挡物贴近镜头)或远距离(如视野范围外)会导致无效数据。
3. 采集环境中的干扰
原因:
- 环境中的强光(例如阳光直射)会干扰深度相机的红外光,降低传感器的信号质量。
- 雾霾、烟尘或其他粒子散射红外光,也会影响深度测量。
表现:
- 受干扰区域的深度值可能丢失或记录为 NaN。
4. 视角问题和遮挡
原因:
- 视角问题:深度相机的测量方向与物体表面角度不一致,可能导致反射信号过弱或完全丢失。
- 遮挡问题:一个物体遮挡了另一个物体,导致被遮挡区域无法接收到红外信号。
表现:
- 被遮挡或大角度表面的区域会出现 NaN。
5. 数据插值或重建失败
原因:
- 在生成点云或深度图时,某些深度值可能需要插值处理。如果周围没有足够的有效点,插值可能失败,导致 NaN。
表现:
- 插值失败的像素位置为 NaN。
6. 软件或硬件问题
原因:
- 软件问题:传感器驱动、SDK 或中间件(如 ROS)的数据处理过程中出现异常。
- 硬件问题:传感器的光学元件或接收模块损坏,导致信号采集失败。
表现:
- 整体深度数据中可能出现大范围 NaN 或随机分布的 NaN。
7. 校准误差
原因:
- 深度相机在出厂或使用时需要校准。如果校准不准确,会导致测量误差,在某些情况下直接导致 NaN。
表现:
- 某些视野区域深度数据异常,甚至无法测量。
FAQ
待续…