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 数据把二维纹理与三维几何绑定在同一像素网格上,这是它相对纯单目或纯激光的核心优势。但它并非“完美深度”,其特点可归纳为以下几点。
- 稠密但非全可靠:深度图通常与彩色图同分辨率,但每个像素的置信度不同,边缘、高光、透明与吸光表面容易出错。
- 量程有限:多数消费级相机有效范围约 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) 得到对齐深度
四、噪声与缺失值处理:从原始深度到可用深度
原始深度图不能直接送入 SLAM 或语义网络,必须先做噪声抑制与缺失值处理。常见噪声包括:边缘处的飞点(前景背景混合)、镜面与透明物体的无效值、远距离的随机跳变,以及深度量化带来的阶梯效应。
工程上通常采用“先剔除、再滤波、后补全”的策略:
- 有效性掩膜:将深度值为 0 或超出量程的像素标记为无效,后续所有几何计算跳过这些像素。
- 双边滤波 / 引导滤波:在保留边缘的同时平滑深度,引导图可用彩色图,避免跨物体边界过度平滑。
- 形态学闭运算:填补小面积空洞,但核不宜过大,否则会模糊真实几何边界。
- 空洞补全:对较大缺失区域,可用邻域有效深度插值,或结合彩色图像做联合补全;在语义SLAM中也可直接标记为“未知”,避免引入虚假几何。
- 时间滤波:对静态场景,多帧深度加权平均可显著降低随机噪声;对动态场景则需先做运动补偿。
五、案例与复盘:一个典型的对齐失败排查
某室内语义SLAM项目使用 RealSense D435,发现彩色图上物体边缘与深度边缘错位约 5 像素,导致语义标签投影到点云时出现“彩色标签漂移”。排查过程如下:
- 检查标定文件:发现外参使用的是出厂默认值,未做现场标定。
- 重新采集棋盘格,执行 stereoCalibrate,得到新的 R、t。
- 用 remap 重新对齐后,边缘错位降至 1 像素以内。
- 进一步开启时间同步,避免运动物体造成的动态错位。
复盘结论:RGB-D 系统的精度上限由标定与同步决定,算法层面的滤波与补全只能在此基础上做有限改善。标定不是一次性任务,温度变化、碰撞与镜头更换后都应重新验证。