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

TensorFlow IO DICOM Reader读取值翻倍问题求助

DICOM文件读取数值异常问题排查与解决建议

从TCIA获取的DICOM文件,使用TensorFlow 2.3和TensorFlow IO 0.16,通过以下代码读取后,图像数值为正确值的两倍,需手动除以2才能恢复正常。可正常读取教程中的胸片,但无法确认当前DICOM是否存在同类问题,寻求解决办法:

image_bytes = tf.io.read_file(fname )
image = tfio.image.decode_dicom_image(image_bytes, dtype=tf.uint16, on_error = 'lossy')
im = image.numpy () [0, :, :, 0].astype (np.uint16)

排查与解决方向:

  • 检查DICOM元数据的Rescale Slope和Rescale Intercept标签:部分DICOM会通过这两个参数校准像素值,TensorFlow IO的decode_dicom_image默认未自动应用这些参数,可能导致数值偏差。用pydicom读取元数据确认:
    import pydicom
    ds = pydicom.dcmread(fname)
    print(f"Rescale Slope: {ds.RescaleSlope}, Rescale Intercept: {ds.RescaleIntercept}")
    
    若Rescale Slope为2,需将读取后的像素值除以该斜率得到真实值。
  • 升级TensorFlow IO版本:0.16属于较旧版本,可能存在DICOM解码bug,尝试升级到0.20+版本,新版本对DICOM标签处理更完善。
  • 验证数据类型匹配:检查DICOM原始像素数据类型,若为uint8但代码指定dtype=tf.uint16,可能导致数值自动缩放,可改为dtype=tf.uint8测试。
  • 对比标准工具结果:用pydicom读取校准后的值,与TensorFlow IO读取结果对比,确认偏差来源:
    # pydicom读取校准后的值
    im_pydicom = ds.pixel_array * ds.RescaleSlope + ds.RescaleIntercept
    # 对比TensorFlow IO读取的im
    print(np.allclose(im / 2, im_pydicom))
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 20:32:41