使用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编程中JSON模块的使用
Oct 15 Python
shelve  用来持久化任意的Python对象实例代码
Oct 12 Python
Python反射用法实例简析
Dec 22 Python
Python简单定义与使用二叉树示例
May 11 Python
解决Django的request.POST获取不到内容的问题
May 28 Python
解决pycharm下os.system执行命令返回有中文乱码的问题
Jul 07 Python
Django文件存储 默认存储系统解析
Aug 02 Python
python实现读取excel文件中所有sheet操作示例
Aug 09 Python
在jupyter notebook中调用.ipynb文件方式
Apr 14 Python
python logging 重复写日志问题解决办法详解
Aug 04 Python
Ubuntu权限不足无法创建文件夹解决方案
Nov 14 Python
python实战之一步一步教你绘制小猪佩奇
Apr 22 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
PHP4与PHP3中一个不兼容问题的解决方法
2006/10/09 PHP
Thinkphp模板中使用自定义函数的方法
2012/09/23 PHP
PHP内核探索之解释器的执行过程
2015/12/22 PHP
PHP连接MSSQL方法汇总
2016/02/05 PHP
php面向对象程序设计入门教程
2019/06/22 PHP
javascript编程起步(第六课)
2007/02/27 Javascript
JavaScript 在各个浏览器中执行的耐性
2009/04/06 Javascript
JavaScript prototype对象的属性说明
2010/03/13 Javascript
jquery监控数据是否变化(修正版)
2011/04/12 Javascript
js中字符替换函数String.replace()使用技巧
2011/08/14 Javascript
解决Extjs上传图片无法预览的解决方法
2012/03/22 Javascript
jQuery常见开发技巧详细整理
2013/01/02 Javascript
将nodejs打包工具整合到鼠标右键的方法
2013/05/11 NodeJs
jquery控制左右箭头滚动图片列表的实例
2013/05/20 Javascript
javascript中apply和call方法的作用及区别说明
2014/02/14 Javascript
javascript创建函数的20种方式汇总
2015/06/23 Javascript
值得学习的bootstrap fileinput文件上传工具
2016/11/08 Javascript
Vue2.0基于vue-cli+webpack父子组件通信(实例讲解)
2017/09/14 Javascript
Grunt针对静态文件的压缩,版本控制打包的实例讲解
2017/09/29 Javascript
浅谈用Webpack路径压缩图片上传尺寸获取的问题
2018/02/22 Javascript
简单的vuex 的使用案例笔记
2018/04/13 Javascript
vue前端框架—Mint UI详解(更适用于移动端)
2019/04/30 Javascript
Node.JS用纯JavaScript生成图片或滑块式验证码功能
2019/09/12 Javascript
Servlet返回的数据js解析2种方法
2019/12/12 Javascript
python实现猜单词小游戏
2020/05/22 Python
python+unittest+requests实现接口自动化的方法
2018/11/29 Python
python实现的MySQL增删改查操作实例小结
2018/12/19 Python
在Django下测试与调试REST API的方法详解
2019/08/29 Python
python针对mysql数据库的连接、查询、更新、删除操作示例
2019/09/11 Python
CSS3 绘制BMW logo实的现代码
2013/04/25 HTML / CSS
HTML5 3D书本翻页动画的实现示例
2019/08/28 HTML / CSS
日本一家专门经营各种箱包的大型网站:Traveler Store
2016/08/03 全球购物
英国现代绅士品牌:Hackett
2017/12/17 全球购物
土木工程实习生自我鉴定
2013/09/19 职场文书
golang通过递归遍历生成树状结构的操作
2021/04/28 Golang
使用Docker容器部署rocketmq单机的全过程
2022/04/03 Servers