随着最近几大肺部图像处理相关的竞赛的推出,如LUNA16、Kaggle Data Science Bowl,AI领域的科研人员对肺部CT图像变得越来越熟悉,尤其是DICOM序列,以及这些竞赛官方所提供的mhd数据格式。

ITK是一个功能很强大的医学图像处理公开库,搭配VTK用以显示图像,可以实现几乎所有医学图像处理的功能需要。ITK通常以C++包进行提供,当然也可以自己编译为Python包,不过编译过程比较繁琐耗时,而且很容易踩坑。但ITK官方进行的Python封装SimpleITK,则直接可以拿来使用;虽然有部分ITK的功能没有包含,但已基本够用了。我们在处理医学图像时,使用的基本都是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)

关于SimpleITK相关推荐

  1. 影像组学视频学习笔记(33)-使用SimpleITK实现医学影像差值、Li‘s have a solution and plan.

    作者:北欧森林 链接:https://www.jianshu.com/p/afcd06221ea4 来源:简书,已获转载授权 RadiomicsWorld.com "影像组学世界" ...

  2. 影像组学视频学习笔记(32)-使用SimpleITK进行N4偏置场校正、Li‘s have a solution and plan.

    作者:北欧森林 链接:https://www.jianshu.com/p/ae0f502dc146 来源:简书,已获授权转载 RadiomicsWorld.com "影像组学世界" ...

  3. 影像组学视频学习笔记(27)-SimpleITK包介绍、Li‘s have a solution and plan.

    本笔记来源于B站Up主: 有Li 的影像组学的系列教学视频 本节(27)主要讲解: 功能强大的图像处理工具SimpleITK包 视频中李博士演示了SimpleITK的两个基本功能:图像格式转换以及图像 ...

  4. pytorch环境下“No module named SimpleITK”的解决办法

    写在这里的初衷,一是备忘,二是希望得到高人指点,三是希望能遇到志同道合的朋友. 目录 一.问题 二.根本原因 三.解决办法 一.问题 目前,尝试着通过pytorch对医学图像进行处理,运行代码,出现的 ...

  5. python中“SimpleITK”模块完美快速安装

    写在这里的初衷,一是备忘,二是希望得到高人指点,三是希望能遇到志同道合的朋友. 目录 1.SimpleITK简介 2.通过cmd命令窗口安装 3.通过Anaconda Prompt命令窗口安装 1.S ...

  6. 【深度学习】图像自动处理工具SimpleITK的使用(Python)

    [深度学习]图像自动处理工具SimpleITK的使用(Python) 文章目录 1 Python安装第三方库SimpleITK 2 SimpleITK处理医学图像 3 图像增强.去噪.边缘检测(Sim ...

  7. 搭建Ubuntu18.04+Anaconda3.x+Pycharm+SimpleITK(二)

    python 安装 SimpleITK SimpleITK 安装: pip install SimpleITK

  8. Ubuntu中python调用SimpleITK来显示图像

    misc.imshow ipython import os from scipy import misc dataDir = os.environ["HOME"] + " ...

  9. Ubuntu下安装cmake,配置ITK 和 SimpleITK, VTK(已测试可执行)

    curses库 在安装cmake之前应该先安装一下curses库.如果系统中有curses库的话,cmake将生成一个可执行文件ccmake,它是一个基于文本程序的终端,有点类似windows GUI ...

  10. Python SimpleITK实现医学图像增强算法

    1.对数变换 图像对数变换首先将图像从SimpleITK图像数据转成Numpy矩阵数据,然后采用Numpy的log1p()函数来计算数据的log(1+x)变换,由于1+x不能小于零,因此这里我们使用图 ...

最新文章

  1. 离开域后打开Office慢 Openfiler
  2. Android环境下通过C框架层控制WIFI【转】
  3. Windows内存管理学习笔记(一)—— 线性地址的管理
  4. php interbase,PHP: Firebird/InterBase - Manual
  5. rust为什么显示不了国服_Rust编程语言初探
  6. Android 在 Google 开发者大会上发布了哪些更新? | Google 开发者大会 2018
  7. linux 访问Windows 共享文件的方法
  8. arr数组怎么取值_记一次思否问答的问题思考:Vue为什么不能检测数组变动
  9. GY39传感器C语言代码,详解Arduino GY-30数字光强传感器应用
  10. Linux内核模块下载到板子,在Linux内核中增加新驱动模块
  11. Servlet-Session
  12. 基于MinimaxAlpha-Beta剪枝和强化学习的播棋(Mancala)AI
  13. Linux yum源文件
  14. 区块链数据分析1-如何查询token余额
  15. 诸行无常、诸法无我、诸漏皆苦、涅槃寂静
  16. 基于jsp+mysql+Spring+SpringMVC+mybatis的大学生缴费系统
  17. 【一文读懂】python 中的 numpy.reshape(a, newshape, order=‘C‘) 详细说明及实例讲解
  18. 思科c系列服务器cimc密码,UCS C系列服务器故障排除提示.PDF
  19. LPC1768 SSP0驱动示例——SD卡驱动
  20. php 获取指定日期的周几,周始,周末

热门文章

  1. TUXEDO在自动语音应答系统中的使用
  2. 斯科特·杨《如何高效学习》书评
  3. Aspera的下载与安装使用
  4. 视频拼接融合产品的产品与架构设计(一)
  5. java两个list合并 去重_java 快速合并去重List
  6. 线程基础8-quene讲解
  7. 企业微信scrm能否解决企业获客难与获客成本高的问题
  8. 关于ThinkPad E540 i7版本的完美Wi-Fi黑苹果
  9. 数值分析-顺序高斯消去法C语言代码
  10. 点云PCD转成bin