【问题标题】:Image segmentation and registration using SimpleITK使用 SimpleITK 进行图像分割和配准
【发布时间】:2017-03-22 05:14:58
【问题描述】:

我对 3D 图像配准和分割有一些疑问:

  1. 加载 dicom 图像:在 DCE-MRI 中有 4000 个切片,总共 100 个堆栈,因此每个堆栈有 40 个。如何使用 GDCM simpleITK 函数将它们加载到 4D 数组

  2. 注册:注册非常简单,我们必须将所有 100 个堆栈注册到第一个堆栈。

  3. 配准精度:SimpleITK 重叠率测量或 hausdroff 距离需要分割和标记。现在,对于所有类型的图像,使用区域增长或阈值分割并不容易。假设我只想以交互方式手动选择一个区域。有可能实现吗?然后我只想使用选择的掩码进行注册准确度评估。

  4. 可视化和编写:需要使用 matplotlib 或 VTK 进行 3D 可视化。所有绘图功能都适用于 2d 切片,不需要再次在 2D 中可视化。 使用 simpleITK write Image 函数写入 dicom 图像时,对于 dicom 图像,仅写入图像对象是行不通的。我们需要将 type 更改为 UInt32 ,但是图像会变得有损。它成功写入 .mha 格式,但 imageJ 无法显示。

如果可能,请分享您的想法。

【问题讨论】:

    标签: python image-segmentation itk image-registration simpleitk


    【解决方案1】:

    我不确定 SimpleITK 在其默认配置中是否支持 4D 图像。如果没有,您必须在将其配置为支持维度 4(而不仅仅是 2 和 3)之后自己编译它。即使这样,我也不确定它是否会立即起作用 - DICOM 臭名昭著,让简单的事情变得不那么容易,而让复杂的事情变得超级困难。

    ITK-SNAP是一个手动和人工辅助分割的工具。

    可视化更像是一个 VTK 问题。这是一个使用 3D 可视化的example

    【讨论】:

      【解决方案2】:

      1) GetImageFromArray,python 中的 simpleITK> 将 4d numpy 数组转换为 SimpleITK 图像。

      import numpy as np
      import SimpleITK as sitk
      
      np_array = np.zeros( (a,b,c,d) )
      tdim = np_array.shape[3]
      slices = []
      
      for i in range(tdim):
          slices.append( sitk.GetImageFromArray( np_array[i], False ) )
      
      im = sitk.JoinSeries(slices)
      
      sitk.WriteImage(im, "imageresult.mha") 
      

      2) 您可以先使用 ITKsnap 或在您的 python 代码中选择您的 VOI,而不是对整个图像数据执行所有实验,您只能包含该 ROI。

      3) 使用> from myshow import myshow

      myshow(sitk.LabelToRGB(img), title='img')
      

      【讨论】:

        【解决方案3】:

        3D Slicer 具有将 DCE MRI 系列加载为 4D 体积的功能。您可以在这篇文章中找到如何使用 3D Slicer 的此功能的教程:https://discourse.slicer.org/t/how-to-analyze-dce-mri-data/622

        【讨论】:

          猜你喜欢
          • 2018-05-09
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2016-07-23
          • 2012-12-16
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多