2. 医学影像数据模态与格式

在医学影像数据管线中,模态决定“数据从哪里来、物理量是什么”,格式决定“数据如何被存储、元数据如何被组织、程序如何正确读取”。如果只把影像当成普通图片处理,后续的配准、分割、定量分析和模型训练都会在坐标系、像素值语义或元数据上出错。本节从物理含义、元数据、像素编码和工程读取四个角度,梳理常见模态与格式的关键差异。

一、模态的物理含义:像素值代表什么

不同成像模态的像素值语义完全不同,这是工程处理中最容易被忽略的前提。

  • CT(计算机断层扫描):像素值反映X射线衰减程度,经标定后为HU(Hounsfield Unit)。空气约 -1000 HU,水约 0 HU,骨密度可达 +1000 HU 以上。HU 具有绝对物理意义,因此窗宽窗位(Window Width/Level)只是显示映射,不应改变原始数据。
  • MR(磁共振):像素值反映组织在特定序列下的信号强度,是相对值,没有统一绝对单位。T1、T2、DWI、FLAIR 等序列的对比机制不同,同一组织在不同序列中亮度差异巨大。工程上必须结合序列描述(SeriesDescription、ScanningSequence)判断数据含义。
  • PET(正电子发射断层):像素值反映放射性示踪剂浓度,常用SUV(标准化摄取值)表达。原始存储可能是计数或 Bq/mL,需要结合体重、注射剂量和时间进行换算。PET 常与 CT 融合,形成 PET/CT 双模态数据。
  • US(超声):像素值反映回波强度,受探头频率、增益、深度影响,通常为相对灰度。超声还常包含时间维度(动态帧序列)和空间定位信息(探头姿态),工程读取时需关注帧率与多帧组织方式。
  • 病理WSI(全切片图像):像素值反映染色后组织的光学密度,常见 H&E、IHC 染色。WSI 是金字塔多分辨率结构,单张切片可达数十亿像素,必须按层级(level)和瓦片(tile)读取,不能一次性加载。

二、格式与元数据:DICOM、NIfTI、NRRD、OME-TIFF

格式的核心差异在于元数据组织方式、像素编码和坐标系约定。

格式典型模态元数据组织像素编码坐标系约定
DICOMCT/MR/PET/US每张切片一个文件,标签(Tag)体系多为 16-bit 有符号/无符号整数患者坐标系,含 ImagePositionPatient、ImageOrientationPatient
NIfTIMR/CT/PET单文件(.nii)或头+数据(.hdr/.img)整数或浮点,scl_slope/scl_inter 缩放sform/qform 定义体素到世界坐标映射
NRRDCT/MR/分割掩膜文本头 + 二进制数据,字段灵活支持多种类型,含 space directionsspace origin + space directions 定义
OME-TIFFWSI/荧光/多通道XML 元数据嵌入 TIFF 标签多通道、多分辨率金字塔像素坐标 + 物理尺寸(μm/pixel)

DICOM 的标签体系最丰富,包含患者信息、设备参数、采集几何、窗宽窗位、重采样间距等。工程读取时,SeriesInstanceUID 用于判断哪些切片属于同一序列,ImagePositionPatient 和 ImageOrientationPatient 用于重建三维体数据。NIfTI 更适合算法处理,头信息简洁,但需要正确解析 sform/qform 才能保证左右方向不颠倒。NRRD 在分割掩膜和科研数据中常见,space directions 字段直接给出体素轴方向。OME-TIFF 是 WSI 的主流格式之一,元数据以 XML 描述通道、层级、物理尺寸,读取时必须按金字塔层级访问。

模态—格式—读取要点关系图 模态 CT HU 绝对物理量 MR 信号强度相对值 PET SUV 浓度 US 回波强度/动态帧 病理WSI 光学密度/金字塔 格式 DICOM 标签体系/切片序列 NIfTI sform/qform 坐标 NRRD space directions OME-TIFF XML/多分辨率 工程读取要点 • 按 SeriesInstanceUID 分组,用 ImagePositionPatient 排序 • 读取 RescaleSlope/Intercept 还原 HU • 解析 sform/qform,确认体素轴方向与左右 • 应用 scl_slope/scl_inter 还原物理值 • 读取 space origin/directions 建立世界坐标 • 注意编码类型与端序 • 按 level 和 tile 惰性读取,避免整图加载 • 解析 XML 获取通道、物理尺寸、染色信息 • 统一重采样到目标 spacing,保持方向一致 • 记录模态与像素值语义,避免跨模态混用

三、像素编码与工程读取要点

像素编码决定了数值如何从字节还原为物理量。DICOM 中常见 16-bit 有符号整数,CT 的 HU 还原公式为:

HU = pixel_value * RescaleSlope + RescaleIntercept

例如 RescaleSlope=1、RescaleIntercept=-1024 时,存储值 1024 对应 HU=0(水)。如果忽略这一步,直接把原始像素当 HU 使用,窗宽窗位和阈值分割都会失效。

NIfTI 使用 scl_slope 和 scl_inter 做类似缩放,但很多文件这两个字段为 0 或 1,需要判断后决定是否应用。NRRD 的编码类型在 header 的 type 字段中声明,读取时要按声明类型解析,不能凭文件大小猜测。

WSI 的读取是另一个量级的问题。以 OME-TIFF 为例,一张 40× 扫描的切片通常包含 level 0 到 level 4 的金字塔,level 0 可能是 100000×80000 像素。工程上应使用支持金字塔访问的库(如 OpenSlide、tifffile、pyvips),按需读取指定 level 和 tile,而不是用普通图像库打开整图。读取后还要记录 μm/pixel,否则不同扫描仪的数据无法在物理尺度上对齐。

方向一致性检查:无论 DICOM、NIfTI 还是 NRRD,读取后都应检查体素轴方向与患者左右(L/R)、前后(A/P)、头脚(H/F)的对应关系。常见做法是读取仿射矩阵,确认行列式符号,并在重采样时保持方向一致。方向颠倒会导致左右肺、左右脑区标注错位,且不易从图像外观直接发现。

四、工程读取的通用流程与判断依据

面对一个未知的医学影像数据集,可以按以下顺序处理:

  1. 识别格式与模态:通过文件扩展名、魔数、DICOM 标签 Modality 字段判断。DICOM 文件通常以 128 字节前导 + “DICM” 标识开头。
  2. 解析元数据:提取像素间距、层厚、方向、缩放系数、序列描述。这些字段决定后续几何操作是否正确。
  3. 还原像素值语义:CT 还原 HU,PET 还原 SUV,MR 保留相对强度并记录序列类型,WSI 记录染色与物理尺寸。
  4. 建立统一坐标:将不同来源的数据映射到同一世界坐标系,记录仿射矩阵和方向约定。
  5. 验证读取结果:检查数值范围是否符合模态预期(如 CT 的 HU 范围、PET 的 SUV 范围),检查方向标记是否与解剖一致,检查层间距是否均匀。

判断读取是否正确,最直接的方法是观察数值分布和方向标记。例如 CT 数据中空气应接近 -1000 HU,水接近 0 HU;如果整幅图数值集中在 0~4095,说明没有做 HU 还原。NIfTI 数据可以用仿射矩阵乘以体素坐标,验证原点是否落在合理解剖位置。WSI 可以读取一个低分辨率 level,确认组织轮廓和染色颜色正常。

常见错误:把 DICOM 的原始像素值直接当 HU 使用;忽略 NIfTI 的 sform/qform 导致左右颠倒;用普通图像库一次性加载 WSI 导致内存溢出;跨模态混用像素值语义(如把 MR 信号强度当 CT 的 HU 做阈值)。这些错误在管线早期不易暴露,却会在模型训练或定量分析阶段造成系统性偏差。

总结来说,模态回答“像素值是什么物理量”,格式回答“元数据和像素如何组织”,工程读取回答“如何正确还原并统一到可计算的坐标与数值空间”。三者缺一不可,任何一环出错,后续处理都建立在错误前提上。