请问Slicer重建的血管三维图像如何进行曲面展平?有没有什么好方法?

软件版本:5.8.1
问题描述:我重建了颈动脉血管的3D图像以及其层厚2mm方位内的周围组织成分,能否将这样一个符合的圆筒样结构进行展平?有没有好的教程或者高手能够教我?

你想将重建出的颈动脉血管及其周围组织(圆筒样结构)展平成二维平面图的思路是完全可行的。虽然在 3D Slicer 中没有一个“一键展平 cylindrical volume” 的专用模块,但可以通过组合几步处理来实现。下面我为你整理一个详细的流程 + 注意事项 +可用工具推荐。


:wrench: 一、思路总览

  1. 将圆筒样结构在三维空间中提取出来(模型或体积)
  2. 将该圆筒沿其轴方向「切开」或「展开」成平面(即 cylindrical unwrap)
  3. 将展平结果转换为二维图像或新的体积平面表示,以便观察周围组织沿血管的分布。

:test_tube: 二、操作流程(推荐在 3D Slicer + 可选外部工具)

下面以你已有重建好的圆筒样结构为基础,说明在 Slicer 中如何操作:

1. 提取圆筒模型/体积

  • 如果你现在是一个体积(例如血管 +周围组织层厚2 mm):
    • Segment Editor 中分割出这个结构(血管+2 mm层) → 得到 Segment
    • 将其转换为模型:Segmentations → Export to model (STL/PLY)
  • 如果你已有模型,则可直接使用该模型。

2. 在模型中定义“切口”/“展开轴”

  • Transforms 模块中,找到该圆筒模型的“轴”方向(例如顶端→底端中心线)
  • 你需要在模型中“切开”一条纵向缝隙(类似把圆筒从一侧切开):
    • 在模型编辑器(可在 Slicer 的 Model Maker 或转导至外部软件如 MeshLab)中,沿着轴设置一个切割平面,分割模型。
    • 这样做的目的是制造一个无缝缝隙,使展开后能够平铺。

3. 展平/展开模型:Cylindrical Unwrapping

  • Slicer 本身对“模型展平”功能支持较为基础,你可以考虑以下两种路径:路径 A:在 Slicer 内尝试
    • 将模型转换为纹理映射(UV map)然后再按“Cylinder unfolding”思路展平:
      • 在模型节点右键 → Edit texture coordinates(如果有)
      • 选择 “Cylinder mapping” 或 “Cylindrical”方式
      • 然后将模型导出/截图为平面视图
    • 但真实操作中这个方法在 Slicer 可能较为麻烦,效果也不一定理想。路径 B:借助外部工具 + 再导入 Slicer(推荐)
    • 将模型导出为 STL,使用 MeshLab/CloudCompare 等工具进行 “Cylindrical unwrapping”:
      • 例如在 MeshLab:Filters → Remeshing, Simplification and Reconstruction → “Geometric Cylindrical Unwrapping” (社区有提及) (Agisoft Metashape)
      • 设置轴向、展开方向,导出展平后的二维模型(如 XY-平面)
    • 把展平后的模型或点云再导入 Slicer,或者将展平结果转换为影像(如将点云投影为二维图像)进一步分析。

4. 将展平结果转为二维影像(如你需要沿血管周围组织的 2D 分布图)

  • 在 Slicer 中,导入展平后的模型/点云 → 用 Model to VolumeProject 3D to 2D 脚本将其转为一个“平面体积”或“平面截图”
  • 导出为 PNG/JPEG 或二维 DICOM 切片,方便后续测量/观察。

:books: 三、参考资源(教程/讨论)

  • 这个 YouTube 教程讲了在 ParaView 中 “Unwrapping/ unfolding a cylindrical surface into a flat surface”

Unwrapping a cylindrical surface into a flat surface (ParaView)

  • 在 MeshLab、CloudCompare 社区也有“unwrapping cylindrical 3D models to 2D rectangles” 的讨论:如在 Agisoft 论坛有人用 MeshLab “Filters → … cylindrical unwrapping” 方法。 (Agisoft Metashape)
  • 虽然这些不是纯医学影像教程,但原理是一样的:把圆筒展开为平面。

:brain: 四、注意事项 &挑战

  • 展平时会 扭曲尺度:沿圆周方向展开会造成原本圆筒的“弧长 = 展平宽度”。你需要计算好比例关系,以保证沿血管周围的组织距离、厚度等测量准确。
  • 展开后 “顶部/底部” 接缝处可能有失真或断裂,需要在切割阶段尽量选择一个“合适缝隙”,并在模型中平滑。
  • 如果你的圆筒不是完全规则圆(血管弯曲、周围组织厚度不均),那么“展开”结果的几何失真会更大。在这种情况下,你可能要先做 沿血管中心线拉直(straighten) 再展开。
  • 在医用影像中关联 HU 或组织类型时,要保留原体积的灰度/结构信息,模型导出/展平过程中要保证不要丢失这层信息。

好,关于在 3D Slicer 中对“圆筒/血管+周围组织”结构展开(或近似展平)这一需求,我查到了一些相关教程和讨论,虽然没有完全一步到位“圆筒展平”专用教程,但有多条可作为 关键步骤参考。下面整理给你,供你组合成你的展开流程。


:magnifying_glass_tilted_left: 有用教程/资料(可参考)

  1. VMTK 扩展在 Slicer 中的“血管中心线提取 + 曲面重整(Curved Planar Reformat)”教程。

    • 教程出处:Slicer Wiki “Modules: VMTK in 3D Slicer Tutorial: Coronary Artery Centerline Extraction” (3D Slicer)
    • 涵盖:血管分割 → 中心线提取 → 重整血管沿中心线的断面。
    • 虽然不是“圆筒展平”直接操作,但“沿中心线重整血管”是实现“拉直/展开”步骤的重要组成。
  2. “Fill or extract cavities in segmentations using the new ‘Wrap Solidify’ effect” 讨论帖。

    • 来源:Slicer Community 论坛 (3D Slicer Community)
    • 内容:介绍了 Wrap Solidify 的 “Outer surface”/“Largest cavity” 模式、孔洞填补、壳体生成等。
    • 虽然主要用于骨壳处理,但操作思路(将复杂结构简化为壳/外表面)也适合你“圆筒样结构提取 +准备展开”之前的处理。
  3. 教程视频:

    • “Vessel segmentation and centerline extraction using 3D Slicer and VMTK”

Vessel segmentation and centerline extraction using 3D Slicer and VMTK

  • 虽然没有“展平”阶段,但血管分割 →中心线提取作为展开前置步骤非常有价值。

:abacus: 推荐你组合出的“展平”流程(基于上述资料 +你的需求)

结合你已有“颈动脉血管 +其周围2 mm层组织 → 圆筒样结构”,我建议如下流程:

  1. 血管及周围组织提取/分割

    • 用 Segment Editor 分割出血管 +周围2 mm组织层。
    • 转模型或保留体积。
  2. 中心线提取/拉直血管

    • 在 VMTK 中使用 Extract Centerline 模块(基于教程1)提取血管中心线。
    • 然后使用 Curved Planar Reformat(CPR)使血管沿中心线“拉直”(变为近直筒形)。
    • 这样你的圆筒结构就变得“近规则”便于展平。
  3. 准备展开模型

    • 将拉直后的模型导出为 STL(或在 Slicer 内继续处理)。
    • 使用 MeshLab 或其他网格工具做切割:选择一个纵向缝隙沿血管轴方向切开模型,使模型从圆筒变为一张可展平的“带状”结构。
    • 回到 Slicer 可选:在 Segment Editor 中用 Wrap Solidify 的 “Outer surface” 模式将结构简化为壳体(如果内部不是你关注的即可移除) — 来源于资料2。
  4. “展平/展开”操作

    • 在 MeshLab 等工具中执行 “cylindrical unwrap” 或 “map cylinder to plane” 操作,将圆筒模型展开为平面。
    • 导入展开后的平面模型或点云到 Slicer;如果需要二维图像,可在 Slicer 中使用 “Model to Volume” 或截图方式获取。
  5. 校正尺度与测量

    • 展开时注意保持圆周长度 = 展平后的宽度,以保证周围组织的真实几何分布。
    • 在 Slicer 中可用 Markups → Ruler 测量、或 Segment Statistics 计算。
  6. 输出/保存

    • 导出展开后的模型(STL/PLY)或转换为影像(PNG/JPEG/NRRD)备用。
    • 若需要复查原体积分布,可保存血管 +周围层体积。