2. RGB-D传感器基础

RGB-D相机是语义SLAM系统最常用的感知前端,它同时输出彩色图像与逐像素深度。理解深度如何被测量、数据有哪些固有缺陷、如何把像素坐标映射到三维空间,是后续建图、语义分割与位姿估计的前提。本节围绕深度成像原理、RGB-D数据特点、内外参标定以及噪声与缺失值处理四个核心问题展开。

一、深度相机原理:三种主流测距方式

深度相机获取距离的方式主要有三类,它们决定了数据的精度分布与失效场景。

  • 结构光(Structured Light):红外投影器向场景投射已知编码图案,红外相机接收被物体表面调制后的图案,通过三角测量计算深度。代表产品为早期 Kinect v1、RealSense SR 系列。近距离精度高,但强光下红外图案被淹没,室外基本失效。
  • 飞行时间(ToF, Time-of-Flight):发射调制红外光,测量光往返的相位差或飞行时间,直接得到距离。代表产品为 Kinect v2、Azure Kinect。帧率高、中远距离稳定,但存在多路径干扰与相位包裹问题。
  • 主动立体视觉(Active Stereo):左右两个红外相机加一个红外纹理投影器,投影器为无纹理表面补充纹理,再通过立体匹配求视差。代表产品为 RealSense D435、D455。深度质量依赖纹理与基线,室外可用性优于结构光。

无论哪种方式,深度图与彩色图都来自不同物理位置的传感器,因此必须通过标定建立二者之间的几何对应关系,才能生成对齐的 RGB-D 数据。

RGB-D 深度成像与坐标映射链路 场景表面 纹理 / 反射率 RGB-D 传感器 红外发射器 结构光 / ToF 深度接收器 IR 相机 彩色相机 RGB 图像 深度计算单元 视差 / 相位 深度图 D(u,v) 单位:mm / m 彩色图 I(u,v) RGB 三通道 像素 → 三维:Z = D(u,v),X = (u−cx)·Z / fx,Y = (v−cy)·Z / fy 内参 K = {fx, fy, cx, cy} 决定反投影;外参 [R|t] 决定相机间对齐

二、RGB-D数据特点:优势与固有缺陷

RGB-D 数据把二维纹理与三维几何绑定在同一像素网格上,这是它相对纯单目或纯激光的核心优势。但它并非“完美深度”,其特点可归纳为以下几点。

  • 稠密但非全可靠:深度图通常与彩色图同分辨率,但每个像素的置信度不同,边缘、高光、透明与吸光表面容易出错。
  • 量程有限:多数消费级相机有效范围约 0.3~5 m,超出后深度值饱和或直接置零。
  • 视场与分辨率不匹配:深度相机与彩色相机的 FOV、分辨率常不同,需裁剪或重投影才能逐像素对齐。
  • 时间同步要求高:动态场景中若深度与彩色帧不同步,运动物体边缘会出现“彩色-深度错位”。
  • 数据量大:30 fps、640×480 的深度加彩色,原始数据约 27 MB/s,对传输与实时处理提出要求。
数据维度 典型形式 常见问题 处理方向
彩色图 8UC3,BGR/RGB 曝光变化、运动模糊 白平衡、去噪、时间对齐
深度图 16UC1(mm)或 32FC1(m) 缺失值、飞点、边缘膨胀 滤波、补全、置信度掩膜
内参 fx, fy, cx, cy, 畸变系数 标定误差导致反投影偏移 棋盘格标定、重投影验证
外参 R, t(深度→彩色) 对齐错位、视差残留 联合标定、对齐检查

三、内外参标定:把像素变成可信的三维点

内参描述相机自身的投影模型,外参描述两个相机之间的刚体变换。标定的目标是让“深度像素反投影出的三维点”与“彩色像素”在同一坐标系下严格对应。

内参标定常用张正友棋盘格法:拍摄多张不同姿态的棋盘格,检测角点,求解单应矩阵,再分解得到内参与畸变系数。外参标定则在已知内参基础上,利用同一棋盘格在深度与彩色图像中的对应点,求解 R 与 t。典型流程如下:

# 以 OpenCV 为例的标定与对齐流程
1. 采集 15~25 张棋盘格图像(覆盖画面四角与不同距离)
2. cv2.findChessboardCorners() 提取角点
3. cv2.calibrateCamera() 求内参 K 与畸变 D
4. cv2.stereoCalibrate() 求深度-彩色外参 R, t
5. cv2.stereoRectify() + cv2.initUndistortRectifyMap() 生成对齐映射
6. 运行时:cv2.remap(depth, mapx, mapy) 得到对齐深度
标定质量可用“重投影误差”衡量:内参标定通常要求平均重投影误差小于 0.3 像素;外参对齐后,应检查棋盘格边缘在彩色与深度上的错位是否小于 1 像素。若误差偏大,优先检查棋盘格平整度、光照均匀性与角点检测是否稳定。

四、噪声与缺失值处理:从原始深度到可用深度

原始深度图不能直接送入 SLAM 或语义网络,必须先做噪声抑制与缺失值处理。常见噪声包括:边缘处的飞点(前景背景混合)、镜面与透明物体的无效值、远距离的随机跳变,以及深度量化带来的阶梯效应。

工程上通常采用“先剔除、再滤波、后补全”的策略:

  1. 有效性掩膜:将深度值为 0 或超出量程的像素标记为无效,后续所有几何计算跳过这些像素。
  2. 双边滤波 / 引导滤波:在保留边缘的同时平滑深度,引导图可用彩色图,避免跨物体边界过度平滑。
  3. 形态学闭运算:填补小面积空洞,但核不宜过大,否则会模糊真实几何边界。
  4. 空洞补全:对较大缺失区域,可用邻域有效深度插值,或结合彩色图像做联合补全;在语义SLAM中也可直接标记为“未知”,避免引入虚假几何。
  5. 时间滤波:对静态场景,多帧深度加权平均可显著降低随机噪声;对动态场景则需先做运动补偿。
常见误区:为了“好看”而过度补全深度,会把本应缺失的玻璃、镜面区域填上错误深度,导致后续建图出现虚假墙面或语义分割被误导。正确做法是保留置信度信息,让后端优化与语义推理能够区分“真实观测”与“推测补全”。

五、案例与复盘:一个典型的对齐失败排查

某室内语义SLAM项目使用 RealSense D435,发现彩色图上物体边缘与深度边缘错位约 5 像素,导致语义标签投影到点云时出现“彩色标签漂移”。排查过程如下:

  • 检查标定文件:发现外参使用的是出厂默认值,未做现场标定。
  • 重新采集棋盘格,执行 stereoCalibrate,得到新的 R、t。
  • 用 remap 重新对齐后,边缘错位降至 1 像素以内。
  • 进一步开启时间同步,避免运动物体造成的动态错位。

复盘结论:RGB-D 系统的精度上限由标定与同步决定,算法层面的滤波与补全只能在此基础上做有限改善。标定不是一次性任务,温度变化、碰撞与镜头更换后都应重新验证。

本节要点:深度相机通过结构光、ToF 或主动立体获取距离;RGB-D 数据稠密但存在缺失、噪声与对齐问题;内参决定反投影,外参决定彩色-深度对齐;处理顺序应为“有效性掩膜 → 边缘保持滤波 → 谨慎补全 → 时间滤波”。只有把这几步做扎实,后续的语义SLAM与场景理解才有可靠的三维基础。