想象你是一位档案管理员,负责整理一家医院堆积如山的影像资料。过去,医生看完 CT 片子后,会在胶片上画几个红圈,再手写一段“肺结节,建议复查”的纸条塞进档案袋。这些信息人看得懂,电脑却一头雾水——圈画在哪里?结节是哪几层图像?纸条上的结论对应哪个病变?当你需要把上千份这样的档案交给 AI 系统处理时,简直就是灾难。 后来,DICOM 标准组织给档案管理员发了三件法宝:SR(结构化报告)是一张“一问一答”的标准化问卷卡,把医生的自由结论拆成有语义的问题和答案;SEG(分割对象)是一沓透明的彩色贴纸,把“这是肺、那是肿瘤”逐像素标在照片上;RTStruct(放疗结构集)则是一本划满靶区轮廓的作战地图册,用一串串坐标点记录放疗要照射的区域。管理员再把它们统统装进贴满标准标签(UID)的档案夹,与原始影像一一挂钩。从此,AI 和放射治疗系统都能像读数据库一样,精准地读取每一份报告。本文就带你看懂这三种档案册的设计原理与使用方法。

岗位关联

对 AI 从业者而言,掌握 SR、SEG、RTStruct 是让模型输出真正进入临床工作流的关键——你的分割结果、诊断结论只有封装成标准的 DICOM 对象,医院 PACS、放疗计划系统才会认账。这是一项把算法价值落地到医疗场景的核心工程能力。

目录
  1. 可视化演示
  2. DICOM对象家族:档案室里的三本册子
  3. SR结构化报告:一问一答的问卷卡
  4. SEG分割对象:能撕能贴的透明图层
  5. RTStruct放疗结构:作战地图上的靶区册
  6. 影像关联机制:档案上的互引标签
  7. 临床应用实践:从标注到放疗的流水线
  8. 设计权衡决策:每种格式都是取舍
  9. AI 应用场景
  10. Python 演示
  11. 常见误区
  12. 面试题

可视化演示

模拟DICOM SR层级树结构、SEG分割掩码叠加影像与RTStruct轮廓集标注,展示三种结构化对象的数据模型与关联方式。

本节配有交互动效(进入视口后自动加载,约 3KB)。

模式1:SR结构化报告树 根节点CONTAINS子节点构成层级树 HAS OBS CONTEXT关联观测上下文 SR = ROOT(CONTAINS, HAS_OBS_CONTEXT) SR以关系类型构建测量结果树。

DICOM对象家族:档案室里的三本册子

档案管理员小D刚上岗时,发现档案室的规矩特别多:所有资料必须装进统一样式的档案夹,封面上印着“类型编号”,里面的文件必须按标签页分门别类。DICOM 世界的规矩与此一模一样——无论 CT 影像、超声视频,还是我们关心的 SR、SEG、RTStruct,全都是“DICOM 对象”,它们共享同一套档案夹格式:前面有一小段空白前导区,紧跟着“DICM“四个魔法字符标示身份,之后是无数个”数据元素”依次排列。

每个数据元素就像档案夹里的一张标签贴纸:贴纸上写着“标签编号(组号+元素号)”“数据类型(VR)”“长度”和“内容”。比如 (0010,0010) 这个标签,内容是患者姓名;(0008,0060) 标签则记录这是一个 CT 还是 MR 图像。而决定“这本档案夹里到底该放什么内容”的,是封面上那串长长的 SOP Class UID——它相当于档案的类型编号。SR、SEG、RTStruct 各自拥有不同的 SOP Class UID,因此系统一看编号就知道该按哪套规则拆解文件。

这三本册子——问卷卡、透明贴纸、作战地图册——虽然内容天差地别,但都穿着同款 DICOM 档案夹的外衣。正因为共享同一套“装订规则”,医院的任何系统都能用同一把钥匙打开所有档案夹,再根据 SOP Class UID 决定调用哪套阅读流程。这就是医学影像生态能够互联互通的基石。

DICOM Obj  =  Preamble(128B)⏟前导区  ⊕  DICM⏟魔法标识  ⊕  { E(group,elm),  E2,  …,  En }\displaystyle \text{DICOM Obj} \;=\; \underbrace{\text{Preamble}(128B)}_{\text{前导区}} \;\oplus\; \underbrace{\text{DICM}}_{\text{魔法标识}} \;\oplus\; \{\,E_{\text{(group,elm)}},\; E_{2},\; \dots ,\; E_{n}\,\}
这个公式把 DICOM 文件拆成三段:前导区(通常写零)、DICM 标识、以及一串按标签编号排列的数据元素。理解它之后,任何 DICOM 文件在你眼里都是可拆解的“档案夹”。
  1. 前导区128 个字节的空白区,用于兼容旧格式的位图头,DICOM 标准规定它一般全部为零。
    Preamble(128B)\text{Preamble}(128B)
  2. DICM 魔法标识紧接着前导区的四个 ASCII 字符,保证程序能立刻认出这是 DICOM 文件而非其他格式。
    DICM\text{DICM}
  3. 数据元素序列对象的主体,每个元素由“(组号,元素号)”构成的标签唯一标识,其含义由标准的数据字典规定。
    {(g,e)∈Data Dictionary,  VR,  Len,  Value}\{(g,e) \in \text{Data Dictionary},\; \text{VR},\; \text{Len},\; \text{Value}\}

SR结构化报告:一问一答的问卷卡

小D整理医生手写报告时头疼不已:“右上肺见磨玻璃结节,大小约 8mm,考虑炎性可能。”这句话信息量很大,但电脑无法自动提取“位置、大小、结论”这些结构化字段。于是他把医生的结论改写成一份标准的问卷卡:系统提问,医生或 AI 作答。这份问卷卡就是 SR 报告(Structured Report)。

SR 的核心数据结构是一棵“文档树”。树的根节点是报告的标题,比如“胸部 CT 检查报告”;往下分出一个个“内容项(Content Item)”,每个内容项本质上是一个“概念名-值”对。概念名必须来自标准编码表,比如 TID 2020 中的“Finding Site“(发现部位),值可以是文本、数值、日期,甚至可以嵌套另一个内容项子节点。为了让读卡人知道报告是在什么背景下写的,SR 里还有”观察上下文”记录:谁(观察者)、用什么设备、什么时间做的判断。

问卷卡的最大好处是“机器可读”。AI 系统可以让 SR 树的每个“答案”都对应到电子病历里的结构化字段,从而自动统计、检索、做多中心研究。而标注答案用的是什么“词典”(编码体系),则是下一节透视贴纸要面对的统一规范问题。

∣T∣  =  1+∑c∈children(T)∣Tc∣\displaystyle |T| \;=\; 1 + \sum_{c \in \text{children}(T)} |T_{c}|
这个递归公式说的是:整棵文档树的节点数等于根节点自身,加上所有子树节点数之和。SR 的树可以无限嵌套,因此它能表达“病变 A 位于右肺上叶、直径 8mm、分期 T1a”这种多层级语义,而平面文本表格做不到。
  1. 根节点计数每个 SR 文档至少有一个根内容项,它统领整棵语义树。
    ∣T∣=1+⋯|T| = 1 + \cdots
  2. 递归求和对根节点每一个子内容项 \(c\) 而言,它的子树规模同样递归地等于 1 加上自己的子节点数。
    ∑c∈children(T)∣Tc∣\sum_{c \in \text{children}(T)} |T_{c}|
  3. 树的语义表达树越深,描述越精细;节点越多,信息越丰富。关系类型如 CONTAINS、HAS_OBS_CONTEXT 决定了子节点如何挂在父节点下。
    Tc→CONTAINS / HAS_OBS_CONTEXTTT_{c} \xrightarrow{\text{CONTAINS / HAS\_OBS\_CONTEXT}} T

SEG分割对象:能撕能贴的透明图层

小D在整理照片时,想给心肺影像做标注。他拿出一沓透明贴纸,每张贴纸只涂一种颜色:一张把肺区域涂成绿色,一张把肿瘤涂成红色。把这些贴纸叠在 CT 照片上,电脑就知道“哪些像素属于肺、哪些属于肿瘤”。SEG 分割对象(Segmentation) 干的就是这件事,只不过它的贴纸不是彩色,而是黑白位图——每一层(Segment)是一张与 CT 图像同样大小的 0/1 网格,1 表示该像素属于这个器官,0 表示不属于。

SEG 对象里每个 Segment 都有详细的“段描述”:编码的解剖部位(如 “Coded Concept Name“ 指向肺)、算法类型(人工/自动/半自动)、颜色偏好等。关键的还有它和源影像的关系:SEG 通过”参考图像序列“逐帧指明自己的掩膜对应源 CT 的哪一帧,并且在同一 Frame of Reference(参考坐标系)下保证像素一一对齐。这种”位掩膜”设计对存储极为友好。

透明贴纸能精确到像素,但贴纸一旦生成,想“挪一挪”就很麻烦。放疗科医生更需要的是能随手拖拽、按几何形状编辑的“轮廓线”,这就轮到第三件法宝 RTStruct 出场了。

Bseg  =  ∑s=1P⌈Ws×Hs8⌉×Fs\displaystyle B_{\text{seg}} \;=\; \sum_{s=1}^{P} \left\lceil \frac{W_{s} \times H_{s}}{8} \right\rceil \times F_{s}
这公式计算 SEG 对象的体积:第 \(s\) 个 Segment 的掩膜图大小,行数×列数再除以 8(每像素只占 1 位,8 个像素凑一个字节),乘上该 Segment 的帧数后全部累加。相比存彩色标注图,它能省下几十倍的存储。
  1. 单层掩膜位数一个 Segment 的一张掩膜图,高 \(H_s\) 行、宽 \(W_s\) 列,每像素可用 1 位表示归属与否。
    Ws×HsbitsW_s \times H_s \quad \text{bits}
  2. 位转字节向上取整到整字节,因为文件读写按字节对齐。
    ⌈Ws×Hs8⌉\left\lceil \frac{W_s \times H_s}{8} \right\rceil
  3. 累加所有段\(P\) 个 Segment、每个 \(F_s\) 帧,全部相加得到对象总字节数。
    ∑s=1P(⋯ )×Fs\sum_{s=1}^{P} (\cdots) \times F_s

RTStruct放疗结构:作战地图上的靶区册

放疗是一场精准的“定向打击”:医生要在 CT 地图上圈出肿瘤(靶区),同时避开脊髓、肺等危急器官。圈出的轮廓要交给加速器执行照射,必须精确到毫米。RTStruct(RT Structure Set) 就是这本作战地图册,它不记录逐像素贴纸,而是记录一条条由三维坐标点连成的封闭轮廓线。

RTStruct 的核心是“结构集 ROI”列表:每个 ROI(感兴趣区域)有名称(如“GTV 肿瘤”)、编号、几何类型(轮廓点集或表面网格)。每一个 ROI 下面挂着多个“轮廓层”,每一层对应源 CT 的一个切片。轮廓层的坐标是世界坐标(单位是毫米),而不是像素坐标,这意味着它和具体影像的空间位置天然绑定。此外它还有“ROI 观察”字段,记录这是靶区还是危及器官、由谁在何时勾画。

如果说 SEG 是给 AI 算法看的“像素级标注”,RTStruct 就是给放疗计划系统(TPS)用的“几何级标注”。轮廓线不但能目视编辑,还能直接计算体积、生成剂量分布。而这本地图册之所以能精准覆盖到对应图层,全靠它和影像之间那条看不见的“引用锁链”。

Npt  =  ∑r=1R∑k=1Krnr,k\displaystyle N_{\text{pt}} \;=\; \sum_{r=1}^{R} \sum_{k=1}^{K_{r}} n_{r,k}
这是计算整个 RTStruct 中轮廓点总数的公式:先对某个 ROI \(r\) 的所有切片 \(k\) 的轮廓点数 \(n_{r,k}\) 求和,再把所有 ROI 加起来。轮廓点越多,几何精度越高,但文件也越大——这是临床精度与存储开销的直接权衡。
  1. 单个 ROI 的轮廓点ROI \(r\) 在第 \(k\) 层切片上有一个闭合轮廓,由 \(n_{r,k}\) 个三维点组成。
    nr,kn_{r,k}
  2. 切片求和某 ROI 在 \(K_r\) 层切片上的轮廓点全部累加。
    ∑k=1Krnr,k\sum_{k=1}^{K_{r}} n_{r,k}
  3. ROI 汇总结构集中共有 \(R\) 个 ROI(靶区 + 危机器官),合计得总点数。
    ∑r=1R  (∑k=1Krnr,k)\sum_{r=1}^{R} \; \left( \sum_{k=1}^{K_{r}} n_{r,k} \right)

影像关联机制:档案上的互引标签

小D发现,三本册子如果不和原始影像绑定,就跟散页废纸没区别。DICOM 的聪明之处在于,所有结构化对象内部都埋着一套“引用标签”(UID),就像档案上的互引索引。SEG 要引用它分割的源影像系列,RTStruct 要引用它勾画的 CT 影像,SR 则引用它对应的检查(Study)。

这条引用链层层递进:患者 → 检查(Study Instance UID)→ 系列(Series Instance UID)→ 实例(SOP Instance UID)。更关键的是 Frame of Reference UID——它像一个“空间坐标系编号”。只有当 SEG 或 RTStruct 与影像拥有同一个 Frame of Reference UID 时,系统才能确信两者处于同一物理空间。有了 UID 链还不够,像素坐标与世界坐标之间的换算还需要两样东西:影像位置标记(Image Position Patient)和像素间距(Pixel Spacing)。

有了 UID 链定位“是哪本档案”,再有了像素坐标与世界坐标的换算公式定位“具体位置在哪”,SR 的语义结论、SEG 的像素标注、RTStruct 的几何轮廓才能严丝合缝地叠在同一张 CT 上。这条引用链是 PACS、AI 和放疗系统协同工作的地基。

Pworld  =  P0  +  i Δx ex  +  j Δy ey\displaystyle P_{\text{world}} \;=\; P_{0} \;+\; i\, \Delta_{x}\, \mathbf{e}_{x} \;+\; j\, \Delta_{y}\, \mathbf{e}_{y}
这个公式把影像第 \(i\) 行、第 \(j\) 列的像素换算到病人坐标系中的物理位置:从原点 \(P_0\) 出发,沿横向走 \(i\) 步、每步 \(\Delta_x\) 毫米,再沿纵向走 \(j\) 步、每步 \(\Delta_y\) 毫米。
  1. 像素原点\(P_0\) 是影像左上角第一个像素在病人坐标系中的物理坐标,由标签 (0020,0032) 给出。
    P0P_0
  2. 行方向的增量每往下一行,世界坐标移动 \(\Delta_y\)(像素间距的纵向分量,单位 mm)。
    i Δx ex+j Δy eyi\,\Delta_{x}\,\mathbf{e}_{x} + j\,\Delta_{y}\,\mathbf{e}_{y}
  3. 像素索引\((i, j)\) 是该像素在影像矩阵中的行列号,从 0 开始计数。
    (i,j)∈[0,H−1]×[0,W−1](i, j) \in [0, H-1] \times [0, W-1]

临床应用实践:从标注到放疗的流水线

故事讲到这里,小D的三件法宝终于要在真实战场上大显身手。现代放疗工作流中,CT 影像进入 AI 分割模型后,模型直接输出 SEG 对象,标注出肿瘤和危机器官;随后放疗物理师把 SEG 转成 RTStruct,在计划系统里微调轮廓、设计照射野;最后系统生成包含剂量信息的计划文件,交付加速器执行。

另一个常见场景是影像科报告:AI 自动检测肺结节后,不再只输出一张 PNG 热图,而是生成一条 SR 文档树,直接写入 PACS 的“结构化报告”文件夹。临床医生打开 PACS 时看到的是一份带语义标签的电子报告,可与之前历次检查对比,自动追踪结节大小的变化。这三者组合起来的核心价值是:从“人看图文”升级为“机器读语义”。

从 AI 模型输出到临床决策,这条流水线上的每一步都要求数据“自描述、可追溯”。SR 让结论有出处,SEG 让标注有边界,RTStruct 让治疗有几何。临床质控人员拿着这三样东西,才能回答一个最朴素的问题:“AI 说这里有肿瘤,凭什么?——凭这本档案册里的标签和坐标。”

V  =  ∑k=1KAk⋅Δz\displaystyle V \;=\; \sum_{k=1}^{K} A_{k} \cdot \Delta z
这是放疗医生最常用的一把尺子:已知每一层轮廓围成的面积 \(A_k\) 和层厚 \(\Delta z\),累乘累加即可得到器官或肿瘤的体积。RTStruct 的轮廓点天然服务于该计算。
  1. 单层面积由 RTStruct 轮廓围成的多边形面积,用鞋带公式计算。
    AkA_k
  2. 层厚CT 相邻两层之间的间距,通常由影像描述标签 (0018,0050) 给出。
    Δz\Delta z
  3. 逐层累加K 层全部相加,所得体积单位与面积、层厚的单位一致(如 mm³)。
    V=∑k=1KAk ΔzV = \sum_{k=1}^{K} A_{k}\,\Delta z

设计权衡决策:每种格式都是取舍

如果小D手里有魔法,他或许想要一种格式既像 SEG 一样像素级精确,又像 RTStruct 一样可编辑,还能像 SR 一样语义丰富。但现实是,每种格式都有刻意的取舍。SEG 选择位掩膜,换来的是紧凑的空间与 AI 友好的直接使用;RTStruct 选择轮廓点集,换来的是 TPS 系统的编辑便捷与几何可计算性。若把轮廓转换成等尺寸掩膜,存储量差异可能高达一个数量级。

表达方式上,SR 坚持树状语义而非平面表单,是因为医学结论天然带层级(检查 → 发现 → 特征 → 测量值);SEG 和 RTStruct 则坚持标准编码表而非自由文本,为的是跨厂商互操作。这些决策背后都遵循同一原则:在可表达性、存储效率与临床可用性之间找平衡。

标准的演进也没有停止:DICOM 工作组持续在增强 SR 的模板约束(如 TID 1500 报告模板)、推动 SEG 扩展到多帧超声,以及定义 RTStruct 与新型粒子治疗的结合。对工程师而言,理解这些权衡,才能在“选 SEG 还是 RTStruct 输出”“SR 树该建多深”的决策中,做出符合业务约束的合理取舍。

---

γ  =  BytesmaskBytescontour  =  M×N×K8⋅3⋅Npt⋅4\displaystyle \gamma \;=\; \frac{\text{Bytes}_{\text{mask}}}{\text{Bytes}_{\text{contour}}} \;=\; \frac{M \times N \times K}{8 \cdot 3 \cdot N_{\text{pt}} \cdot 4}
这个比值 \(\gamma\) 近似刻画 SEG 与 RTStruct 的存储差异:分子是掩膜需要的字节数(像素数/8),分母是轮廓存储的字节数(每个三维坐标点三个 float32,共 12 字节)。\(\gamma > 1\) 表示同样几何内容下轮廓表示更省空间。
  1. 掩膜字节数网格 \(M \times N\)、共 \(K\) 层,每像素 1 位,折算为字节。
    M×N×K8\frac{M \times N \times K}{8}
  2. 轮廓字节数\(N_{\text{pt}}\) 个点,每个点含 \(x,y,z\) 三个 float32。
    3⋅Npt⋅43 \cdot N_{\text{pt}} \cdot 4
  3. 比值含义当轮廓点足够稀疏(光滑器官)时 \(\gamma \gg 1\),RTStruct 更优;当轮廓复杂密集时掩膜可能更紧凑。
    γ=BytesmaskBytescontour\gamma = \frac{\text{Bytes}_{\text{mask}}}{\text{Bytes}_{\text{contour}}}

AI 应用场景

放疗靶区智能勾画与格式转换

阶段:模型输出后处理

解决的问题:传统放疗靶区勾画全靠医生逐层手绘轮廓,一个病例要花一两个小时;AI 分割模型能秒级出结果,但直接输出 numpy 掩膜无法进入 TPS 系统。

具体案例:某放疗科部署肺肿瘤自动勾画系统,AI 模型在 CT 上分割出 GTV 和肺组织,后端服务将掩膜封装为 DICOM SEG 对象,再转换为 RTStruct 交给 TPS;物理师只需微调轮廓,靶区勾画时间从 90 分钟降到 15 分钟。

影像 AI 报告自动入 PACS

阶段:结果归档与交互

解决的问题:影像 AI 的常见输出是一张jpg热图和一句文字结论,无法与检查记录关联,也无法在 PACS 里做历史对比。

具体案例:肺结节筛查系统检测到结节后,自动构造 SR 文档树,记录“发现部位=右肺上叶、尺寸=8.2mm、形态=磨玻璃”,并引用当前检查的 Study UID。放射科医生在 PACS 中打开结构化报告,可一键调出历史 SR 对比结节变化。

多中心研究与数据质控

阶段:数据治理与合规

解决的问题:多中心临床试验需要统一标注格式,自由文本报告无法统计,Excel 表格又缺乏影像绑定关系。

具体案例:某肺癌筛查研究项目中,各合作医院统一使用 SEG 输出病灶分割、SR 输出测量指标,质控系统通过遍历 UID 链校验每个 SEG 都能溯源到对应 CT 帧,自动剔除引用断裂的坏数据。

Python 演示

python53 行
import math def ray_cast_polygon(px, py, xs, ys):    """射线法判断点是否在多边形内"""    inside = False    n = len(xs)    j = n - 1    for i in range(n):        xi, yi = xs[i], ys[i]        xj, yj = xs[j], ys[j]        if (yi > py) != (yj > py):            x_cross = xi + (py - yi) * (xj - xi) / (yj - yi)            if px < x_cross:                inside = not inside        j = i    return inside def contour_to_mask(contour, rows, cols, origin=(0.0, 0.0), spacing=(1.0, 1.0)):    """把世界坐标轮廓转换为0/1像素掩膜, 模拟SEG位平面"""    mask = [[0] * cols for _ in range(rows)]    ox, oy = origin    dx, dy = spacing    xs = [p[0] for p in contour]    ys = [p[1] for p in contour]    for i in range(rows):        for j in range(cols):            px = ox + j * dx            py = oy + i * dy            if ray_cast_polygon(px, py, xs, ys):                mask[i][j] = 1    return mask def volume_from_masks(masks, slice_thickness, pixel_area):    """按层累加体积: V = sum(A_k * dz)"""    total_voxels = sum(sum(row) for m in masks for row in m)    return total_voxels * pixel_area * slice_thickness def main():    # 模拟一个半径10mm的圆形肿瘤轮廓, 共60个采样点    contour = [(10.0 + 10.0 * math.cos(2 * math.pi * k / 60),                10.0 + 10.0 * math.sin(2 * math.pi * k / 60))               for k in range(60)]    masks = []    for z in range(5):  # 模拟5层切片        m = contour_to_mask(contour, rows=32, cols=32,                            origin=(0.0, 0.0), spacing=(1.0, 1.0))        masks.append(m)    vol = volume_from_masks(masks, slice_thickness=2.0, pixel_area=1.0)    nonzero = sum(sum(row) for m in masks for row in m)    print("非零像素总数:", nonzero)    print("估算体积(ml):", vol / 1000.0) main()
目的:将 RTStruct 风格的轮廓点(世界坐标)栅格化为 SEG 风格的像素掩膜,再按层厚累加估算器官体积——这正是 AI 分割结果与放疗系统对接时的核心公式实现。
  1. ray_cast_polygon(px, py, xs, ys)射线法判断某个像素中心点是否落在轮廓内部,是点集转掩膜的关键几何算法。
  2. contour_to_mask(contour, rows, cols, origin, spacing)结合原点与像素间距,把 RTStruct 的世界坐标轮廓映射到影像像素网格。
  3. mask[i][j] = 1落在轮廓内部的像素标记为 1,对应 SEG 中 1 bit 的归属位。
  4. volume_from_masks(masks, slice_thickness, pixel_area)对每层掩膜的非零像素求和,乘以像素面积与层厚,得到体积。
  5. total_voxels * pixel_area * slice_thickness与正文公式 \(V = \sum A_k \cdot \Delta z\) 完全对应,单位自动换算为 mm³。

常见误区

误区“SR 报告就是给 DICOM 文件加一段 HTML 或纯文本描述,跟 PDF 差不多。”

正解SR 绝不是一个“文本转储”字段。它的本质是一棵由“概念名-值”组成的内容树,每个节点都有标准编码语义。系统可以检索“所有右肺上叶结节”而不需要做自然语言处理。若把报告当纯文本存,就失去了机器可读性,也违背了 SR 的设计初衷。

为何常见:人们习惯把“报告”理解成一段文字,容易忽略 DICOM 用树状语义结构重新表达信息的深层设计。

误区“SEG 对象里每个器官存一张彩色 PNG,红色是肿瘤、绿色是肺。”

正解SEG 的每个 Segment 是二维 0/1 位掩膜,每像素仅占 1 bit,且各 Segment 分层存储、不混色。渲染时的红绿颜色只是显示层的映射,在数据层并不存在“彩色像素”。这个设计让存储极小、二值语义明确,AI 训练与后处理都方便。

为何常见:人眼看到 PACS 里的彩色叠加图,很自然会以为文件里存的就是那张彩色图,从而高估存储量并误解数据格式。

误区“RTStruct 里的轮廓点 (x, y) 就是图像里的行列号。”

正解RTStruct 的所有轮廓点都是病人坐标系下的三维世界坐标(单位 mm)。要把它变成屏幕上的像素或掩膜,必须结合当前影像的 Image Position Patient 和 Pixel Spacing 做换算。这也是它跨设备保持几何一致性的根基。

为何常见:在图片上“画圈”的直觉让初学者把轮廓点与二维像素坐标混为一谈,忽略了 DICOM 的物理坐标系设计。

误区“都是 DICOM 结构化对象,选一种存就行,反正信息差不多。”

正解三者职责差异巨大:SR 管语义结论(“是什么、多大、什么性质”),SEG 管像素归属(“哪些像素属于哪个结构”),RTStruct 管放疗几何(“靶区轮廓与剂量计划”)。AI 流程中常需要三件套同时存在,并通过 Frame of Reference 和 UID 关联。

为何常见:面对都叫“DICOM 对象”的三种格式,初学者容易只看到相似的外观,而忽略它们在信息粒度、坐标体系与临床用途上的本质不同。

面试题

Q1. DICOM 文件中的 "DICM" 四个字符位于文件的什么区域?

单选题 · easy

  • A.数据元素内容里
  • B.128 字节前导区之后← 正确答案
  • C.文件尾部的校验区
  • D.SOP Class UID 字段中

答案:B。DICM 紧跟在 128 字节前导区之后,作为文件格式的魔法标识。选项 A 混淆了标识与普通数据元素,C 不存在校验区概念,D 中 SOP Class UID 在数据元素内部,与 DICM 位置不同。

Q2. SEG 分割对象中,单个像素的归属信息占用多少位?

单选题 · easy

  • A.1 位← 正确答案
  • B.8 位
  • C.16 位
  • D.24 位

答案:A。SEG 的掩膜是 0/1 二值位平面,每个像素只需 1 位表示“属于/不属于当前 Segment”。8 位对应灰度值、16 位对应 CT 像素,24 位对应彩色标注图,都与 SEG 的设计不符。

Q3. RTStruct 中的轮廓点坐标属于下列哪一套坐标系?

单选题 · mid

  • A.屏幕像素坐标系
  • B.影像矩阵的行列索引
  • C.病人坐标系,单位毫米← 正确答案
  • D.加速器治疗床坐标系

答案:C。RTStruct 轮廓点存储在 Frame of Reference 定义的病人坐标系中,单位为 mm。屏幕像素与行列索引需要换算,治疗床坐标系属于计划执行阶段,均非存储格式本身使用的坐标系。

Q4. 下列哪些 DICOM 对象可以引用某个具体的 Frame of Reference?

多选题 · mid

  • A.SEG 分割对象← 正确答案
  • B.RTStruct 放疗结构集← 正确答案
  • C.SR 结构化报告
  • D.普通 CT 图像← 正确答案

答案:ABD。SEG 与 RTStruct 通过 Frame of Reference UID 与影像绑定空间坐标系,CT 图像自身也属于某个 Frame of Reference。SR 主要关联 Study/Series,通常不直接引用 Frame of Reference 空间坐标系,因此 C 不选。

Q5. SR 内容项的基本组成形式是?

单选题 · mid

  • A.键值对:概念名 + 值← 正确答案
  • B.自由文本段落
  • C.像素矩阵
  • D.坐标点序列

答案:A。SR 的每个内容项都是“概念名-值”对,概念名来自编码表(如 TID 2020 模板),值可以是文本、数值、日期等。自由文本无法结构化,像素矩阵属于图像类,坐标点序列属于 RTStruct 形态。

Q6. 在像素坐标与世界坐标的换算中,需要用到下列哪些参数?

多选题 · mid

  • A.Image Position Patient (0020,0032)← 正确答案
  • B.Pixel Spacing (0028,0030)← 正确答案
  • C.SOP Class UID
  • D.像素的行列索引← 正确答案

答案:ABD。换算公式 \(P_{\text{world}} = P_0 + i\Delta_x + j\Delta_y\) 依赖原点坐标、像素间距和像素行列号。SOP Class UID 只标识对象类型,不参与空间计算,因此 C 不选。

Q7. 下列哪种方式最适合把 AI 分割结果直接交给放疗计划系统编辑?

单选题 · mid

  • A.输出一张 PNG 热图
  • B.输出 CSV 像素表格
  • C.输出 DICOM RTStruct 轮廓← 正确答案
  • D.输出 SR 文本报告

答案:C。放疗计划系统需要可编辑的几何轮廓,RTStruct 以三维坐标点存储靶区轮廓,可直接导入 TPS。PNG 与 CSV 缺乏空间引用,SR 是语义报告而非几何结构。

Q8. 下列关于 SEG 与 RTStruct 存储效率的说法,正确的是?

单选题 · hard

  • A.任意情况下掩膜都比轮廓省空间
  • B.轮廓点存储量只取决于 ROI 数量
  • C.轮廓密集时 RTStruct 可能比 SEG 更大← 正确答案
  • D.SEG 不支持压缩

答案:C。SEG 掩膜大小固定为像素数/8,RTStruct 大小正比于轮廓点数。当轮廓非常密集、点数巨大时,RTStruct 可能超过掩膜体积;反之光滑器官的轮廓更省空间,因此 A 错误,B 忽略了每层点数,D 不准确。

Q9. 下列哪些属于 SR 结构化报告的典型应用价值?

多选题 · easy

  • A.机器可读的语义检索← 正确答案
  • B.与历史报告自动对比测量值← 正确答案
  • C.提供放疗加速器的剂量计算
  • D.跨机构统一报告模板← 正确答案

答案:ABD。SR 的树状语义结构支持自动检索、数值对比与模板统一,这些都是其临床价值。剂量计算依赖 RTStruct 与 RTPlan 的几何与物理信息,SR 不负责此项,因此 C 不选。

Q10. 多中心研究中,SR、SEG 与 CT 影像之间通过什么机制保证可追溯?

单选题 · hard

  • A.文件名后缀约定
  • B.SOP Instance UID 与 Frame of Reference 引用链← 正确答案
  • C.数据存储的物理路径
  • D.患者姓名与出生日期匹配

答案:B。DICOM 通过 SOP Instance UID、Series UID、Study UID 及 Frame of Reference UID 构成可机器校验的引用链。文件名与物理路径无标准语义,姓名出生日期匹配存在重名风险且非 DICOM 标准机制。