深度相机伪彩色图像(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为无效点

  1. 过滤无效值(深度 = 0),设置输出为黑色;
  2. 在有效深度区间 [min_depth,max_depth] 做归一化,把距离映射到 0‑255;
  3. 查表(colormap 调色板):每个 0‑255 灰度值对应一组 RGB;
  4. 输出三通道彩色图像,就是伪彩色深度图。

通用配色习惯(Jet 最常见)

  • 红色、橙黄:近处物体
  • 绿色、青色:中等距离
  • 蓝色、紫色:远处物体
  • 黑色:深度无效,无测量结果

注意:颜色对应的距离受min_depth/max_depth参数影响。同样 1.5 米,映射范围改成 0‑3 米和 0‑10 米,显示出来的颜色完全不一样。不能凭颜色直接读距离,必须看色标条

常用调色板

  1. Jet(彩虹):Realsense Viewer、RViz 默认;视觉对比强,但亮度不均匀,容易产生视觉误判CSDN博...。
  2. 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)

五、工程中常见踩坑点

  1. ❌误区:拿伪彩色 PNG 去做深度图转点云。 伪彩色图像的 R/G/B 像素不是距离,无法还原出原始毫米数值,一定会出错。做算法、SLAM、点云转换,必须使用原始 16 位深度图,不能用伪彩色图。

  2. 映射范围动态变化。 同样场景,当最大最小距离改变,同一个物理距离渲染出来的颜色会改变,不能靠颜色做定量判断,仅做定性观察。

  3. 无效值丢失。 做归一化时如果不把深度 = 0 单独掩码处理,0 值会参与归一化计算,黑色空洞会被渲染成彩色。

  4. RViz / Realsense Viewer 保存图片。 GUI 截图得到的是伪彩色可视化图片;需要导出真实深度数据,要保存 16bit PNG/NPY,而不是截图。

六、伪彩色的用途

  1. 调试:快速肉眼观察场景深度分布,看哪些区域空洞、噪声、遮挡;
  2. 演示、报告可视化;
  3. 缺陷检测:快速识别深度突变的位置;
  4. 半透明叠加:把伪彩色叠加在 RGB 原图,同时观察物体纹理与距离信息。

七、一句话总结

伪彩色深度图像是软件可视化产物,不是相机原生输出。它将原始深度图的距离数值通过调色板映射成 RGB 彩色,方便人眼观察;但丢失真实物理距离,不能用于 3D 算法、点云转换。做工程开发,始终使用 uint16 原始深度图,伪彩色只用来调试看效果。

Logo

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。

更多推荐