DICOM 数据处理 SimpleITK

1.读取文件

读取DICOM序列

医学图像中一个CT序列包含很多张图片,即一个case包含许多slice,使用SimpleITK可以直接读取一个序列,并方便地得到各种参数,将图像数据转换成numpy Array:

  1. import SimpleITK as sitk
  2. import numpy as np
  3. reader = sitk.ImageSeriesReader()
  4. dicom_names = reader.GetGDCMSeriesFileNames(case_path)
  5. reader.SetFileNames(dicom_names)
  6. image = reader.Execute()
  7. image_array = sitk.GetArrayFromImage(image) # z, y, x
  8. origin = image.GetOrigin() # x, y, z
  9. spacing = image.GetSpacing() # x, y, z

需要注意的是,SimpleITK读取的图像数据的坐标顺序为zyx,即从多少张切片到单张切片的宽和高;而据SimpleITK Image获取的origin和spacing的坐标顺序则是xyz。这些需要特别注意。

读取DICOM单张图片

可以将一个DICOM序列作为一个整体一次读入,也可以一张一张地读入每张切片:

  1. import SimpleITK as sitk
  2. import numpy as np
  3. image = sitk.ReadImage(slice_path)
  4. image_array = sitk.GetArrayFromImage(image) # z, y, x

这里需要注意的除了坐标顺序是zyx之外,还需注意,即使读取单张切片,所得到的结果也是3维的,只不过第一维是1。

读取mhd文件

涉及DICOM序列时,为了传输方便(从上百个dcm文件到一个mhd文件),很多情况下以mhd文件格式进行呈现,不过mhd文件只是一个很小的包含数据信息的文件,同时搭配的通常还有一个二进制的数据文件(格式为raw或zraw等)。使用SimpleITK读取这种文件也比较方便。

  1. import SimpleITK as sitk
  2. import numpy as np
  3. image = sitk.ReadImage(mhd_path)
  4. image_array = sitk.GetArrayFromImage(image) # z, y, x
  5. origin = image.GetOrigin() # x, y, z
  6. ...

有时候不想整个读取数据(因为比较大,读取处理比较慢),想要读取的只是一些基本信息,比如origin、spacing等等。这时可以只读取mhd文件,据此获取信息,读取方法比较简单,不再赘述。

2.处理文件

处理DICOM文件主要有插值等操作,可以直接使用SimpleITK(或者说是ITK)的相关函数,并通过pipeline结构进行处理。

插值

  1. import SimpleITK as sitk
  2. reader = sitk.ImageSeriesReader()
  3. dicom_names = reader.GetGDCMSeriesFileNames(case_path) reader.SetFileNames(dicom_names)
  4. image = reader.Execute()
  5. resample = sitk.ResampleImageFilter()
  6. resample.SetOutputDirection(image.GetDirection())
  7. resample.SetOutputOrigin(image.GetOrigin())
  8. newspacing = [1, 1, 1]
  9. resample.SetOutputSpacing(newspacing)
  10. newimage = resample.Execute(image)
  • 4
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 7
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值