使用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 Tkinter GUI编程入门介绍
Mar 10 Python
Python遍历指定文件及文件夹的方法
May 09 Python
Python批量创建迅雷任务及创建多个文件
Feb 13 Python
结合Python的SimpleHTTPServer源码来解析socket通信
Jun 27 Python
python九九乘法表的实例
Sep 26 Python
python决策树之C4.5算法详解
Dec 20 Python
python跳过第一行快速读取文件内容的实例
Jul 12 Python
Django组件之cookie与session的使用方法
Jan 10 Python
python爬虫 execjs安装配置及使用
Jul 30 Python
Python Django 命名空间模式的实现
Aug 09 Python
Python算法中的时间复杂度问题
Nov 19 Python
python 基于selectors库实现文件上传与下载
Dec 31 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
php 文件上传类代码
2011/08/06 PHP
PHP+JS实现大规模数据提交的方法
2015/07/02 PHP
Yii 2中的load()和save()示例详解
2017/08/03 PHP
PHP的PDO大对象(LOBs)
2019/01/27 PHP
php7性能提升的原因详解
2019/10/13 PHP
Javascript 网页水印(非图片水印)实现代码
2010/03/01 Javascript
js里的prototype使用示例
2010/11/19 Javascript
JavaScript新窗口与子窗口传值详解
2014/02/11 Javascript
JavaScript中的闭包(Closure)详细介绍
2014/12/30 Javascript
ES5 ES6中Array对象去除重复项的方法总结
2017/04/27 Javascript
vue仿淘宝订单状态的tab切换效果
2020/06/23 Javascript
微信小程序用户位置权限的获取方法(拒绝后提醒)
2018/11/15 Javascript
JS浅拷贝和深拷贝原理与实现方法分析
2019/02/28 Javascript
jQuery分组选择器简单用法示例
2019/04/04 jQuery
vue 实现小程序或商品秒杀倒计时
2019/04/14 Javascript
js笔试题-接收get请求参数
2019/06/15 Javascript
vue.js中ref和$refs的使用及示例讲解
2019/08/14 Javascript
vue 添加和编辑用同一个表单,el-form表单提交后清空表单数据操作
2020/08/03 Javascript
解决antd 下拉框 input [defaultValue] 的值的问题
2020/10/31 Javascript
Python基于PycURL实现POST的方法
2015/07/25 Python
django rest framework之请求与响应(详解)
2017/11/06 Python
一些Centos Python 生产环境的部署命令(推荐)
2018/05/07 Python
Python基于滑动平均思想实现缺失数据填充的方法
2019/02/21 Python
Python 抓取微信公众号账号信息的方法
2019/06/14 Python
使用pyinstaller打包PyQt4程序遇到的问题及解决方法
2019/06/24 Python
python多线程共享变量的使用和效率方法
2019/07/16 Python
python检测服务器端口代码实例
2019/08/31 Python
python实现高斯(Gauss)迭代法的例子
2019/11/20 Python
Django 允许局域网中的机器访问你的主机操作
2020/05/13 Python
PHP面试题及答案二
2015/05/23 面试题
一些关于MySql加速和优化的面试题
2014/01/30 面试题
地理信息科学专业推荐信
2014/09/08 职场文书
党员检讨书范文
2014/12/27 职场文书
优秀学生干部主要事迹材料
2015/11/04 职场文书
幼儿园音乐教学反思
2016/02/18 职场文书
2016年第十四个公民道德宣传日活动总
2016/04/01 职场文书