如何在3D Slicer中将3个DICOM文件(头部、躯干、腿部)拼接为一个整体DICOM文件(完整身躯)?

大家好:

如何在3D Slicer中将3个DICOM文件(头部、躯干、腿部)拼接为一个整体DICOM文件(完整身躯)?

源影像:3个DICOM文件(头部、躯干、腿部);

目标影像:1个整体DICOM文件(完整身躯),不丢失比例尺和灰度阈值;

:puzzle_piece: 一、前置准备:导入与配准

1. 导入三段 DICOM

DICOM 模块中分别加载:

  • 头部 → Head
  • 躯干 → Trunk
  • 腿部 → Legs

2. (如有需要)刚性配准

若是一次连续扫描、病人未移动,可略过。
否则用以下方法让三段在同一空间对齐。

方法A:自动刚性配准

  • 模块:General Registration (BRAINS)
  • Fixed = Head
  • Moving = Trunk (或 Legs)
  • Registration Type = Rigid
  • Apply
  • 再对 Legs 重复。

方法B:手动配准


:brick: 二、融合体积:Add Scalar Volumes 模块操作

打开你截图中的 Add Scalar Volumes 模块,依次设置:

参数 设置
Input Volume 1 Head(或已经配准到 Head 空间的体积)
Input Volume 2 Trunk
Output Volume 新建节点,如 HeadTrunk
Interpolation order 1(线性插值,推荐)

点击 Apply

此时得到第一个合并结果 HeadTrunk

再重复一次:

  • Input Volume 1 = HeadTrunk
  • Input Volume 2 = Legs
  • Output Volume = WholeBody
  • Apply

:gear: 三、保持灰度和比例

  • 因为是 CT 灰度值(HU),务必保证:
    • 三段体素 spacing 一致;
    • 方向矩阵相同;
    • 插值方式为 Linear
    • 若出现灰度被“加厚”,改用 Simple Filters → Maximum Image Filter(HU取最大值可避免叠加)。

:floppy_disk: 四、导出为整体 DICOM

  1. DICOM 模块 → Export
  2. 选择节点:WholeBody
  3. 新建 Series Description : WholeBody_Fused
  4. 点击 Export to DICOM

即可得到完整身躯的 DICOM 序列,比例与HU均保留。

1 个赞

Landmark Registration(基于标志点的线性配准) 模块界面。
我们可以用它来替代“Transforms”模块,手动快速把 Trunk(躯干)Legs(腿部) 对齐到 Head(头部)

下面是最简步骤版(比 Transforms 更直观):backhand_index_pointing_down:


:compass: 一、模块选择

在上方模块栏选择:

Modules → Registration → Landmark Registration

:puzzle_piece: 二、配准对象选择

在弹窗中设置:

参数 说明
Fixed Volume Head(参考体积)
Moving Volume Trunk(要移动的体积)
点击 Apply

:bullseye: 三、打点操作

  1. 打开三视图(红/黄/绿窗口)。
  2. 在两个体积上分别标出相同的解剖点(比如胸椎上缘、锁骨、膈肌上缘等)。
  • 模块内点击 Add new point
  • 确保每个标志点在 FixedMoving 两个视图中一一对应。
  1. 设置配准类型:
  • Linear → 刚性(Rigid)或仿射(Affine)
  • 若只是刚性移动:选 Rigid

:abacus: 四、执行变换

  • 点击 Register 按钮;
  • 程序会自动计算一个刚性变换;
  • 新生成的变换节点例如 LinearTransform_1
  • 然后点击 Apply Transform(或切换到 Data 栏中右键 “Harden Transform”);
  • 融合后保存结果(现在 Trunk 已对齐到 Head)。

对 Legs 重复同样操作,得到对齐后的三段体积。

您好,曹老师:

非常感谢您的指导和帮助。在逐步测试过程中,发现如下 Register 按钮无法在界面找到,自己测试ChatGPT和Gemini发现答复中都有这个 Register 或者 Apply 按钮在界面找不到。我推测是他们的训练数据尚未对齐到最新3D Slicer 5.8软件导致的。

四、执行变换>>

  • 点击 Register 按钮;>
  • 程序会自动计算一个刚性变换;

由于3D Slicer 5.8软件的扩展插件很多导致实现脊椎配准拼接有很多方法。拜读了您的方法,深受启发。在ChatGPT付费模式下获得一个比其他多个免费AI都准确的答复方法,我经过了一步一步手工验证,是可行的 :grinning_face:。写下来供大家参考,我的一得之愚,不揣冒昧。

如下为方法段落:


下面给出在 3D Slicer(以 5.8 为例)中,用 Landmark Registration 完成两套正方形体数据的配准后,将“部分重合、整体呈纵向长方形”的并置结果导出为一套 DICOM 体数据的可复现步骤。思路是:先将 Moving 体“硬化”到配准后位置 → 构造一个能包含两套体的更大参考网格 → 把两套体都重采样进这个参考网格 → 将两者按像素合并(取最大值/取和/按掩膜粘贴,常用为取最大值以避免空洞)→ 导出 DICOM。


一、完成并“固化”配准结果

  1. 载入两套 DICOM 并在 Data 面板确认有两个 Scalar Volume(下面称 FixedMoving)。

  2. 打开 Landmark Registration,以 Fixed 为 Fixed Volume、Moving 为 Moving Volume,标定点并 Apply 得到一个线性变换节点(如 LinearTransform_1)。

  3. Data 面板中:将 Moving 体拖拽到该变换节点下(或右键 Moving→Apply transform 选择该变换)。

  4. 右键 Moving 体 → Harden transform(硬化变换)。

    • 结果:Moving 体的体素坐标被真正移动到与 Fixed 对齐的位置,后续不再依赖变换节点。

二、创建能“装下两套体”的大网格(参考几何)

目标是得到一个更高的纵向长方形体素网格,作为后续重采样的参考。

  1. 新建并放置 ROI:在工具栏点击 “创建 ROI(立方体)” 按钮,或在 Markups 模块中新建一个 ROI(如 ROI_1)。

  2. 在 2D/3D 视窗交互缩放与移动 ROI_1确保完整包围配准后的 Fixed 与 Moving 两套体(纵向方向要覆盖到形成的长方形完整范围)。

  3. 打开 Crop Volume 模块:

    • Input volume 选择 Fixed

    • ROI 选择 ROI_1

    • 展开 Parameters(高级/Advanced)

      • 取消 Isotropic spacing

      • Spacing scale 设为 1.0

      • Interpolation mode 建议 Linear(CT/MR 强度数据常用);

      • Fill value:CT 建议 -1024(空气),MR 可用 0,DX 可用 0

    • 点击 Apply

  4. 将得到一个更大的“裁剪-重采样”体(例如 Fixed-cropped)。它以 Fixed 为强度来源,但体素网格范围由 ROI 决定:

    • 这就是后续重采样/合并用的参考几何(Reference volume)

三、把两套体都重采样到该参考网格

  1. 打开 Resample Scalar/Vector/DWI Volume(或 Volume Resample)模块,进行两次重采样:

    (A) 重采样 Fixed:

    • Input VolumeFixed

    • Reference VolumeFixed-cropped(上一步产物)

    • Interpolation:Linear(或与上一步一致)

    • Output Volume:如命名 Fixed_resampled

    • Apply

    (B) 重采样 Moving(已硬化后的位置):

    • Input VolumeMoving(已 Harden 的那一个)

    • Reference Volume:同样选 Fixed-cropped

    • Interpolation:Linear

    • Output Volume:如命名 Moving_resampled

    • **Apply`

    结果:两套体都被映射到同一个更大、纵向长方形的网格上,分辨率与像素间距与 Fixed-cropped 一致。


四、在同一网格内进行体素级合并

常用做法是逐体素取最大值(Max)来避免空洞;也可按需要改为加权、求和或用掩膜粘贴。

方式 1:Simple Filters(ImageMath/Maximum)
10. 打开 Simple Filters,选 MaximumImageFilter(或 Image Math 里的 max(Fixed_resampled, Moving_resampled)):

  • InputFixed_resampled
  • Input (2)Moving_resampled
  • Apply
  • 输出命名为 Stitched_volume(即并置后的纵向长方形体)。

可选方式 2:使用阈值掩膜粘贴(若需要“只把非背景的 Moving 覆盖到 Fixed 上”,更像“拼接/粘贴”而非求最大):

  • Segment Editor 中分别对 Fixed_resampledMoving_resampled 做阈值分割得到前景掩膜;

  • Logical operators 做并集/覆盖得到最终掩膜;

  • Mask Volume(或 Simple Filters 的 MaskImageFilter/PasteImageFilter)将 Moving_resampled 的前景粘贴到 Fixed_resampled

  • 得到 Stitched_volume
    (这一路更精细,但步骤多;多数 CT/MR 直接 Maximum 足够稳健。)


五、导出为一套 DICOM 体数据

  1. DataVolumes 中选中合并结果 Stitched_volume,确认显示正常(2D 三视图应为纵向长方形范围)。

  2. 打开 DICOM 模块 → 右侧 Export(或 DICOM Export):

    • Export type:Volume

    • Volume to exportStitched_volume

    • 设置患者/研究/序列信息(Patient/Study/Series)(必要的元数据,至少要改一个以避免与原数据混淆)。

    • 选择导出目录 → Export

  3. 使用外部 DICOM 查看器或重新导入到 Slicer 验证该 DICOM 序列:应为一套纵向长方形的体数据。


关键设置与常见问题

  • Harden transform 一定要做:否则 Moving 仍以“挂着变换”的方式显示,后续重采样/合并会出现错位或输出为空。

  • Fill value(填充值)

    • CT 数据建议 -1024(空气),方便后续用最大值合并;

    • MR 可用 0。若背景不统一,最大值合并可能在重叠区引入非期望强度,必要时改用掩膜粘贴法。

  • Interpolation(插值):强度体数据通常用 Linear;若要保证标签一致性(非强度数据),应使用 Nearest neighbor

  • 参考网格(Reference Volume):能否成功“变成长方形”全靠 ROI 定义的包络范围。别忘了让 ROI 在纵向完全覆盖两套体

  • 导出 DICOM:仅支持单一体导出;因此一定要先完成合并,保证最终只有 Stitched_volume 这一套体作为导出对象。


两个.dcm文件操作结果如下图所示。

备注:

  1. 由于DICOM影像有不同的风格,例如边缘白边/模糊/虚化等,会影响拼接后的显示效果,可以预先对每个影像执行裁剪操作来删除不需要的区域后再拼接。
  2. 三个、四个影像拼接循环上面的操作流程就行。
1 个赞