使用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 PyQt5标准对话框用法示例
Aug 23 Python
让代码变得更易维护的7个Python库
Oct 09 Python
python实现简易数码时钟
Feb 19 Python
Python实现一个数组除以一个数的例子
Jul 20 Python
python实现截取屏幕保存文件,删除N天前截图的例子
Aug 27 Python
python应用文件读取与登录注册功能
Sep 23 Python
python代码实现将列表中重复元素之间的内容全部滤除
May 22 Python
为什么python比较流行
Jun 19 Python
Python魔术方法专题
Jun 19 Python
教你怎么用Python实现GIF动图的提取及合成
Jun 15 Python
Python 快速验证代理IP是否有效的方法实现
Jul 15 Python
Python使用BeautifulSoup4修改网页内容
May 20 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中SSO Cookie登录分析和实现
2015/11/06 PHP
PHP堆栈调试操作简单示例
2018/06/15 PHP
PHP操作路由器实现方法示例
2019/04/27 PHP
PHP实现简单登录界面
2019/10/23 PHP
json 定义
2008/06/10 Javascript
JS 遮照层实现代码
2010/03/31 Javascript
JavaScript将相对地址转换为绝对地址示例代码
2013/07/19 Javascript
javascript获取网页宽高方法汇总
2015/07/19 Javascript
jQuery中的一些常见方法小结(推荐)
2016/06/13 Javascript
jQuery代码性能优化的10种方法
2016/06/21 Javascript
Web打印解决方案之普通报表打印功能
2016/08/29 Javascript
JavaScript中正则表达式使数字、中文或指定字符高亮显示
2017/10/31 Javascript
详解使用 Node.js 开发简单的脚手架工具
2018/06/08 Javascript
mac上配置Android环境变量的方法
2018/07/08 Javascript
jquery.pagination.js分页使用教程
2018/10/23 jQuery
vue发送websocket请求和http post请求的实例代码
2019/07/11 Javascript
vue draggable resizable 实现可拖拽缩放的组件功能
2019/07/15 Javascript
vue打包npm run build时候界面报错的解决
2020/08/13 Javascript
js实现随机点名
2021/01/19 Javascript
[03:07]DOTA2英雄基础教程 冰霜诅咒极寒幽魂
2013/12/06 DOTA
[08:44]DOTA2发布会群星聚首 我们都是刀塔人
2014/03/21 DOTA
[01:24:34]2014 DOTA2华西杯精英邀请赛5 24 DK VS LGD
2014/05/25 DOTA
使用Python的Twisted框架编写简单的网络客户端
2015/04/16 Python
Python实现ssh批量登录并执行命令
2016/10/25 Python
分享一个简单的python读写文件脚本
2017/11/25 Python
pycharm下查看python的变量类型和变量内容的方法
2018/06/26 Python
Python Django基础二之URL路由系统
2019/07/18 Python
英国奢华护肤、美容和Spa品牌:Temple Spa
2019/11/02 全球购物
瑞士最大的图书贸易公司:Orell Füssli
2019/12/28 全球购物
介绍一下木马病毒的种类
2015/07/26 面试题
文明家庭先进事迹材料
2014/05/14 职场文书
离退休人员聘用协议书
2014/11/24 职场文书
员工表扬信怎么写
2015/05/05 职场文书
2016高三毕业赠言寄语
2015/12/04 职场文书
React Fragment介绍与使用详解
2021/11/11 Javascript
千万级用户系统SQL调优实战分享
2022/03/03 MySQL