2. 医学影像与DICOM基础
在开发DICOMweb云影像平台之前,必须先建立对DICOM标准的整体认知。很多开发者初次接触DICOM时,会把它简单理解为“一种医学图像文件格式”,这其实只对了一半。DICOM(Digital Imaging and Communications in Medicine)既是一套信息模型,也是一套网络通信协议。文件只是它的持久化形态,而DICOMweb则是把这套模型和协议搬到HTTP/REST之上的现代访问方式。理解它们之间的层次关系,是后续所有接口设计、数据解析和影像渲染工作的基础。
一、DICOM信息模型:从患者到像素的层级结构
DICOM信息模型采用自顶向下的四层实体结构,这是理解整个标准的主线:
- Patient(患者):最顶层,由Patient ID唯一标识,包含姓名、出生日期、性别等人口学信息。
- Study(检查):一次影像检查对应一个Study,由Study Instance UID唯一标识,例如一次胸部CT检查。一个患者可以有多次检查。
- Series(序列):一个Study下按采集方式或重建方式划分的序列,由Series Instance UID标识。例如胸部CT的平扫序列、增强序列、冠状位重建序列各为一个Series。
- Instance / SOP Instance(实例):最底层,通常是一张图像,由SOP Instance UID唯一标识。一个Series包含多张Instance。
这四层通过UID(Unique Identifier)逐级关联,形成“患者—检查—序列—实例”的树状结构。DICOMweb的REST路径正是照搬这一模型:/studies/{studyUID}/series/{seriesUID}/instances/{instanceUID}。因此,只要理解了信息模型的层级,就能自然理解QIDO-RS查询、WADO-RS取回和STOW-RS存储的URL设计逻辑。
二、像素数据与元数据:一张DICOM图像的两副面孔
每个SOP Instance内部由两大部分组成:元数据(Metadata)和像素数据(Pixel Data)。
元数据以“数据元素(Data Element)”为基本单位,每个元素由标签(Tag)、值表示(VR, Value Representation)和值长度构成。标签用两个十六进制数表示组号和元素号,例如:
(0010,0010)Patient Name,VR为PN(0008,0060)Modality,VR为CS,值为CT、MR、US等(0028,0010)Rows,VR为US,表示图像行数(0028,0011)Columns,VR为US,表示图像列数(7FE0,0010)Pixel Data,VR为OB或OW,存放真正的像素字节
像素数据本身并不直接等于“可显示的灰度图”。要正确渲染,必须结合元数据中的几个关键参数:Bits Allocated(分配位数,如16)、Bits Stored(有效位数,如12)、High Bit(最高位位置)、Pixel Representation(0为无符号,1为有符号)、Photometric Interpretation(MONOCHROME2、RGB等)、Rescale Slope/Intercept(将存储值转换为CT值的线性参数)。例如,CT图像中存储值经过 HU = storedValue × RescaleSlope + RescaleIntercept 才能得到亨斯菲尔德单位,窗宽窗位才能正确应用。
三、SOP类:定义“这是什么对象、能做什么操作”
SOP(Service-Object Pair)类把“信息对象”和“服务”绑定在一起。常见SOP类包括:
- CT Image Storage(1.2.840.10008.5.1.4.1.1.2):一张CT图像
- MR Image Storage(1.2.840.10008.5.1.4.1.1.4):一张MR图像
- Secondary Capture Image Storage:截图或后处理图像
- Ultrasound Multi-frame Image Storage:多帧超声
SOP Class UID决定了该实例在DICOMweb中如何被识别和处理。例如,QIDO-RS查询时可以按SOPClassUID过滤;STOW-RS存储时,服务端根据SOP Class UID判断是否支持该类型。对于多帧图像,像素数据是一个三维或四维数组,需要结合NumberOfFrames等标签解析。
四、传输语法:字节流的编码规则
传输语法(Transfer Syntax)规定了DICOM数据集的编码方式,核心包括:
- 字节序:Implicit VR Little Endian、Explicit VR Little Endian、Explicit VR Big Endian
- VR编码:隐式VR(不写VR,靠字典推断)与显式VR(每个元素带VR)
- 压缩方式:JPEG Baseline、JPEG Lossless、JPEG 2000、RLE等
传输语法的UID写在元数据中,解析器必须先读取它,才能正确解码后续字节。在DICOMweb场景下,WADO-RS可以通过Accept头指定期望的传输语法,服务端可进行转码;STOW-RS上传时,multipart/related的每个part都携带自己的Content-Type,服务端据此选择解析器。
五、从DICOM到DICOMweb:关系总结
把上述概念串起来看:DICOM信息模型定义了数据的层级结构,元数据和像素数据构成了实例内容,SOP类定义了对象类型与服务能力,传输语法定义了字节编码规则。DICOMweb并没有改变这些底层模型,而是把传统的DIMSE网络服务(C-FIND、C-MOVE、C-STORE)替换为HTTP上的RESTful接口:QIDO-RS对应查询,WADO-RS对应取回,STOW-RS对应存储。因此,掌握DICOM基础模型,是理解DICOMweb接口语义、正确解析响应和处理异常的前提。