2. 医学影像数据基础

在医学影像标注与质控工程中,数据格式决定了后续所有处理链路的可行边界。标注工程师若不能准确理解 DICOM 与 NIfTI 的差异,就可能在坐标、方向、灰度显示等环节引入系统性错误,而这些错误往往在模型训练阶段才暴露,代价极高。本节从格式解析、灰度映射、空间几何和多模态组织四个层面展开,帮助读者建立可直接用于标注与质控的数据认知。

一、DICOM:临床原始数据的载体

DICOM(Digital Imaging and Communications in Medicine)是临床设备输出的标准格式,其核心特征是“一个文件承载一个切片(或一个实例),并携带完整的元数据”。每个 DICOM 文件由文件头、数据集和像素数据三部分组成,数据集以“标签(Tag)”形式组织,标签由组号(Group)和元素号(Element)构成,例如 (0028,0010) 表示图像行数 Rows,(0028,0030) 表示像素间距 PixelSpacing,(0020,0032) 表示图像位置 ImagePositionPatient。

在标注工程中,最需要关注的 DICOM 标签包括:患者与检查标识(PatientID、StudyInstanceUID、SeriesInstanceUID、SOPInstanceUID),用于数据溯源与去重;几何信息(ImagePositionPatient、ImageOrientationPatient、PixelSpacing、SliceThickness、SpacingBetweenSlices),用于三维重建与坐标换算;灰度信息(RescaleSlope、RescaleIntercept、WindowCenter、WindowWidth、PhotometricInterpretation),用于将存储的整数值还原为具有物理意义的 CT 值或显示灰度。

一个常见的误区是直接把 DICOM 的像素数组当作“图像灰度”使用。实际上,CT 的像素值需要经过线性变换:HU = PixelValue × RescaleSlope + RescaleIntercept。例如某 CT 序列 RescaleSlope=1、RescaleIntercept=-1024,像素值 1024 对应的 HU 为 0,即水;像素值 0 对应 -1024 HU,即空气。若忽略这一步,后续窗宽窗位设置将完全失去物理依据。

二、NIfTI:算法友好的三维体数据

NIfTI(Neuroimaging Informatics Technology Initiative)通常以 .nii 或 .nii.gz 形式存在,其设计目标是“一个文件承载一个三维或四维体数据”,并附带仿射矩阵(Affine Matrix)描述体素索引到世界坐标的映射。NIfTI 头文件中的关键字段包括 dim(各维度大小)、pixdim(体素尺寸)、datatype(数据类型)、scl_slope/scl_inter(灰度缩放)、qform/sform(方向与仿射信息)。

与 DICOM 相比,NIfTI 更适合作为标注与训练的统一中间格式:它去除了患者隐私信息,体素数组可直接被 NumPy、PyTorch 等工具读取,且仿射矩阵使空间坐标换算变得简洁。但代价是,NIfTI 一旦生成,原始 DICOM 的采集参数、设备信息、序列描述等元数据可能丢失,因此质控环节必须保留 DICOM 到 NIfTI 的转换记录。

在标注项目中,推荐保留两套数据:原始 DICOM 序列用于溯源与复核,转换后的 NIfTI 用于标注与训练。转换时需记录重采样参数、方向变换和灰度变换,确保标注结果可逆映射回原始空间。

三、窗宽窗位:灰度显示的“放大镜”

医学影像的灰度范围远超人眼可分辨的 256 级灰阶。窗宽(Window Width, WW)和窗位(Window Center, WC)用于将感兴趣的 HU 区间线性映射到显示灰度。其计算关系为:显示下限 = WC − WW/2,显示上限 = WC + WW/2;低于下限的像素显示为黑,高于上限的显示为白,区间内线性拉伸。

以头部 CT 为例,脑窗常用 WC=40、WW=80,对应显示区间为 0~80 HU,适合观察脑实质与出血;骨窗常用 WC=400、WW=2000,对应 -600~1400 HU,适合观察骨折与钙化;肺窗常用 WC=-600、WW=1500,对应 -1350~150 HU,适合观察肺纹理与结节。标注时若窗宽窗位设置不当,病灶边界可能被“压平”或“过曝”,导致勾画偏差。

需要特别强调的是:窗宽窗位只影响显示,不改变原始像素值。标注结果应始终基于原始 HU 值或原始像素值保存,显示窗仅用于人工观察。质控时应检查标注文件是否记录了所用窗宽窗位,以便复现标注时的视觉条件。

四、像素间距与方向:空间几何的基石

像素间距(PixelSpacing)描述单个像素在行、列方向上的物理尺寸,单位通常为毫米。例如 PixelSpacing=[0.5, 0.5] 表示每个像素代表 0.5 mm × 0.5 mm 的物理面积。层间距(SpacingBetweenSlices)或层厚(SliceThickness)描述相邻切片之间的距离。三者共同决定体素的实际物理尺寸,直接影响病灶体积测量、距离测量和重采样精度。

方向信息由 ImageOrientationPatient 和 ImagePositionPatient 共同描述。ImageOrientationPatient 给出图像行方向和列方向在患者坐标系中的方向余弦,ImagePositionPatient 给出图像左上角像素中心在患者坐标系中的位置。NIfTI 则通过仿射矩阵统一表达方向。若方向处理错误,可能出现左右颠倒、上下翻转或前后错位,这在标注中属于严重质控缺陷。

一个实用的检查方法是:在转换后随机抽取若干切片,核对解剖标志(如肝脏位于右侧、心脏偏左)是否与原始 DICOM 一致。若发现镜像或旋转,应立即回溯转换脚本中的方向变换逻辑。

DICOM → NIfTI 转换与空间几何关系 DICOM 序列 Slice 001 (0020,0032) Slice 002 (0020,0032) Slice 003 (0020,0032) PixelSpacing / Orientation RescaleSlope / Intercept 转换 NIfTI 体数据 dim: [512, 512, 120] pixdim: [0.5, 0.5, 1.0] sform: 4×4 仿射矩阵 体素索引 → 世界坐标 scl_slope / scl_inter 显示 窗宽窗位映射 脑窗 WC=40, WW=80 骨窗 WC=400, WW=2000 肺窗 WC=-600, WW=1500 仅影响显示,不改变像素值 标注基于原始 HU 保存 空间几何关系:像素间距、层间距与方向 单层图像 PixelSpacing[0] PixelSpacing[1] 相邻层 PixelSpacing[0] PixelSpacing[1] 层间距 方向约定(患者坐标系) • ImageOrientationPatient:行/列方向余弦 • ImagePositionPatient:左上角像素世界坐标 • NIfTI sform/qform:体素索引 → 世界坐标 质控:核对解剖标志,防止镜像/旋转

五、多序列与多模态数据组织

一个检查(Study)通常包含多个序列(Series),例如 MRI 的 T1、T2、FLAIR、DWI,或 CT 的平扫、增强动脉期、静脉期。标注任务往往需要跨序列配准与融合,因此数据组织必须清晰。推荐按 StudyUID/SeriesUID/SOPUID 三级目录组织 DICOM,并在 NIfTI 转换后按 subject/session/modality/series 组织,同时维护一份 JSON 或 CSV 索引表,记录每个序列的模态、方向、体素尺寸、窗宽窗位和转换参数。

多模态融合时,需特别注意不同模态的空间分辨率与方向可能不一致。例如 PET 与 CT 融合时,PET 体素通常为 3~5 mm,CT 为 0.5~1 mm,必须重采样到统一网格。重采样应优先在原始空间完成,再统一方向,避免多次插值引入模糊。标注结果若需跨模态使用,应明确标注所基于的参考序列,并在质控中检查配准误差是否在可接受范围内。

多序列数据中,不同序列的层间距、方向甚至患者体位可能不同。若直接按文件名排序拼接,极易造成层错位。正确做法是依据 ImagePositionPatient 沿法向量排序,并校验层间距一致性。

六、面向标注与质控的检查清单

综合以上内容,在实际项目中可按下表逐项核查数据质量。该清单可直接用于标注前的数据准入检查。

检查项 关键字段/方法 合格判据(示例)
灰度还原 RescaleSlope / RescaleIntercept HU 范围符合组织物理范围(如 CT 约 -1024~3000)
像素间距 PixelSpacing 行列间距均为正数,且与设备标称一致
层间距一致性 ImagePositionPatient 排序后差分 相邻层间距偏差 < 5%
方向正确性 ImageOrientationPatient / sform 解剖标志与临床预期一致,无镜像
窗宽窗位记录 WindowCenter / WindowWidth 标注任务中使用的窗值已记录并可复现
多序列配准 重采样后体素尺寸与方向 目标序列与参考序列空间一致,配准误差在阈值内