使用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实现统计英文单词个数及字符串分割代码
May 28 Python
Python实现股市信息下载的方法
Jun 15 Python
python实现分页效果
Oct 25 Python
python线程池(threadpool)模块使用笔记详解
Nov 17 Python
python中使用zip函数出现错误的原因
Sep 28 Python
Python文件常见操作实例分析【读写、遍历】
Dec 10 Python
2019 Python最新面试题及答案16道题
Apr 11 Python
简单了解python gevent 协程使用及作用
Jul 22 Python
Django CBV与FBV原理及实例详解
Aug 12 Python
python基础教程之while循环
Aug 14 Python
python 中的9个实用技巧,助你提高开发效率
Aug 30 Python
Python就将所有的英文单词首字母变成大写
Feb 12 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执行速度全攻略(上)
2006/10/09 PHP
php动态实现表格跨行跨列实现代码
2012/11/06 PHP
PHP页面间参数传递的四种方法详解
2013/06/09 PHP
360通用php防护代码(使用操作详解)
2013/06/18 PHP
php 字符串中的\n换行符无效、不能换行的解决方法
2014/04/02 PHP
PHP给源代码加密的几种方法汇总(推荐)
2018/02/06 PHP
Add a Table to a Word Document
2007/06/15 Javascript
JS处理VBArray的函数使用说明
2008/05/11 Javascript
优化javascript的执行效率一些方法总结
2013/12/25 Javascript
js中的for如何实现foreach中的遍历
2014/05/31 Javascript
实例讲解JQuery中this和$(this)区别
2014/12/08 Javascript
js实现顶部可折叠的菜单工具栏效果实例
2015/05/09 Javascript
DWR3 访问WEB元素的两种方法实例详解
2017/01/03 Javascript
Vue通过input筛选数据
2020/10/26 Javascript
redux-saga 初识和使用
2018/03/10 Javascript
laydate时间日历插件使用方法详解
2018/11/14 Javascript
Vue项目从webpack3.x升级webpack4不完全指南
2019/04/28 Javascript
解决webpack多页面内存溢出的方法示例
2019/10/08 Javascript
解决 window.onload 被覆盖的问题方法
2020/01/14 Javascript
[01:14:55]EG vs Spirit Supermajor 败者组 BO3 第三场 6.4
2018/06/05 DOTA
Python写的一个简单监控系统
2015/06/19 Python
使用Python编写一个最基础的代码解释器的要点解析
2016/07/12 Python
对django后台admin下拉框进行过滤的实例
2019/07/26 Python
Python搭建代理IP池实现检测IP的方法
2019/10/27 Python
Python爬虫防封ip的一些技巧
2020/08/06 Python
Godiva巧克力英国官网:比利时歌帝梵巧克力
2018/08/28 全球购物
英国银首饰公司:e&e Jewellery
2021/02/11 全球购物
软件工程师面试题
2012/06/25 面试题
团员的自我评价
2013/12/01 职场文书
高二历史教学反思
2014/01/25 职场文书
市场拓展计划书
2014/05/03 职场文书
店铺转让协议书(2014版)
2014/09/23 职场文书
2014年小学辅导员工作总结
2014/12/23 职场文书
晚会开场白和结束语
2015/05/29 职场文书
Vue项目打包、合并及压缩优化网页响应速度
2021/07/07 Vue.js
Redis RDB技术底层原理详解
2021/09/04 Redis