4. 医学影像数据采集与标注工程

病灶检测模型的性能上限,很大程度上由数据决定。一个肺结节检测模型能否在 3 mm 微小结节上保持召回率,往往不取决于网络结构,而取决于 CT 层厚、重建核、标注边界的一致性。本章围绕数据从设备到训练集的全链路展开:DICOM 解析、标注工具选型、标注规范制定与质量控制。

一、DICOM 解析:从像素到可训练张量

DICOM 不是一张图片,而是一个包含患者信息、采集参数、像素数据与空间几何的多层容器。解析的核心任务是:把像素矩阵还原到正确的物理坐标系中,并保留可用于建模的元数据。

关键标签需要重点掌握。(0028,0010) Rows 与 (0028,0011) Columns 给出矩阵尺寸;(0028,0030) PixelSpacing 给出行、列方向的像素物理间距(单位 mm),顺序为 [行间距, 列间距];(0018,0050) SliceThickness 是标称层厚,而层间真实间距应优先使用 (0018,0088) SpacingBetweenSlices,缺失时用相邻层面的 (0020,0032) ImagePositionPatient 沿法向量投影计算。方向信息由 (0020,0037) ImageOrientationPatient 提供,前三个值为行方向余弦,后三个值为列方向余弦,二者叉乘得到层面法向量,用于判断层序方向与左右、前后翻转。

窗宽窗位决定灰度映射。以肺窗为例,窗位 -600 HU、窗宽 1500 HU,则显示区间为 [-1350, 750] HU,映射公式为:

HU = pixel * RescaleSlope + RescaleIntercept
gray = clip((HU - (WC - WW/2)) / WW, 0, 1) * 255

其中 RescaleSlope 通常为 1,RescaleIntercept 为 -1024。若忽略 Rescale,直接把原始像素当 HU 使用,肺实质与空气的对比会被严重压缩,微小结节的边界信息随之丢失。

工程上还需处理几类常见问题:多帧增强 CT 的层间不一致、压缩传输语法(如 JPEG Lossless)需先解码、以及不同厂商对 SliceLocation 的符号约定差异。建议在解析阶段统一输出为 NIfTI 或 NPZ,并同步保存 spacing、origin、direction 三个仿射参数,避免后续重采样时坐标系错乱。

DICOM 解析与空间几何还原链路 DICOM 序列 像素矩阵 元数据标签 HU 转换 Slope / Intercept 窗宽窗位映射 空间几何 PixelSpacing Orientation / Position 统一张量输出 NIfTI / NPZ spacing + origin + direction 关键标签速查 (0028,0030) PixelSpacing → [行间距, 列间距] mm (0018,0088) SpacingBetweenSlices → 层间真实间距 (0020,0037) ImageOrientationPatient → 行/列方向余弦,叉乘得法向量 (0020,0032) ImagePositionPatient → 层原点坐标 (0028,1052/1053) RescaleIntercept / Slope (0028,1050/1051) WindowCenter / WindowWidth 常见陷阱 忽略 Rescale → HU 失真;层序方向未校验 → 左右翻转;压缩语法未解码 → 像素读取失败

二、标注工具:按任务形态选型

标注工具的选择取决于标注对象的几何形态与临床工作流。矩形框适合快速筛查,多边形适合不规则边界,而像素级分割需要支持笔刷、区域生长与三维插值。

对于 CT 肺结节,常用方案是 3D Slicer 配合 Segment Editor 模块:在轴位、冠状位、矢状位三视图联动下,用 Draw 或 Grow from seeds 勾画结节,再用 Fill between slices 在层间插值,最后导出为 NIfTI 掩膜。对于 X 线胸片,LabelImg 或 CVAT 的矩形框模式更高效,但需注意框的边界应贴合病灶可见轮廓,而非包含过多正常组织。

工具选型时需评估四点:是否支持 DICOM 直接读取与窗宽窗位调节;是否支持多视图联动与三维插值;是否支持标注版本管理与多人协作;导出格式是否与训练框架兼容(COCO、VOC、NIfTI、DICOM-SEG)。若团队已有 PACS 环境,优先选择支持 DICOMweb 的工具,减少数据搬运成本。

三、标注规范:把临床判断转成可执行规则

标注规范的本质是把“什么算病灶、边界画到哪里”写成可复现的操作定义。规范缺失时,同一批数据在不同标注员之间会产生系统性偏差,模型学到的将是标注风格而非病灶特征。

以肺结节为例,规范应明确:纳入标准(实性结节、部分实性结节、磨玻璃结节分别处理);最小尺寸阈值(如长径 ≥ 3 mm 才标注);边界定义(沿结节边缘的肺组织界面,不包含血管连接处);多结节处理(每个结节独立标注,记录位置与编号);不确定病例的处理(标记为“可疑”并进入仲裁流程)。

规范还应包含坐标系约定。若使用图像坐标,需说明原点在左上角、x 向右、y 向下;若使用患者坐标,需说明 LPS 或 RAS 约定。全文与工具配置必须一致,否则标注框会在训练时发生镜像或偏移。

四、质量控制:从抽样复核到一致性指标

质量控制不是一次性检查,而是贯穿采集、标注、复核、入库的闭环。可操作的做法包括:

  • 双人独立标注 + 仲裁:对 10%~20% 的病例进行双标注,计算 Dice 系数或 IoU。以分割任务为例,Dice ≥ 0.85 视为一致,0.70~0.85 进入讨论,低于 0.70 必须仲裁并回溯规范。
  • 边界一致性检查:对同一结节,比较两位标注员在三个正交视图上的边界偏差,若某方向偏差超过 2 mm,检查是否因窗宽窗位不同导致可见边界差异。
  • 元数据完整性校验:入库前检查 spacing、origin、direction 是否存在,层厚是否与采集协议一致,患者 ID 是否脱敏。
  • 分布监控:统计结节尺寸分布、位置分布、标注员工作量,发现某标注员尺寸分布明显偏大或偏小,及时复核。
建议把标注规范写成带示例图的 SOP 文档,每季度根据仲裁案例更新一次。规范版本号需与数据集版本绑定,确保训练时可追溯。

五、一个可复用的质控检查表示例

下表为肺结节 CT 标注入库前的检查项,可直接用于团队内部复核。字段与阈值根据实际项目调整,此处为示例参数。

检查项检查内容判定标准处理方式
几何参数PixelSpacing、SpacingBetweenSlices 是否存在且合理spacing 在 0.5~1.0 mm,层厚 ≤ 2 mm缺失则退回采集端补录
HU 转换RescaleSlope/Intercept 是否应用肺窗下肺实质 HU 在 -900~-700重新解析并记录
结节边界双标注 Dice≥ 0.85 通过;0.70~0.85 讨论;< 0.70 仲裁仲裁后更新规范
最小尺寸结节长径≥ 3 mm 才纳入小于阈值标记为忽略
脱敏患者姓名、ID、生日全部替换为匿名编号未脱敏禁止入库
版本绑定规范版本号与数据集版本一一对应不匹配则重新标注