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 相关文章推荐
Python文件及目录操作实例详解
Jun 04 Python
python GUI实现小球满屏乱跑效果
May 09 Python
简单了解python高阶函数map/reduce
Jun 28 Python
Python CVXOPT模块安装及使用解析
Aug 01 Python
Python 实例方法、类方法、静态方法的区别与作用
Aug 14 Python
Django框架 信号调度原理解析
Sep 04 Python
python异常处理和日志处理方式
Dec 24 Python
python实现大战外星人小游戏实例代码
Dec 26 Python
Python-opencv 双线性插值实例
Jan 17 Python
对tensorflow中cifar-10文档的Read操作详解
Feb 10 Python
Python使用random模块实现掷骰子游戏的示例代码
Apr 29 Python
Python语法学习之进程的创建与常用方法详解
Apr 08 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
纯真IP数据库的应用 IP地址转化成十进制
2009/06/14 PHP
php中比较简单的导入phpmyadmin生成的sql文件的方法
2011/06/28 PHP
探讨方法的重写(覆载)详解
2013/06/08 PHP
新浪中用来显示flash的函数
2007/04/02 Javascript
jQuery 剧场版 你必须知道的javascript
2009/05/27 Javascript
JavaScript高级程序设计 DOM学习笔记
2011/09/10 Javascript
FF IE浏览器修改标签透明度的方法
2014/01/27 Javascript
js实现点击图片改变页面背景图的方法
2015/02/28 Javascript
客户端验证用户名和密码的方法详解
2016/06/16 Javascript
老生常谈JavaScript 正则表达式语法
2016/08/20 Javascript
jQuery UI仿淘宝搜索下拉列表功能
2017/01/10 Javascript
详解Vue2中组件间通信的解决全方案
2017/07/28 Javascript
JS使用正则表达式找出最长连续子串长度
2017/10/26 Javascript
Angular17之Angular自定义指令详解
2018/01/21 Javascript
vue2.0+vue-dplayer实现hls播放的示例
2018/03/02 Javascript
Vue.js 实现微信公众号菜单编辑器功能(一)
2018/05/08 Javascript
Vue编写可显示周和月模式的日历 Vue自定义日历内容的显示
2019/06/26 Javascript
小程序实现图片预览裁剪插件
2019/11/22 Javascript
微信小程序文章列表功能完整实例
2020/06/03 Javascript
jquery简易手风琴插件的封装
2020/10/13 jQuery
[59:35]DOTA2上海特级锦标赛主赛事日 - 3 败者组第三轮#1COL VS Alliance第二局
2016/03/04 DOTA
[02:00]最后,我终于出了辉耀
2018/03/27 DOTA
[01:12:08]LGD vs OG 2019国际邀请赛淘汰赛 胜者组 BO3 第一场 8.24
2019/09/10 DOTA
python实现的AES双向对称加密解密与用法分析
2017/05/02 Python
Python matplotlib绘图可视化知识点整理(小结)
2018/03/16 Python
python pickle存储、读取大数据量列表、字典数据的方法
2019/07/07 Python
利用keras使用神经网络预测销量操作
2020/07/07 Python
全球精选男装和家居用品:Article
2020/04/13 全球购物
波兰汽车配件网上商店:iParts.pl
2020/09/08 全球购物
快餐店的创业计划书范文
2014/01/29 职场文书
酒店员工职业生涯规划
2014/02/25 职场文书
幼儿园母亲节活动方案
2014/03/10 职场文书
文秘自荐信
2014/06/28 职场文书
中学生社区服务活动报告
2015/02/05 职场文书
政工师工作总结2015
2015/05/26 职场文书
《法国号》教学反思
2016/02/22 职场文书