2. DICOM协议核心对象精讲

在DICOM世界里,影像AI服务并不是直接“读一张图”,而是先理解一套层层嵌套的信息模型。SOP Class、IOD、IE、模块、数据集和编码规则共同构成了这套模型的主干。只有把这条链路理清,AI服务才能稳定地接收影像、正确解析元数据,并把推理结果以合规方式写回PACS或归档系统。

从SOP Class到IOD:先定义“能做什么”

SOP Class是DICOM中定义服务对象类型的核心标识,它决定了某个对象能参与哪些服务,例如存储、查询、打印或工作列表。常见的CT图像存储SOP Class UID为1.2.840.10008.5.1.4.1.1.2,MR图像存储为1.2.840.10008.5.1.4.1.1.4,而AI结果常以Secondary Capture或Enhanced SR等形式表达。SOP Class本身是一个UID,它把“对象类型”和“服务语义”绑定在一起。

IOD(Information Object Definition)则描述这类对象在信息层面“长什么样”。它规定了必须存在哪些信息实体、每个实体包含哪些属性、哪些属性是必需的、哪些是条件性的。可以这样理解:SOP Class回答“这是什么服务对象”,IOD回答“这个对象由哪些信息组成”。例如CT图像IOD包含患者、检查、序列、图像等多个信息实体,而AI分割结果若以DICOM Segmentation对象存储,则对应Segmentation IOD,其信息实体和属性要求与普通CT图像不同。

IE与模块:把IOD拆成可实现的积木

IE(Information Entity)是IOD中的高层信息单元,常见包括Patient、Study、Series、Equipment、Image等。每个IE下再挂载若干模块(Module),模块是属性集合的最小功能单元。例如Patient IE下包含Patient Module,Study IE下包含General Study Module,Series IE下包含General Series Module,Image IE下包含General Image Module和Image Pixel Module。

模块内部由属性(Attribute)组成,每个属性有标签(Tag)、VR(Value Representation)、VM(Value Multiplicity)和条件类型(Type 1、1C、2、2C、3)。Type 1表示必须存在且非空,Type 2表示必须存在但可为空,Type 3表示可选。AI服务在构造或解析对象时,必须优先保证Type 1和Type 1C属性正确,否则对象可能被拒绝或无法被下游系统识别。

DICOM信息模型与AI服务字段映射 SOP Class 服务对象类型 + UID IOD 信息对象定义 IE 信息实体 模块(Module) Patient Module General Study General Series Image Pixel Equipment 数据集(Dataset)— 属性集合 PatientID (0010,0020) StudyInstanceUID SeriesInstanceUID SOPInstanceUID 编码规则:VR + VM + Transfer Syntax 显式VR小端 / 隐式VR小端 / JPEG Lossless / JPEG 2000 AI服务必须掌握:SOPClassUID、SOPInstanceUID、StudyInstanceUID、SeriesInstanceUID、PatientID、Modality、Rows、Columns、BitsAllocated、PixelRepresentation、PhotometricInterpretation

数据集与编码规则:属性如何真正落到字节

数据集是模块中属性的实际集合,按标签从小到大排列。每个属性由标签、VR、值长度和值组成。VR决定了值的编码方式,例如PN表示人员姓名,UI表示UID,DA表示日期,US表示无符号短整型。VM表示值多重性,例如1表示单值,1-n表示一个或多个。AI服务在解析时,必须根据VR正确解码,否则会把二进制像素值误读为文本,或把UID截断。

传输语法(Transfer Syntax)决定字节序、VR是否显式以及是否压缩。常见的有Implicit VR Little Endian、Explicit VR Little Endian、JPEG Lossless和JPEG 2000。AI服务接收影像时,必须先读取(0002,0010) Transfer Syntax UID,再决定用哪种解码器。若传输语法是JPEG 2000,而服务只支持未压缩像素,就必须先解压再推理。

影像AI服务必须掌握的字段

对于影像AI服务,以下字段是必须优先掌握的:SOPClassUID用于判断对象类型;SOPInstanceUID用于唯一标识实例;StudyInstanceUID、SeriesInstanceUID用于建立检查与序列层级;PatientID用于患者关联;Modality用于区分CT、MR、US等;Rows、Columns用于确定图像矩阵;BitsAllocated、BitsStored、HighBit、PixelRepresentation用于正确解析像素;PhotometricInterpretation用于判断灰度或彩色;RescaleSlope、RescaleIntercept用于将像素值转换为HU值;ImagePositionPatient、ImageOrientationPatient、PixelSpacing、SliceThickness用于空间定位和几何计算。

实践提示:AI服务在写回结果时,应保持与原始影像相同的StudyInstanceUID和SeriesInstanceUID,或按业务规则新建Series。若写回Segmentation对象,必须正确设置SegmentationType、NumberOfFrames、Rows、Columns以及ReferencedSOPInstanceUID,否则下游无法把结果与原始影像关联。

一个可执行的字段检查清单

在AI服务上线前,建议用以下清单逐项核对输入对象:

检查项 标签 预期值/说明
SOP Class UID (0008,0016) 与支持的存储SOP Class一致
SOP Instance UID (0008,0018) 非空且全局唯一
Study Instance UID (0020,000D) 非空,用于检查级关联
Series Instance UID (0020,000E) 非空,用于序列级关联
Modality (0008,0060) CT/MR/US等,与模型匹配
Rows / Columns (0028,0010)/(0028,0011) 与像素数据长度一致
BitsAllocated (0028,0100) 通常8或16
PixelRepresentation (0028,0103) 0为无符号,1为有符号
PhotometricInterpretation (0028,0004) MONOCHROME2、RGB等
RescaleSlope/Intercept (0028,1053)/(0028,1052) 用于HU转换

例如,某CT影像的RescaleSlope=1、RescaleIntercept=-1024,像素值为1024时,对应HU值为1024×1+(-1024)=0,即水。若AI模型训练时使用的是HU值,而服务直接输入原始像素值,就会产生系统性偏差。因此,在推理前必须完成HU = Pixel × RescaleSlope + RescaleIntercept的转换,并确认PixelRepresentation与模型输入一致。

常见错误:忽略PhotometricInterpretation为MONOCHROME1的情况。MONOCHROME1表示像素值越大越黑,与常见的MONOCHROME2相反。若AI服务未做反转,模型看到的图像会整体反相,导致分割或检测结果异常。