DICOM基础概念
DICOM(Digital Imaging and Communications in Medicine)是医学影像及其相关信息的国际标准(ISO 12052),用于存储、交换和传输医学图像及相关数据。DICOM 文件不仅包含像素数据(即图像本身),还包含大量描述该图像的元数据,这些元数据以“数据元素”(Data Elements)的形式组织在“信息对象定义”(Information Object Definition, IOD)中。
-
✅ 一、DICOM 文件的核心结构
-
文件头(File Meta Information)
- 固定长度为 128 字节的前导(通常全为 0x00,可选)
- 4 字节的 DICOM 前缀 “DICM”
- 文件元信息组(Group 0002),包含:
- (0002,0000) File Meta Information Group Length
- (0002,0001) File Meta Information Version
- (0002,0002) Media Storage SOP Class UID
- (0002,0003) Media Storage SOP Instance UID
- (0002,0010) Transfer Syntax UID
- (0002,0012) Implementation Class UID
- (0002,0013) Implementation Version Name
-
数据集(Dataset)
- 包含实际的图像信息和元数据,遵循特定的 IOD(如 CT Image IOD、MR Image IOD 等)
- 数据元素按标签(Tag)组织,格式为 (gggg,eeee),其中 gggg 是组号,eeee 是元素号
- 每个数据元素包括:Tag、VR(Value Representation)、Value Length、Value
-
-
✅ 二、核心信息对象(IOD)结构说明
每个 DICOM 图像属于一种 SOP Class(Service-Object Pair Class),例如:
- CT Image Storage (1.2.840.10008.5.1.4.1.1.2)
- MR Image Storage (1.2.840.10008.5.1.4.1.1.4)
- Secondary Capture Image Storage (1.2.840.10008.5.1.4.1.1.7)
每种 SOP Class 对应一个 IOD,定义了必须(Mandatory)或可选(Optional)的数据元素。
典型 IOD 模块(Modules)包括:
| 模块名称 | 类型 | 说明 |
|---|---|---|
| Patient | Module | 患者基本信息(如:姓名、ID、性别、出生日期等) |
| Study | Module | 检查(Study)信息(如:Study Instance UID、检查日期/时间、医生等) |
| Series | Module | 序列(Series)信息(如:Series Instance UID、模态、设备等) |
| Equipment | Module | 设备信息(如:制造商、型号、软件版本等) |
| Image | Module | 图像特有信息(如:图像方向、位置、像素间距、窗宽窗位等) |
| Pixel Data | Module | 像素数据本身 (7fe0,0010) |
- ✅ 三、关键数据元素示例
| TAG(gggg,eeee) | 名称 | 说明 |
|---|---|---|
| (0010,0010) | Patient’s Name | 患者姓名 |
| (0010,0020) | Patient ID | 患者唯一标识 |
| (0010,0030) | Patient’s Birth Date | 出生日期 |
| (0010,0040) | Patient’s Sex | 性别 |
| (0020,000D) | Study Instance UID | 检查唯一标识符 |
| (0020,000E) | Series Instance UID | 序列唯一标识符 |
| (0008,0018) | SOP Instance UID | 图像实例唯一标识符 |
| (0008,0060) | Modality | 成像模态(CT、MR、US 等) |
| (0008,0020) | Study Date | 检查日期 |
| (0008,0030) | Study Time | 检查时间 |
| (0020,0032) | Image Position (Patient) | 图像在患者坐标系中的位置 |
| (0020,0037) | Image Orientation (Patient) | 图像方向(行/列向量) |
| (0028,0030) | Pixel Spacing | 像素物理尺寸(mm) |
| (0028,0010) | Rows | 图像行数 |
| (0028,0011) | Columns | 图像列数 |
| (0028,0100) | Bits Allocated | 每像素分配的位数 |
| (7FE0,0010) | Pixel Data | 实际像素数据(可能压缩) |
- ✅ 四、传输语法(Transfer Syntax)
决定了数据如何编码(字节序、是否压缩等),常见包括:
-
Implicit VR Little Endian (1.2.840.10008.1.2) —— 默认
-
Explicit VR Little Endian (1.2.840.10008.1.2.1)
-
JPEG Lossless (1.2.840.10008.1.2.4.70)
-
JPEG 2000 (1.2.840.10008.1.2.4.90)
-
Deflated Explicit VR Little Endian (1.2.840.10008.1.2.1.99)
-
✅ 五、总结
DICOM 文件 = 文件元信息 + 数据集(遵循特定 IOD)
核心信息通过分层结构组织:Patient → Study → Series → Image → Pixel Data 对应的TAG为:PatientID → StudyInstanceUID → SeriesInstanceUID → SOPInstanceUID → PixelData. 在ER模型中表示为:
Patient → Study → Series → Image
1 -> N —->N –>N
对于多帧图像 NumberOfFrames>1 的需要单独处理。多帧主要是超声,心血管造影,心电图等设备生成到的DICOM文件。
所有信息通过标准化标签(Tag)访问,支持跨厂商互操作性。
如需解析或生成 DICOM 文件,推荐使用成熟库如:
- Python: pydicom
- C++: DCMTK
- Java: dcm4che
- C#: fo-dicom
- RUST: dicom-rs
如果是AI学习大数据分析等,推荐采用Pydicom。 开发PACS系统时,推荐采用 FO-DICOM。主要是目前dcm4che的兼容性相比fo-dicom差一些。dicom-rs 主要是难度高一些。DCMTK 对于JPEG2000传输语法的解码需要收费。dcm4che 在解析速度上目前是最慢的。但是辅助工具方面dcm4che 反而是最多的。
另外涉及到一些调试工具,如:
- DVTk
- Wireshark + DICOM plugin
对于调试DICOM通讯比较好。