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
格式的核心差异在于元数据组织方式、像素编码和坐标系约定。
| 格式 | 典型模态 | 元数据组织 | 像素编码 | 坐标系约定 |
|---|---|---|---|---|
| DICOM | CT/MR/PET/US | 每张切片一个文件,标签(Tag)体系 | 多为 16-bit 有符号/无符号整数 | 患者坐标系,含 ImagePositionPatient、ImageOrientationPatient |
| NIfTI | MR/CT/PET | 单文件(.nii)或头+数据(.hdr/.img) | 整数或浮点,scl_slope/scl_inter 缩放 | sform/qform 定义体素到世界坐标映射 |
| NRRD | CT/MR/分割掩膜 | 文本头 + 二进制数据,字段灵活 | 支持多种类型,含 space directions | space origin + space directions 定义 |
| OME-TIFF | WSI/荧光/多通道 | XML 元数据嵌入 TIFF 标签 | 多通道、多分辨率金字塔 | 像素坐标 + 物理尺寸(μm/pixel) |
DICOM 的标签体系最丰富,包含患者信息、设备参数、采集几何、窗宽窗位、重采样间距等。工程读取时,SeriesInstanceUID 用于判断哪些切片属于同一序列,ImagePositionPatient 和 ImageOrientationPatient 用于重建三维体数据。NIfTI 更适合算法处理,头信息简洁,但需要正确解析 sform/qform 才能保证左右方向不颠倒。NRRD 在分割掩膜和科研数据中常见,space directions 字段直接给出体素轴方向。OME-TIFF 是 WSI 的主流格式之一,元数据以 XML 描述通道、层级、物理尺寸,读取时必须按金字塔层级访问。
三、像素编码与工程读取要点
像素编码决定了数值如何从字节还原为物理量。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 标签 Modality 字段判断。DICOM 文件通常以 128 字节前导 + “DICM” 标识开头。
- 解析元数据:提取像素间距、层厚、方向、缩放系数、序列描述。这些字段决定后续几何操作是否正确。
- 还原像素值语义:CT 还原 HU,PET 还原 SUV,MR 保留相对强度并记录序列类型,WSI 记录染色与物理尺寸。
- 建立统一坐标:将不同来源的数据映射到同一世界坐标系,记录仿射矩阵和方向约定。
- 验证读取结果:检查数值范围是否符合模态预期(如 CT 的 HU 范围、PET 的 SUV 范围),检查方向标记是否与解剖一致,检查层间距是否均匀。
判断读取是否正确,最直接的方法是观察数值分布和方向标记。例如 CT 数据中空气应接近 -1000 HU,水接近 0 HU;如果整幅图数值集中在 0~4095,说明没有做 HU 还原。NIfTI 数据可以用仿射矩阵乘以体素坐标,验证原点是否落在合理解剖位置。WSI 可以读取一个低分辨率 level,确认组织轮廓和染色颜色正常。
总结来说,模态回答“像素值是什么物理量”,格式回答“元数据和像素如何组织”,工程读取回答“如何正确还原并统一到可计算的坐标与数值空间”。三者缺一不可,任何一环出错,后续处理都建立在错误前提上。