2. 医学影像基础与DICOM标准入门
要开发一个能正确显示、测量和归档医学影像的工作站,第一步不是写界面,而是理解“影像到底是什么、它是怎么被组织成文件的”。本节围绕成像模态、像素与体素、窗宽窗位与灰度映射、DICOM信息模型、文件结构与数据集五条主线展开,它们共同决定了阅片系统里每一个像素的来历和含义。
一、成像模态:不同物理量映射为灰度
医学影像的“模态”指成像所依赖的物理原理。CT 用 X 射线穿过人体后的衰减差异成像,输出的是与线性衰减系数相关的数值;MRI 利用氢质子在磁场中的弛豫特性成像,输出的是信号强度;超声用回声时间与强度成像;PET/SPECT 探测放射性示踪剂分布;X 光平片则是投影叠加。不同模态的数值含义完全不同,因此工作站不能把 CT 的灰度直接套用到 MR 上。
关键点在于:模态决定了像素值的物理意义和取值范围。CT 的像素值经过标定后是 HU(Hounsfield Unit),水约为 0 HU,空气约 −1000 HU,致密骨可达 +1000 HU 以上;而 MR 的像素值只是相对信号强度,没有绝对单位。工作站在做测量、窗宽窗位、伪彩之前,必须先读取 DICOM 中的 Modality 与相关标定信息。
二、像素与体素:二维采样与三维体积
像素(Pixel)是二维图像的最小采样单元,体素(Voxel)是三维空间的最小体积单元。CT/MR 断层图像本身是二维像素矩阵,但当把连续多层叠加起来,就构成体素网格。像素间距(Pixel Spacing)描述层内相邻像素的物理距离,层厚(Slice Thickness)与层间距(Spacing Between Slices)描述层间关系。三者共同决定空间测量的准确性。
例如一幅 CT 图像矩阵为 512×512,Pixel Spacing 为 0.7 mm×0.7 mm,层厚 1.0 mm。若在图上量得两点相距 100 个像素,则实际距离约为 100×0.7 = 70 mm。若忽略 Pixel Spacing 直接用像素数报毫米,测量就会出错。体素体积则可近似为 0.7×0.7×1.0 = 0.49 mm³,用于体积测量和三维重建。
三、窗宽窗位与灰度映射
人眼能分辨的灰度级有限(约几十到一百多级),而 CT 的 HU 范围可达 −1024 到 +3071,共 4096 级。因此必须通过窗宽(Window Width, WW)和窗位(Window Center, WC)把感兴趣的 HU 区间映射到显示灰度。
映射规则为:显示范围下界 = WC − WW/2,上界 = WC + WW/2。低于下界的像素显示为全黑,高于上界的显示为全白,区间内线性映射到 0~255。例如肺窗常用 WW=1500、WC=−600,则显示区间为 −1350~150 HU,适合观察肺实质;纵隔窗常用 WW=400、WC=40,区间为 −160~240 HU,适合观察软组织;骨窗常用 WW=2000、WC=400,区间为 −600~1400 HU,适合观察骨结构。
同一组 CT 数据,切换窗宽窗位就能得到完全不同的视觉效果,这正是工作站必须支持实时调窗的原因。实现上通常先做线性映射,再查表输出到显示设备;若使用 VOI LUT(DICOM 中的灰度映射查找表),还可支持非线性映射。
四、DICOM 信息模型:从患者到像素
DICOM(Digital Imaging and Communications in Medicine)不只是一个文件格式,更是一套信息模型。它用“实体—关系”的方式描述影像世界:患者(Patient)→ 检查(Study)→ 序列(Series)→ 实例(Instance/SOP Instance)。一次检查可包含多个序列(如 T1、T2、增强),一个序列包含多幅图像实例。每个层级都有唯一标识 UID,用于跨系统索引和归档。
工作站加载影像时,通常先按 StudyInstanceUID 聚合一次检查,再按 SeriesInstanceUID 分组,最后按 InstanceNumber 或 ImagePositionPatient 排序。若排序错误,多平面重建和三维体数据就会错层。因此理解信息模型是开发阅片列表、序列管理和重建功能的基础。
五、文件结构与数据集
一个 DICOM 文件由文件头(File Meta Information)和数据集(Dataset)组成。文件头包含 128 字节前导、DICM 标识、传输语法 UID 等,用于告诉解析器数据如何编码。数据集由一系列数据元素(Data Element)构成,每个元素由标签(Tag)、值表示(VR)、值长度(VL)和值(Value)组成。
标签用 (组号, 元素号) 表示,例如 (0010,0010) 是患者姓名,(0028,0010) 是行数,(7FE0,0010) 是像素数据。VR 决定值的类型,如 PN 表示人名、US 表示无符号短整型、OB 表示字节串。传输语法决定字节序(小端/大端)和是否压缩(如 JPEG Lossless、JPEG 2000)。解析时若忽略传输语法,像素数据就会读错。
(0008,0060) CS Modality = "CT"
(0010,0010) PN PatientName = "ZHANG^SAN"
(0028,0010) US Rows = 512
(0028,0011) US Columns = 512
(0028,0030) DS PixelSpacing = [0.7, 0.7]
(0028,1050) DS WindowCenter = 40
(0028,1051) DS WindowWidth = 400
(7FE0,0010) OW PixelData = ...
开发工作站时,建议先实现一个最小解析器:读取文件头确认 DICM 与传输语法,再逐元素解析数据集,把患者、检查、序列、图像位置、像素间距、窗宽窗位等关键标签提取到内存对象中,最后才把 PixelData 交给渲染模块。这样既能保证信息完整,也能避免因标签缺失导致的显示异常。
综上,成像模态决定数值含义,像素与体素决定空间尺度,窗宽窗位决定显示效果,DICOM 信息模型决定组织层级,文件结构与数据集决定如何被程序读取。把这五者串起来,工作站才能从“能打开文件”走向“能正确阅片”。