3. DICOM标准深度解析
在医学影像组学数据标准化工程中,DICOM 是所有下游特征的“源头格式”。如果对 DICOM 文件结构、元数据元素、传输语法和像素数据封装方式理解不深,后续的组学提取就会出现标签错位、HU 值失真、ROI 与像素矩阵对不上等问题。本节从工程视角拆解 DICOM 文件,并说明它与组学数据提取接口之间的对应关系。
一、DICOM 文件的三段式结构
一个标准 DICOM 文件(Part 10 文件)由三部分组成:128 字节前导(Preamble)、4 字节 “DICM” 前缀,以及其后的数据集(Dataset)。前导区通常填 0,可被某些厂商用于私有信息;前缀是识别文件是否为 DICOM 的“魔数”。真正承载信息的是数据集,它由一系列数据元素(Data Element)顺序排列构成。
每个数据元素由四部分构成:标签(Tag)、值表示(VR, Value Representation)、值长度(VL, Value Length)和值域(Value Field)。标签是 4 字节无符号整数,形如 (组号, 元素号),例如 (0010,0010) 表示患者姓名,(0028,0010) 表示图像行数。VR 描述数据类型,如 PN(人名)、UI(唯一标识)、US(无符号短整型)、OB(字节串)等。VL 指明值域字节数。理解这一层,是解析任何 DICOM 文件的基础。
二、元数据元素:从患者信息到像素描述
DICOM 标签按组号可大致分为几类:
- 患者与检查信息(0010、0008 组):PatientName、PatientID、StudyInstanceUID、SeriesInstanceUID、Modality、StudyDate 等,是组学数据分组、去重和溯源的关键。
- 设备与采集参数(0018 组):KVP、SliceThickness、PixelSpacing、ReconstructionDiameter、ConvolutionKernel 等,直接影响纹理特征的物理意义。
- 图像与像素描述(0028 组):Rows、Columns、BitsAllocated、BitsStored、PixelRepresentation、RescaleSlope、RescaleIntercept、PhotometricInterpretation 等,是像素解码与 HU 换算的核心。
- 像素数据(7FE0,0010):PixelData,通常位于文件末尾,是体量最大的元素。
其中 RescaleSlope 与 RescaleIntercept 尤为关键。CT 的原始像素是整数存储值,真实 HU 值需按 HU = PixelValue × RescaleSlope + RescaleIntercept 换算。若组学提取时忽略这一步,所有一阶统计量(均值、方差)和纹理特征都会系统性偏移。
三、传输语法:决定字节如何被解读
传输语法(Transfer Syntax)由 (0002,0010) 标签给出,它规定了三件事:字节序(小端/大端)、VR 编码方式(显式/隐式)、像素数据是否压缩。常见取值包括:
| 传输语法 UID | 名称 | 特点 |
|---|---|---|
| 1.2.840.10008.1.2 | Implicit VR Little Endian | 隐式 VR,小端,未压缩 |
| 1.2.840.10008.1.2.1 | Explicit VR Little Endian | 显式 VR,小端,未压缩 |
| 1.2.840.10008.1.2.4.50 | JPEG Baseline | 有损压缩,像素需解码 |
| 1.2.840.10008.1.2.4.70 | JPEG Lossless | 无损压缩 |
| 1.2.840.10008.1.2.5 | RLE Lossless | 游程编码无损压缩 |
隐式 VR 下,数据元素不写 VR 字段,解析器必须查数据字典推断类型;显式 VR 下,VR 直接写在标签后。压缩传输语法下,PixelData 是封装后的码流,必须先解压才能得到像素矩阵。工程上,统一转成 Explicit VR Little Endian 未压缩格式是组学预处理最稳妥的中间态。
四、像素数据封装与组学提取接口
未压缩时,PixelData 是一段连续的字节流,按行优先排列。解析步骤为:读取 Rows、Columns、BitsAllocated、SamplesPerPixel,计算期望字节数,按 PixelRepresentation 决定有无符号,再按 BitsStored 做位掩码,最后 reshape 成二维矩阵。压缩时,PixelData 被封装为若干 Fragment,需按传输语法调用对应解码器。
组学提取接口通常接收一个三维数组(或二维切片序列)加一个掩膜(Mask)。因此 DICOM 到组学的接口关系可归纳为:元数据 → 像素解码 → HU 换算 → 空间对齐 → 特征计算。PixelSpacing 和 SliceThickness 决定纹理特征的物理尺度,ImagePositionPatient 和 ImageOrientationPatient 决定体素的空间位置,这些都必须与像素矩阵同步传入提取器。
五、工程实践中的常见陷阱
第一,隐式 VR 误判:部分老设备使用隐式 VR,若解析器按显式读取,会把 VR 字节当成值长度,导致后续全部错位。第二,Rescale 遗漏:直接使用原始像素值计算纹理,CT 的 HU 范围会从 [-1000, 3000] 变成 [0, 4095],特征分布完全改变。第三,压缩像素未解码:把 JPEG 码流当原始像素 reshape,得到的矩阵毫无意义。第四,多帧与单帧混淆:NumberOfFrames 大于 1 时,PixelData 包含多帧,需按帧拆分。第五,PhotometricInterpretation 为 MONOCHROME1 时,像素值越大越暗,显示与计算需注意反转。
六、从 DICOM 到组学特征的接口约定
为了让组学提取可复现,建议在工程上固定以下接口约定:像素矩阵统一为 float32、HU 单位;空间元数据以 PixelSpacing(行、列方向)和 SliceThickness(层厚)显式传入;ROI 掩膜与像素矩阵严格同尺寸、同方向;每个特征向量附带 SeriesInstanceUID 和 SOPInstanceUID 作为溯源键。这样,无论上游是 CT、MR 还是 PET,下游特征计算器都能以一致的方式工作。
总结来说,DICOM 不是“一个图片格式”,而是一套自描述的数据容器。文件结构决定如何定位信息,元数据元素决定信息的含义,传输语法决定字节如何被解读,像素封装决定图像如何被还原。只有把这四层关系理清,组学数据标准化工程才有可靠的地基。