You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

解读无符号短整型深度图数值:lineMOD数据集深度值如何转[0,1]浮点格式

LineMOD数据集深度值单位确认

LineMOD数据集中存储的unsigned short类型深度值确实是以毫米为单位的真实物理深度,你观察到的零值就是无效像素,对应深度超出相机检测范围、表面反光或遮挡导致无法采集有效深度的区域,这部分像素在后续所有处理中都需要先做掩膜排除,不要参与计算。

深度值转换方案

你可以根据自身使用场景选择对应的转换逻辑:

场景1:转换为[0,1]区间浮点表示

你之前直接除以unsigned short最大值65535不符合预期的原因是,LineMOD采集场景的有效深度量程本身远小于16位无符号整型的最大值,数据集全局有效深度上限为4000(即4米),和你观测到的单图最大3399的情况匹配。正确转换步骤如下:

  • 先构建有效像素掩膜,过滤掉所有值为0的无效像素
  • 选择归一化分母:如果要保证全数据集尺度统一,直接用固定值4000作为分母;如果只需要单图自适应归一化,用当前图有效像素的最大值作为分母
  • 执行归一化计算:float_normalized_depth = static_cast<float>(depth_value) / 分母,无效像素统一保留为0即可

场景2:生成点云前的深度转换

生成点云不需要做[0,1]归一化,直接基于物理深度值配合相机内参计算三维坐标即可,步骤如下:

  • 先将毫米单位的unsigned short深度值转换为米单位的浮点值(大部分三维处理框架默认点云单位为米):depth_m = static_cast<float>(depth_value) * 0.001f
  • 结合相机内参计算三维坐标,其中fx/fy为相机焦距,cx/cy为光心像素坐标,u/v为当前像素的列/行索引:
    z = depth_m
    x = (u - cx) * z / fx
    y = (v - cy) * z / fy
    
  • 所有原始深度为0的像素直接跳过,不生成对应点云

如果是做深度图输入的目标检测算法预处理,建议统一用4000作为归一化分母,避免不同图像之间的深度分布差异影响模型效果。

内容的提问来源于stack exchange,提问作者John Katsantas

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 19:27:02