[具身智能-1155]:深度相机伪彩色图像(Pseudo‑color Depth)
深度相机伪彩色图像(Pseudo‑color Depth)
核心:伪彩色图像只是可视化产物,不是深度相机硬件直接输出的数据。硬件输出原始深度图(uint16,单位 mm);伪彩色是软件通过颜色映射表(colormap)**,把距离数值翻译成 RGB 彩色图像,专门给人看的,不能直接拿去做 3D 计算、转点云。
一、原始深度图 vs 伪彩色深度图
表格
| 项目 | 原始深度图(硬件输出) | 伪彩色深度图(可视化) |
|---|---|---|
| 数据类型 | 单通道 CV_16UC1,uint16 |
三通道 RGB,CV_8UC3 |
| 像素含义 | 像素值 = 真实物理距离(毫米) | 颜色只代表远近相对关系,颜色本身没有距离单位 |
| 无效值 | 0 代表无效深度 | 无效区域渲染为黑色 |
| 能否直接转点云 | ✅可以,直接用公式反投影 | ❌不可以,必须还原回原始深度数值 |
| 来源 | 深度相机 SDK 输出、ROS 话题 | Realsense‑Viewer、RViz、OpenCV 软件生成 |
通俗理解:
- 原始深度图:一张数字表格,每个格子写着 “离相机多少毫米”;
- 伪彩色图:给表格涂上颜色,近的涂红,远的涂蓝,方便人肉眼观察,但涂完颜色之后,RGB 像素本身已经丢失毫米数值。
二、颜色映射逻辑(伪彩色生成流程)
输入:原始 16 位深度图,0为无效点
- 过滤无效值(深度 = 0),设置输出为黑色;
- 在有效深度区间
[min_depth,max_depth]做归一化,把距离映射到 0‑255; - 查表(colormap 调色板):每个 0‑255 灰度值对应一组 RGB;
- 输出三通道彩色图像,就是伪彩色深度图。
通用配色习惯(Jet 最常见)
- 红色、橙黄:近处物体
- 绿色、青色:中等距离
- 蓝色、紫色:远处物体
- 黑色:深度无效,无测量结果
注意:颜色对应的距离受
min_depth/max_depth参数影响。同样 1.5 米,映射范围改成 0‑3 米和 0‑10 米,显示出来的颜色完全不一样。不能凭颜色直接读距离,必须看色标条。
常用调色板
- Jet(彩虹):Realsense Viewer、RViz 默认;视觉对比强,但亮度不均匀,容易产生视觉误判CSDN博...。
- Viridis / Plasma / Inferno:科研推荐,亮度单调变化,对色盲友好,工程上越来越多使用CSDN博...。
三、深度相机数据流链路
plaintext
深度相机硬件 → 原始深度图 uint16(mm)
↓
SDK/驱动直接输出原始深度图(给算法、ROS使用)
↓
【软件可视化模块】做颜色映射 → 伪彩色RGB图像(仅用于屏幕显示)
⚠️重点:深度相机不会直接输出伪彩色流。你在 Realsense Viewer 看到的彩色深度画面,是软件实时算出来的可视化画面;USB 线上传输的依然是原始单通道深度数据。
四、Python 示例:原始深度图生成伪彩色
python
运行
import cv2
import numpy as np
# 读取原始深度图 16位PNG,uint16,单位mm
depth_raw = cv2.imread("depth.png", cv2.IMREAD_UNCHANGED)
# 掩码:深度等于0为无效
mask_invalid = (depth_raw == 0)
# 只对有效区域做归一化
depth_valid = depth_raw[~mask_invalid]
d_min, d_max = np.percentile(depth_valid, (5,95)) # 去掉极端异常值
# 归一化到0‑255
norm = np.clip(depth_raw, d_min, d_max)
norm = (norm - d_min) / (d_max - d_min) * 255
norm = norm.astype(np.uint8)
# 伪彩色映射
depth_color = cv2.applyColorMap(norm, cv2.COLORMAP_JET)
# 无效区域设置黑色
depth_color[mask_invalid] = [0,0,0]
cv2.imwrite("depth_pseudo_color.png", depth_color)
五、工程中常见踩坑点
-
❌误区:拿伪彩色 PNG 去做深度图转点云。 伪彩色图像的 R/G/B 像素不是距离,无法还原出原始毫米数值,一定会出错。做算法、SLAM、点云转换,必须使用原始 16 位深度图,不能用伪彩色图。
-
映射范围动态变化。 同样场景,当最大最小距离改变,同一个物理距离渲染出来的颜色会改变,不能靠颜色做定量判断,仅做定性观察。
-
无效值丢失。 做归一化时如果不把深度 = 0 单独掩码处理,0 值会参与归一化计算,黑色空洞会被渲染成彩色。
-
RViz / Realsense Viewer 保存图片。 GUI 截图得到的是伪彩色可视化图片;需要导出真实深度数据,要保存 16bit PNG/NPY,而不是截图。
六、伪彩色的用途
- 调试:快速肉眼观察场景深度分布,看哪些区域空洞、噪声、遮挡;
- 演示、报告可视化;
- 缺陷检测:快速识别深度突变的位置;
- 半透明叠加:把伪彩色叠加在 RGB 原图,同时观察物体纹理与距离信息。
七、一句话总结
伪彩色深度图像是软件可视化产物,不是相机原生输出。它将原始深度图的距离数值通过调色板映射成 RGB 彩色,方便人眼观察;但丢失真实物理距离,不能用于 3D 算法、点云转换。做工程开发,始终使用 uint16 原始深度图,伪彩色只用来调试看效果。
DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。
更多推荐


所有评论(0)