ITK 实现多张图像转成单个nii.gz或mha文件案例


Posted in Python onJuly 01, 2020

主要实现的部分是利用NameGeneratorType读入系列图像,见头文件#include "itkNumericSeriesFileNames.h"。

需要包含的头文件有:

#include "itkImage.h"
#include "itkImageSeriesReader.h"
#include "itkImageFileWriter.h"
#include "itkNumericSeriesFileNames.h"
#include "itkPNGImageIO.h"//转成JPG格式,将PNG替换成JPEG就可以。

int main( int argc, char ** argv )
{
 // 需要四个参数,分别是程序起点,第一张图像的编号和最后一张图像的变化,输出文件的名称(包含路径)
 if( argc < 4 )
 {
 std::cerr << "Usage: " << std::endl;
 std::cerr << argv[0] << " firstSliceValue lastSliceValue outputImageFile " << std::endl;
 return EXIT_FAILURE;
 }
//定义读入图像类型,创建对应的reader
 typedef unsigned char  PixelType;
 const unsigned int Dimension = 3;

 typedef itk::Image< PixelType, Dimension > ImageType;
 
 typedef itk::ImageSeriesReader< ImageType > ReaderType;
 typedef itk::ImageFileWriter< ImageType > WriterType;

 ReaderType::Pointer reader = ReaderType::New();
 WriterType::Pointer writer = WriterType::New();

//输入参数定义
 const unsigned int first = atoi( argv[1] );
 const unsigned int last = atoi( argv[2] );
 const char * outputFilename = argv[3];//输出的文件名加上对应格式的后缀即可,如mha或nii.gz

//系列图像读入
 typedef itk::NumericSeriesFileNames NameGeneratorType;
 NameGeneratorType::Pointer nameGenerator = NameGeneratorType::New();
 nameGenerator->SetSeriesFormat( "vwe%03d.png" );

 nameGenerator->SetStartIndex( first );
 nameGenerator->SetEndIndex( last );
 nameGenerator->SetIncrementIndex( 1 );//张数的增长间距

//读入图像,写出图像,进行Update
 reader->SetImageIO( itk::PNGImageIO::New() );
 reader->SetFileNames( nameGenerator->GetFileNames() );
 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;
 }

 return EXIT_SUCCESS;
}

补充知识:将一组png图片转为nii.gz

主要之前使用matlab 对numpy数组存放方式不是很了解.应该是[z,x,y]这样在itksnamp上看就对了

import SimpleITK as sitk
import glob
import numpy as np
from PIL import Image
import cv2
 
import matplotlib.pyplot as plt # plt 用于显示图片
def save_array_as_nii_volume(data, filename, reference_name = None):
 """
 save a numpy array as nifty image
 inputs:
 data: a numpy array with shape [Depth, Height, Width]
 filename: the ouput file name
 reference_name: file name of the reference image of which affine and header are used
 outputs: None
 """
 img = sitk.GetImageFromArray(data)
 if(reference_name is not None):
 img_ref = sitk.ReadImage(reference_name)
 img.CopyInformation(img_ref)
 sitk.WriteImage(img, filename)
 
image_path = './oriCvLab/testCvlab/img/'
image_arr = glob.glob(str(image_path) + str("/*"))
image_arr.sort()
 
print(image_arr, len(image_arr))
allImg = []
allImg = np.zeros([165, 768,1024], dtype='uint8')
for i in range(len(image_arr)):
 single_image_name = image_arr[i]
 img_as_img = Image.open(single_image_name)
 # img_as_img.show()
 img_as_np = np.asarray(img_as_img)
 allImg[i, :, :] = img_as_np
 
# np.transpose(allImg,[2,0,1])
save_array_as_nii_volume(allImg, './testImg.nii.gz')
print(np.shape(allImg))
img = allImg[:, :, 55]
# plt.imshow(img, cmap='gray')
# plt.show()

以上这篇ITK 实现多张图像转成单个nii.gz或mha文件案例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python3.6通过自带的urllib通过get或post方法请求url的实例
May 10 Python
利用Python如何实现数据驱动的接口自动化测试
May 11 Python
Python3爬虫学习入门教程
Dec 11 Python
Python通过for循环理解迭代器和生成器实例详解
Feb 16 Python
Python生成rsa密钥对操作示例
Apr 26 Python
Python 窗体(tkinter)按钮 位置实例
Jun 13 Python
Pandas库之DataFrame使用的学习笔记
Jun 21 Python
python 计算两个列表的相关系数的实现
Aug 29 Python
Python 使用threading+Queue实现线程池示例
Dec 21 Python
3种python调用其他脚本的方法
Jan 06 Python
python+selenium自动化实战携带cookies模拟登陆微博
Jan 19 Python
解决pytorch 保存模型遇到的问题
Mar 03 Python
Python环境管理virtualenv&amp;virtualenvwrapper的配置详解
Jul 01 #Python
读取nii或nii.gz文件中的信息即输出图像操作
Jul 01 #Python
使用SimpleITK读取和保存NIfTI/DICOM文件实例
Jul 01 #Python
使用Nibabel库对nii格式图像的读写操作
Jul 01 #Python
python 读取.nii格式图像实例
Jul 01 #Python
使用npy转image图像并保存的实例
Jul 01 #Python
python实现npy格式文件转换为txt文件操作
Jul 01 #Python
You might like
Discuz板块横排显示图片的实现方法
2007/05/28 PHP
Laravle eloquent 多对多模型关联实例详解
2017/11/22 PHP
javascript 打印页面代码
2009/03/24 Javascript
基于jQuery试卷自动排版系统
2010/07/18 Javascript
JavaScript中的this关键字使用详解
2015/08/14 Javascript
jQuery Ajax 加载数据时异步显示加载动画
2016/08/01 Javascript
BootStrap中Table分页插件使用详解
2016/10/09 Javascript
Zepto实现密码的隐藏/显示
2017/04/07 Javascript
微信小程序实现下载进度条的方法
2017/12/08 Javascript
一种angular的方法级的缓存注解(装饰器)
2018/03/13 Javascript
vue2中使用sass并配置全局的sass样式变量的方法
2018/09/04 Javascript
Vue最新防抖方案(必看篇)
2019/10/30 Javascript
JavaScript变量Dom对象的所有属性
2020/04/30 Javascript
jquery绑定事件 bind和on的用法与区别分析
2020/05/22 jQuery
vue打包npm run build时候界面报错的解决
2020/08/13 Javascript
[07:40]DOTA2每周TOP10 精彩击杀集锦vol.4
2014/06/25 DOTA
Python运行的17个时新手常见错误小结
2012/08/07 Python
Python2.x版本中maketrans()方法的使用介绍
2015/05/19 Python
浅述python中argsort()函数的实例用法
2017/03/30 Python
python探索之BaseHTTPServer-实现Web服务器介绍
2017/10/28 Python
Python import与from import使用及区别介绍
2018/09/06 Python
Python实现获取汉字偏旁部首的方法示例【测试可用】
2018/12/18 Python
Python第三方库face_recognition在windows上的安装过程
2019/05/03 Python
python 图像的离散傅立叶变换实例
2020/01/02 Python
使用Keras预训练模型ResNet50进行图像分类方式
2020/05/23 Python
Selenium关闭INFO:CONSOLE提示的解决
2020/12/07 Python
Crocs卡骆驰洞洞鞋日本官方网站:Crocs日本
2016/08/25 全球购物
ASICS印度官方网站:日本专业运动品牌
2020/06/20 全球购物
高中生自我鉴定范文
2013/10/30 职场文书
说明书格式及范文
2014/05/07 职场文书
给市场的环保建议书
2014/05/14 职场文书
企业形象策划方案
2014/05/29 职场文书
爱护公共设施倡议书
2014/08/29 职场文书
教师见习总结范文
2015/06/23 职场文书
2017寒假社会实践心得体会范文
2016/01/14 职场文书
python实现自定义日志的具体方法
2021/05/28 Python