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

在医学影像预处理与标准化工程中,第一步永远不是滤波、配准或归一化,而是“把数据正确地读进来,并理解它到底是什么”。不同模态的成像物理决定了像素/体素的物理含义,不同格式的封装方式决定了工程读写时必须处理哪些元数据。若把 CT 的 HU 值当成普通灰度、把 MRI 的 12 位强度直接除以 255、把 PET 的 SUV 当原始计数使用,后续所有处理都会建立在错误前提上。本节从模态特性与格式读写两条线展开,并给出可直接落地的工程要点。

一、五种模态的像素/体素特性

CT 是定量模态。重建后像素值经标定转换为 Hounsfield 单位(HU),空气约 −1000 HU,水为 0 HU,致密骨可达 +1000 HU 以上。工程上必须读取 RescaleSlope 与 RescaleIntercept,按 HU = pixel × slope + intercept 还原,不能直接使用存储的原始整数值。CT 体素通常各向异性,如层厚 1.0 mm、层内 0.7 mm,重采样前必须明确目标间距。

MRI 是非定量模态。像素强度取决于质子密度、T1/T2 弛豫、线圈灵敏度与接收增益,同一组织在不同序列、不同设备间没有统一数值含义。因此 MRI 预处理几乎不做绝对阈值分割,而采用 Z-score 或百分位裁剪归一化。MRI 常为 16 位有符号/无符号整数,需注意 BitsStored 与 PixelRepresentation,避免符号位误读导致强度翻转。

PET 记录的是符合计数,经衰减校正、散射校正与重建后得到活动度浓度(Bq/mL)。临床常用 SUV 表达:SUV = 活动度浓度 / (注射剂量 / 体重)。工程读写时必须保留 Units、RadionuclideTotalDose、RadiopharmaceuticalStartTime、PatientWeight 等字段,否则无法复算 SUV。PET 分辨率低、噪声高,常需与 CT 配准后融合。

超声 是采集域数据,像素值对应回波幅度,经对数压缩后显示。它没有解剖坐标,探头方向、深度、增益都影响图像。超声多为 8 位或 24 位 RGB,常以 TIFF/PNG 或私有格式存储,元数据缺失严重,工程上需从文件名或采集日志补全探头与深度信息。

病理 WSI 是超高分辨率全切片图像,单张可达 10 万×10 万像素、数 GB。它以金字塔多分辨率层级存储,每层由若干 tile 组成,并配有物理分辨率(μm/pixel)与扫描仪色彩标定。WSI 的“像素”是 RGB 光学密度,预处理重点是色彩标准化(如 Macenko、Reinhard)与组织区域分割,而非灰度归一化。

五种模态的像素/体素特性与工程读写关注点 CT 定量 · HU 空气 −1000 HU 水 0 HU 骨 > +1000 HU HU=px×slope+intercept 层厚 1.0 / 层内 0.7 mm 需重采样统一间距 MRI 非定量 · 相对强度 强度随序列/线圈变化 T1 / T2 / PD 各异 16 位整数常见 查 BitsStored / PixelRep Z-score 或百分位归一 不做绝对阈值分割 PET 计数 · SUV 活动度浓度 Bq/mL SUV=浓度/(剂量/体重) 需剂量与体重字段 Units / TotalDose 分辨率低、噪声高 常与 CT 配准融合 超声 采集域 · 回波幅度 对数压缩后显示 无解剖坐标 探头/深度/增益影响 多为 8 位或 RGB 元数据常缺失 需日志补全参数 病理 WSI RGB · 金字塔 10 万×10 万像素 多分辨率 tile 存储 μm/pixel 物理分辨率 色彩标准化关键 Macenko / Reinhard 组织区域分割 格式工程读写要点 DICOM • 标签驱动,含患者/设备/几何 • 读 PixelData + slope/intercept • 序列按 ImagePositionPatient 排序 • 注意传输语法与压缩 • 勿丢 Rescale 与 Spacing NIfTI • 单文件 .nii / 双文件 .hdr+.img • 仿射矩阵 sform/qform 定坐标 • 注意 RAS 与 LAS 方向 • 用 nibabel 读写最稳 • 勿忽略 qform_code NRRD • 头信息与数据分离 • space directions 定方向 • 支持 4D 与多通道 • 适合 DTI / 剂量分布 • 检查 encoding 与 endian TIFF / 其他 • 超声/病理常用,元数据弱 • 支持多页与金字塔 • 需外部记录物理分辨率 • 色彩空间需确认 RGB/YCbCr • 勿假设有解剖坐标

二、DICOM 的工程读写要点

DICOM 是临床数据的事实标准,其核心是“标签 + 像素数据”。读取时不能只取像素矩阵,必须同时解析几何与强度元数据。一个稳健的读取流程如下:

import pydicom, numpy as np

ds = pydicom.dcmread("ct_slice.dcm")
px = ds.pixel_array.astype(np.float32)
hu = px * float(ds.RescaleSlope) + float(ds.RescaleIntercept)

spacing = [float(ds.SliceThickness),
           float(ds.PixelSpacing[0]),
           float(ds.PixelSpacing[1])]
origin = [float(v) for v in ds.ImagePositionPatient]
orient = [float(v) for v in ds.ImageOrientationPatient]

对于序列,必须按 ImagePositionPatient 沿法向量投影排序,而不是按文件名或 InstanceNumber 排序,否则层序可能错乱。压缩传输语法(如 JPEG2000、RLE)需确认解码库可用。此外,RescaleSlope/Intercept 在部分设备上可能逐层不同,应逐层读取而非只取首层。

三、NIfTI 与 NRRD 的坐标约定

NIfTI 用仿射矩阵把体素索引映射到世界坐标,sform 与 qform 可能不一致,工程上应优先使用 sform(当 sform_code > 0)。NIfTI 世界坐标通常为 RAS+(x 向右、y 向前、z 向上),而 DICOM 患者坐标常为 LPS,转换时需翻转 x、y 符号。NRRD 用 space directions 显式给出每轴方向向量与间距,适合各向异性与 4D 数据,读取时需检查 encoding(raw/gzip)与 endian。

常见错误:把 NIfTI 的 RAS 坐标直接当作 DICOM 的 LPS 使用,导致左右翻转。配准前务必统一到同一坐标系,并在报告中记录所用约定。

四、工程落地检查清单

检查项CTMRIPET超声WSI
强度还原slope/intercept位深/符号SUV 字段对数压缩色彩标定
几何信息Spacing/Origin仿射矩阵与 CT 配准探头/深度μm/pixel
归一化窗宽窗位Z-scoreSUV 阈值增益校正Macenko
存储格式DICOMDICOM/NIfTIDICOMTIFF/PNG金字塔 TIFF

把上述要点固化为读取函数与元数据校验步骤,是后续重采样、配准与归一化可靠运行的前提。建议在数据入库阶段就完成模态识别、强度还原与坐标系标注,避免问题向后传递。