[具身智能-1152]:深度相机模组输出是什么?是双目图像,还是混合后的图像?混合的算法是?深度图的格式?
深度相机模组的输出、算法与深度图格式
深度相机模组不是输出 "混合后的图像",而是同时输出多路独立数据流(彩色图、深度图、红外图、点云等)。所谓 "混合" 其实是深度图与彩色图的配准对齐,或者是左右目图像经过立体匹配算法算出深度图。下面拆开讲。
一、深度相机模组输出什么
深度相机模组(如 Intel Realsense、Azure Kinect、ZED、奥比中光)通常同时输出以下多路数据,用户可以按需取:
表格
| 输出流 | 数据类型 | 说明 |
|---|---|---|
| 彩色图像 (Color) | H×W×3 RGB | 普通摄像头画面,和单目相机输出一样 |
| 深度图 (Depth) | H×W 单通道 | 每个像素值 = 该点到相机的距离,这是核心输出 |
| 红外图像 (IR) | H×W 灰度 | 结构光 / 双目模组的左右红外摄像头原始画面,用于调试 |
| 点云 (PointCloud) | N×(X,Y,Z,R,G,B) | 可选输出,把深度图 + 彩色图直接转成 3D 点云,有些模组固件直接输出 |
| 置信度图 (Confidence) | H×W 单通道 | 每个像素深度值的可信度,0 = 不可靠,用于过滤坏点 |
| IMU 数据 | 加速度 + 角速度 | 部分模组 内置 IMU,用于运动补偿 |
关键:这些数据流是独立的,可以单独取,也可以组合取。 不是 "混成一张图" 输出。
二、深度是怎么算出来的:三类技术路线的算法
深度相机模组内部有一颗专用芯片(ASIC/FPGA/SoC),实时运行深度计算算法。不同技术路线,算法完全不同:
路线 1:双目立体视觉深度相机
代表:ZED、Realsense D435/D455(部分模式)
算法流程:
plaintext
左目红外图像 ─┐
├→ 立体匹配算法(SGBM/AD-Census等) → 视差图 → Z=f×B/d → 深度图
右目红外图像 ─┘
- 左右两个红外摄像头同时拍照;
- 内置芯片跑立体匹配算法(和之前问的双目测距原理一样);
- 算出视差 → 三角公式算深度;
- 输出深度图。
这种模组的 "深度算法" 就是立体匹配,和 PC 端纯双目方案用的算法一样,只是跑在相机内部芯片上。
路线 2:结构光深度相机
代表:iPhone FaceID、Realsense D415、旧版 Kinect v1、奥比中光
算法流程:
plaintext
红外投射器 → 向空间投射固定编码图案(激光散斑/条纹)
↓
红外摄像头 → 拍摄被物体调制后的变形图案
↓
图案解码算法 → 每个像素的视差 → 三角测距 → 深度图
- 主动投射一个已知编码的红外图案(比如随机散斑、格雷码条纹);
- 图案打在物体上会变形,红外摄像头拍下来;
- 算法对比 "原始图案" 和 "变形后图案",算出每个点的视差;
- 再用三角公式算深度。
结构光的优势:解决了双目 "无纹理区域匹配失败" 的问题—— 白墙也能被投射上图案,有纹理就能匹配。
路线 3:ToF 深度相机
代表:Kinect v2、Azure Kinect、Realsense L515
算法流程:
plaintext
红外LED/激光器 → 发射调制光(正弦波/脉冲)
↓
物体反射 → ToF传感器接收
↓
相位差/飞行时间测量 → 深度图
- 主动发射调制红外光;
- 传感器测量发射光和接收光的相位差(间接 ToF)或飞行时间(直接 ToF);
- 相位差 → 距离,直接算出每个像素的深度。
ToF 不需要立体匹配,每个像素独立测距,原理和激光雷达类似,只是面阵化了。
三、"混合" 到底是什么:深度图与彩色图配准
用户说的 "混合图像",通常指的是深度图和彩色图对齐(Registration/Alignment)。
为什么需要配准
- 深度摄像头和彩色摄像头不是同一个镜头,位置不同(有基线);
- 深度图的像素坐标系和彩色图的像素坐标系不一致;
- 同一个物体,在深度图里的 (x,y) 和在彩色图里的 (x,y) 不是同一个物理点。
配准算法
plaintext
深度图的每个像素 (u_d, v_d, Z)
↓ 用深度相机内参 → 3D坐标 (X,Y,Z)
↓ 用深度相机→彩色相机的外参(旋转R+平移T) → 彩色相机坐标系下的3D坐标
↓ 用彩色相机内参 → 彩色图像素坐标 (u_c, v_c)
↓
把深度值Z赋值给彩色图的 (u_c, v_c) 像素
↓
输出:和彩色图对齐的深度图(分辨率、坐标系与彩色图一致)
- 这是一个坐标变换过程,不是图像融合;
- 配准后,深度图和彩色图逐像素一一对应,可以直接合成 RGBD 图像(每个像素 = R,G,B,Depth);
- 大部分深度相机 SDK(如 Realsense 的
align_to)一键完成配准。
通俗理解:深度摄像头和彩色摄像头是 "两只位置不同的眼睛",配准就是把两只眼睛看到的东西对齐到同一个视角,让 "深度值" 和 "颜色值" 对应到同一个物体点。
四、深度图的格式(重点)
1. 数据类型与单位
表格
| 格式 | 数据类型 | 单位 | 无效值 | 典型代表 |
|---|---|---|---|---|
| uint16 深度图 | 16 位无符号整数 | 毫米 (mm) | 0 | Realsense、OpenNI、大多数 SDK |
| float32 深度图 | 32 位浮点数 | 米 (m) | 0.0 或 NaN | PCL 点云库、部分研究代码 |
| uint8 归一化 | 8 位无符号整数 | 0~255 映射 | 0 | 仅用于可视化,不是真实深度 |
最常用的是 uint16 + 毫米单位:
- 像素值 = 1000 → 距离 1000mm = 1m;
- 像素值 = 0 → 该像素深度无效(匹配失败 / 超出量程 / 被遮挡);
- 最大量程通常 10000mm(10m)以内,uint16 足够(最大 65535mm=65m)。
2. OpenCV 中的格式
cpp
运行
// 深度图在OpenCV中通常是
CV_16UC1 // 16位无符号,单通道,单位毫米
// 或
CV_32FC1 // 32位浮点,单通道,单位米
3. 点云格式
深度图可以直接转成点云:
plaintext
对每个像素 (u, v),深度值 Z:
X = (u - cx) × Z / fx
Y = (v - cy) × Z / fy
Z = Z
输出 N×6 的数组:每个点 = (X, Y, Z, R, G, B),即带颜色的 3D 点云。
常见存储格式:.pcd(PCL 库)、.ply(通用三维格式)、.bag(ROS 录制包)。
4. 深度图可视化
- 深度图本身是 16 位单通道,直接显示是几乎全黑(因为值都在 0~ 几千,显示范围 0~255);
- 可视化时需要伪彩色映射:把深度值映射成彩虹色(近 = 红 / 黄,远 = 蓝 / 紫);
- OpenCV 的
applyColorMap或 Realsense SDK 自带彩色化功能。
五、一张表总结三类深度相机
表格
| 维度 | 双目立体视觉 | 结构光 | ToF |
|---|---|---|---|
| 代表 | ZED、Realsense D435 | FaceID、D415、Kinect v1 | Kinect v2、L515 |
| 深度算法 | 立体匹配 | 图案解码 + 三角测距 | 相位 / 时间测量 |
| 主动发光 | 否(被动) | 是(红外图案) | 是(调制红外光) |
| 无纹理区域 | 失效(白墙) | 有效(投射图案) | 有效 |
| 有效距离 | 0.3~20m | 0.3~5m | 0.3~10m |
| 深度图分辨率 | 最高(和红外一致) | 中 | 中(受 ToF 传感器限制) |
| 室外阳光 | 较好(但依赖光照) | 差(阳光淹没图案) | 差(阳光干扰) |
| 输出 | 深度图 + 左右 IR + 彩色 | 深度图 + IR + 彩色 | 深度图 + IR + 彩色 |
六、一句话总结
深度相机模组输出多路独立数据流(彩色图、深度图、红外图、可选点云),不是 "混合图像"。深度由相机内部芯片运行算法算出 —— 双目路线用立体匹配、结构光路线用图案解码 + 三角测距、ToF 路线用相位 / 时间测量。深度图最常用 uint16 单通道格式,单位毫米,0 表示无效值。所谓 "混合" 是深度图与彩色图的配准对齐,让深度值和颜色值逐像素对应,方便合成 RGBD 数据或点云。
DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。
更多推荐



所有评论(0)