关于SimpleITK
随着最近几大肺部图像处理相关的竞赛的推出,如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:
- import SimpleITK as sitk
- import numpy as np
- reader = sitk.ImageSeriesReader()
- dicom_names = reader.GetGDCMSeriesFileNames(case_path)
- reader.SetFileNames(dicom_names)
- image = reader.Execute()
- image_array = sitk.GetArrayFromImage(image) # z, y, x
- origin = image.GetOrigin() # x, y, z
- spacing = image.GetSpacing() # x, y, z
需要注意的是,SimpleITK读取的图像数据的坐标顺序为zyx,即从多少张切片到单张切片的宽和高;而据SimpleITK Image获取的origin和spacing的坐标顺序则是xyz。这些需要特别注意。
读取DICOM单张图片
可以将一个DICOM序列作为一个整体一次读入,也可以一张一张地读入每张切片:
- import SimpleITK as sitk
- import numpy as np
- image = sitk.ReadImage(slice_path)
- image_array = sitk.GetArrayFromImage(image) # z, y, x
这里需要注意的除了坐标顺序是zyx之外,还需注意,即使读取单张切片,所得到的结果也是3维的,只不过第一维是1。
读取mhd文件
涉及DICOM序列时,为了传输方便(从上百个dcm文件到一个mhd文件),很多情况下以mhd文件格式进行呈现,不过mhd文件只是一个很小的包含数据信息的文件,同时搭配的通常还有一个二进制的数据文件(格式为raw或zraw等)。使用SimpleITK读取这种文件也比较方便。
- import SimpleITK as sitk
- import numpy as np
- image = sitk.ReadImage(mhd_path)
- image_array = sitk.GetArrayFromImage(image) # z, y, x
- origin = image.GetOrigin() # x, y, z
- ...
有时候不想整个读取数据(因为比较大,读取处理比较慢),想要读取的只是一些基本信息,比如origin、spacing等等。这时可以只读取mhd文件,据此获取信息,读取方法比较简单,不再赘述。
2.处理文件
处理DICOM文件主要有插值等操作,可以直接使用SimpleITK(或者说是ITK)的相关函数,并通过pipeline结构进行处理。
插值
- import SimpleITK as sitk
- reader = sitk.ImageSeriesReader()
- dicom_names = reader.GetGDCMSeriesFileNames(case_path) reader.SetFileNames(dicom_names)
- image = reader.Execute()
- resample = sitk.ResampleImageFilter()
- resample.SetOutputDirection(image.GetDirection())
- resample.SetOutputOrigin(image.GetOrigin())
- newspacing = [1, 1, 1]
- resample.SetOutputSpacing(newspacing)
- newimage = resample.Execute(image)
关于SimpleITK相关推荐
- 影像组学视频学习笔记(33)-使用SimpleITK实现医学影像差值、Li‘s have a solution and plan.
作者:北欧森林 链接:https://www.jianshu.com/p/afcd06221ea4 来源:简书,已获转载授权 RadiomicsWorld.com "影像组学世界" ...
- 影像组学视频学习笔记(32)-使用SimpleITK进行N4偏置场校正、Li‘s have a solution and plan.
作者:北欧森林 链接:https://www.jianshu.com/p/ae0f502dc146 来源:简书,已获授权转载 RadiomicsWorld.com "影像组学世界" ...
- 影像组学视频学习笔记(27)-SimpleITK包介绍、Li‘s have a solution and plan.
本笔记来源于B站Up主: 有Li 的影像组学的系列教学视频 本节(27)主要讲解: 功能强大的图像处理工具SimpleITK包 视频中李博士演示了SimpleITK的两个基本功能:图像格式转换以及图像 ...
- pytorch环境下“No module named SimpleITK”的解决办法
写在这里的初衷,一是备忘,二是希望得到高人指点,三是希望能遇到志同道合的朋友. 目录 一.问题 二.根本原因 三.解决办法 一.问题 目前,尝试着通过pytorch对医学图像进行处理,运行代码,出现的 ...
- python中“SimpleITK”模块完美快速安装
写在这里的初衷,一是备忘,二是希望得到高人指点,三是希望能遇到志同道合的朋友. 目录 1.SimpleITK简介 2.通过cmd命令窗口安装 3.通过Anaconda Prompt命令窗口安装 1.S ...
- 【深度学习】图像自动处理工具SimpleITK的使用(Python)
[深度学习]图像自动处理工具SimpleITK的使用(Python) 文章目录 1 Python安装第三方库SimpleITK 2 SimpleITK处理医学图像 3 图像增强.去噪.边缘检测(Sim ...
- 搭建Ubuntu18.04+Anaconda3.x+Pycharm+SimpleITK(二)
python 安装 SimpleITK SimpleITK 安装: pip install SimpleITK
- Ubuntu中python调用SimpleITK来显示图像
misc.imshow ipython import os from scipy import misc dataDir = os.environ["HOME"] + " ...
- Ubuntu下安装cmake,配置ITK 和 SimpleITK, VTK(已测试可执行)
curses库 在安装cmake之前应该先安装一下curses库.如果系统中有curses库的话,cmake将生成一个可执行文件ccmake,它是一个基于文本程序的终端,有点类似windows GUI ...
- Python SimpleITK实现医学图像增强算法
1.对数变换 图像对数变换首先将图像从SimpleITK图像数据转成Numpy矩阵数据,然后采用Numpy的log1p()函数来计算数据的log(1+x)变换,由于1+x不能小于零,因此这里我们使用图 ...
最新文章
- 离开域后打开Office慢 Openfiler
- Android环境下通过C框架层控制WIFI【转】
- Windows内存管理学习笔记(一)—— 线性地址的管理
- php interbase,PHP: Firebird/InterBase - Manual
- rust为什么显示不了国服_Rust编程语言初探
- Android 在 Google 开发者大会上发布了哪些更新? | Google 开发者大会 2018
- linux 访问Windows 共享文件的方法
- arr数组怎么取值_记一次思否问答的问题思考:Vue为什么不能检测数组变动
- GY39传感器C语言代码,详解Arduino GY-30数字光强传感器应用
- Linux内核模块下载到板子,在Linux内核中增加新驱动模块
- Servlet-Session
- 基于MinimaxAlpha-Beta剪枝和强化学习的播棋(Mancala)AI
- Linux yum源文件
- 区块链数据分析1-如何查询token余额
- 诸行无常、诸法无我、诸漏皆苦、涅槃寂静
- 基于jsp+mysql+Spring+SpringMVC+mybatis的大学生缴费系统
- 【一文读懂】python 中的 numpy.reshape(a, newshape, order=‘C‘) 详细说明及实例讲解
- 思科c系列服务器cimc密码,UCS C系列服务器故障排除提示.PDF
- LPC1768 SSP0驱动示例——SD卡驱动
- php 获取指定日期的周几,周始,周末