使用SimpleITK读取和保存NIfTI/DICOM文件实例


Posted in Python onJuly 01, 2020

我就废话不多说了,大家还是直接看代码吧~

## using simpleITK to load and save data.
import SimpleITK as sitk
itk_img = sitk.ReadImage('./nifti.nii.gz')
img = sitk.GetArrayFromImage(itk_img)
print("img shape:",img.shape)

## save 
out = sitk.GetImageFromArray(img)
# # out.SetSpacing(itk_img.GetSpacing())
# # out.SetOrigin(itk_img.GetOrigin())
sitk.WriteImage(out,'simpleitk_save.nii.gz')

读取DICOM序列

import sys
import SimpleITK as sitk
import numpy as np

dcm_directory = "./flair_dicom"
series_ids = sitk.ImageSeriesReader.GetGDCMSeriesIDs(dcm_directory)
print("series ids:",series_ids)

if not series_ids:
 print("ERROR: given directory dose not a DICOM series.")
 sys.exit(1)

series_file_names = sitk.ImageSeriesReader.GetGDCMSeriesFileNames(dcm_directory,series_ids[0])
series_reader = sitk.ImageSeriesReader()
series_reader.SetFileNames(series_file_names)
image3D = series_reader.Execute()
size = image3D.GetSize()
print( "Image size:", size[0], size[1], size[2] )

image_array = sitk.GetArrayFromImage(image3D)

# SimpleITK读取的图像数据的坐标顺序为zyx,即从多少张切片到单张切片的宽和高;
# 而据SimpleITK Image获取的origin和spacing的坐标顺序则是xyz

origin = image3D.GetOrigin()
spacing = image3D.GetSpacing()
print("origin:",origin," spacing:",spacing)

读取DICOM单个文件

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

补充知识:itk 读取图像,两种格式之间转换

我就废话不多说了,大家还是直接看代码吧~

/*******************************************************
 
	控制台运行程序
	输入:
		程序名称
		读取图像文件名
		保存图像文件名
	输出:
		保存另一种类型的图像
	功能:
		图像在jpeg和bmp两种格式之间互换
********************************************************/
 
#include "itkImageFileReader.h"
#include "itkImageFileWriter.h"
#include "itkImageIOFactory.h"
#include "itkBMPImageIOFactory.h"
#include "itkJPEGImageIOFactory.h"
#include <iostream>
 
int main(int argc , char *argv[])
{
	if (argc < 3)
	{
		std::cerr << "Usage: " << std::endl;
		std::cerr << argv[0] << " inputImageFile outputImageFile " << std::endl;
		return EXIT_FAILURE;
	}
 
	itk::BMPImageIOFactory::RegisterOneFactory();
	itk::JPEGImageIOFactory::RegisterOneFactory();
 
	typedef itk::Image< unsigned char, 2 > ImageType;
	typedef itk::ImageFileReader< ImageType > ReaderType;
	typedef itk::ImageFileWriter< ImageType > WriterType;
 
	ReaderType::Pointer reader = ReaderType::New();
	WriterType::Pointer writer = WriterType::New();
 
	const char * inputFilename = argv[1];
	const char * outputFilename = argv[2];
 
	reader->SetFileName( inputFilename );
	writer->SetFileName( outputFilename );
 
	writer->SetInput( reader->GetOutput() );
	try
	{
		writer->Update();
	}
	catch( itk::ExceptionObject & err )
	{
		std::cerr << "ExceptionObject caught !" << std::endl;
		std::cerr << err << std::endl;
		return EXIT_FAILURE;
	}
 
	system("pause");
	return 0;
}

以上这篇使用SimpleITK读取和保存NIfTI/DICOM文件实例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python解析html开发库pyquery使用方法
Feb 07 Python
详细解读Python的web.py框架下的application.py模块
May 02 Python
深入探究Python中变量的拷贝和作用域问题
May 05 Python
Python selenium文件上传方法汇总
Nov 19 Python
Python算术运算符实例详解
May 31 Python
快速了解Python中的装饰器
Jan 11 Python
Python字典及字典基本操作方法详解
Jan 30 Python
python3 tkinter实现点击一个按钮跳出另一个窗口的方法
Jun 13 Python
Django密码系统实现过程详解
Jul 19 Python
基于Tensorflow一维卷积用法详解
May 22 Python
Flask中sqlalchemy模块的实例用法
Aug 02 Python
详解使用scrapy进行模拟登陆三种方式
Feb 21 Python
使用Nibabel库对nii格式图像的读写操作
Jul 01 #Python
python 读取.nii格式图像实例
Jul 01 #Python
使用npy转image图像并保存的实例
Jul 01 #Python
python实现npy格式文件转换为txt文件操作
Jul 01 #Python
python与pycharm有何区别
Jul 01 #Python
tensorflow 动态获取 BatchSzie 的大小实例
Jun 30 #Python
浅谈TensorFlow之稀疏张量表示
Jun 30 #Python
You might like
在WordPress中实现发送http请求的相关函数解析
2015/12/29 PHP
Zend Framework教程之Resource Autoloading用法实例
2016/03/08 PHP
PHP进阶学习之垃圾回收机制详解
2019/06/18 PHP
PHP 图片处理
2020/09/16 PHP
用客户端js实现带省略号的分页
2013/04/27 Javascript
jQuery实现的多选框多级联动插件
2014/05/02 Javascript
js事件监听器用法实例详解
2015/06/01 Javascript
JavaScript获得指定对象大小的方法
2015/07/01 Javascript
JS 动态加载js文件和css文件 同步/异步的两种简单方式
2016/09/23 Javascript
Swiper 4.x 使用方法(移动端网站的内容触摸滑动)
2018/05/17 Javascript
vue实现可视化可拖放的自定义表单的示例代码
2019/03/20 Javascript
JavaScript判断对象和数组的两种方法
2019/05/31 Javascript
ES6 Promise对象概念及用法实例详解
2019/10/15 Javascript
js判断在哪个浏览器打开项目的方法
2020/01/21 Javascript
js中复选框的取值及赋值示例详解
2020/10/18 Javascript
详解Vue3 Teleport 的实践及原理
2020/12/02 Vue.js
Python制作简单的网页爬虫
2015/11/22 Python
让Python更加充分的使用Sqlite3
2017/12/11 Python
使用Eclipse如何开发python脚本
2018/04/11 Python
python format 格式化输出方法
2018/07/16 Python
详解python中的hashlib模块的使用
2019/04/22 Python
python选取特定列 pandas iloc,loc,icol的使用详解(列切片及行切片)
2019/08/06 Python
python支付宝支付示例详解
2019/08/22 Python
Python 3.6 中使用pdfminer解析pdf文件的实现
2019/09/25 Python
python3 tkinter实现添加图片和文本
2019/11/26 Python
Html5新增标签有哪些
2017/04/13 HTML / CSS
意大利单身交友网站:Meetic
2020/07/12 全球购物
C语言开发工程师测试题
2016/12/20 面试题
机电一体化应届生求职信范文
2014/01/24 职场文书
学生偷窃检讨书
2014/09/25 职场文书
人事代理委托书
2014/09/27 职场文书
班主任师德师风自我剖析材料
2014/10/02 职场文书
投标文件签署授权委托书范本
2014/10/12 职场文书
2016先进集体事迹材料范文
2016/02/25 职场文书
JS代码编译器Monaco使用方法
2021/06/11 Javascript
Spring-cloud Config Server的3种配置方式
2021/09/25 Java/Android