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使用matplotlib绘制柱状图教程
Feb 08 Python
解决phantomjs截图失败,phantom.exit位置的问题
May 17 Python
python 计算两个列表的相关系数的实现
Aug 29 Python
Django使用中间件解决前后端同源策略问题
Sep 02 Python
python web框架Flask实现图形验证码及验证码的动态刷新实例
Oct 14 Python
python区分不同数据类型的方法
Oct 14 Python
Python简易计算器制作方法代码详解
Oct 31 Python
python3图片文件批量重命名处理
Oct 31 Python
解决django-xadmin列表页filter关联对象搜索问题
Nov 15 Python
使用python实现回文数的四种方法小结
Nov 24 Python
python 实现生成均匀分布的点
Dec 05 Python
python torch.utils.data.DataLoader使用方法
Apr 02 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
PHP 使用header函数设置HTTP头的示例解析 表头
2013/06/17 PHP
PHP错误Warning: Cannot modify header information - headers already sent by解决方法
2014/09/27 PHP
PHP的Laravel框架中使用AdminLTE模板来编写网站后台界面
2016/03/21 PHP
PHP实现百度人脸识别
2019/05/06 PHP
鼠标图片振动代码
2006/07/06 Javascript
拖拉表格的JS函数
2008/11/20 Javascript
jquery一句话全选/取消全选
2011/03/01 Javascript
jquery实现动态菜单的实例代码
2013/11/28 Javascript
JS仿Windows开机启动Loading进度条的方法
2015/02/26 Javascript
jQuery团购倒计时特效实现方法
2015/05/07 Javascript
javascript鼠标右键菜单自定义效果
2020/12/08 Javascript
基于jQuery的网页影音播放器jPlayer的基本使用教程
2016/03/08 Javascript
jQuery自定义多选下拉框效果
2017/06/19 jQuery
JS非空验证及邮箱验证的实例
2017/08/11 Javascript
vue用Object.defineProperty手写一个简单的双向绑定的示例
2018/07/09 Javascript
基于vue.js中关于下拉框的值默认及绑定问题
2018/08/22 Javascript
Vue路由history模式解决404问题的几种方法
2018/09/29 Javascript
VSCode使用之Vue工程配置eslint
2019/04/30 Javascript
举例讲解Python中的身份运算符的使用方法
2015/10/13 Python
python3 pillow生成简单验证码图片的示例
2017/09/19 Python
Python实现的矩阵转置与矩阵相乘运算示例
2019/03/26 Python
Python文件打开方式实例详解【a、a+、r+、w+区别】
2019/03/30 Python
PyTorch 普通卷积和空洞卷积实例
2020/01/07 Python
解决springboot yml配置 logging.level 报错问题
2020/02/21 Python
解决pytorch多GPU训练保存的模型,在单GPU环境下加载出错问题
2020/06/23 Python
推荐10个HTML5响应式框架
2016/02/25 HTML / CSS
EM Cosmetics官网:由彩妆大神Michelle Phan创办的独立品牌
2020/04/27 全球购物
《问银河》教学反思
2014/02/19 职场文书
小学庆六一活动方案
2014/02/28 职场文书
社区活动总结报告
2014/05/05 职场文书
旅游文化节策划方案
2014/06/06 职场文书
酒后驾车标语
2014/06/30 职场文书
小学生自我评价100字(15篇)
2014/09/18 职场文书
公司周年庆典标语
2014/10/07 职场文书
导游词之广东佛山(南风古灶)
2019/09/24 职场文书
golang json数组拼接的实例
2021/04/28 Golang