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 相关文章推荐
Swift 3.0在集合类数据结构上的一些新变化总结
Jul 11 Python
教你用 Python 实现微信跳一跳(Mac+iOS版)
Jan 04 Python
python正则中最短匹配实现代码
Jan 16 Python
用python简单实现mysql数据同步到ElasticSearch的教程
May 30 Python
django_orm查询性能优化方法
Aug 20 Python
Pycharm运行加载文本出现错误的解决方法
Jun 27 Python
python实现文本进度条 程序进度条 加载进度条 单行刷新功能
Jul 03 Python
Python爬虫爬取Bilibili弹幕过程解析
Oct 10 Python
使用pandas的box_plot去除异常值
Dec 10 Python
Python爬取网页信息的示例
Sep 24 Python
Django windows使用Apache实现部署流程解析
Oct 12 Python
Django 实现图片上传和下载功能
Dec 31 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
在IIS7.0下面配置PHP 5.3.2运行环境的方法
2010/04/13 PHP
Laravel框架中集成MongoDB和使用详解
2019/10/17 PHP
jquery获取div宽度的实现思路与代码
2013/01/13 Javascript
jquery.boxy弹出框(后隔N秒后自动隐藏/自动跳转)
2013/01/15 Javascript
Function.prototype.bind用法示例
2013/09/16 Javascript
javascript setinterval 的正确语法如何书写
2014/06/17 Javascript
简述Jquery与DOM对象
2015/07/10 Javascript
全面解析Bootstrap图片轮播效果
2015/12/03 Javascript
javascript正则表达式定义(语法)总结
2016/01/08 Javascript
jQuery实现点击查看大图并以弹框的形式居中
2016/08/08 Javascript
node.js中http模块和url模块的简单介绍
2017/10/06 Javascript
iview通过Dropdown(下拉菜单)实现的右键菜单
2018/10/26 Javascript
JavaScript中判断为整数的多种方式及保留两位小数的方法
2019/09/09 Javascript
Servlet返回的数据js解析2种方法
2019/12/12 Javascript
JS前端广告拦截实现原理解析
2020/02/17 Javascript
JavaScript快速调试的两个技巧
2020/11/04 Javascript
利用 JavaScript 实现并发控制的示例代码
2020/12/31 Javascript
详解Python list 与 NumPy.ndarry 切片之间的对比
2017/07/24 Python
TensorFlow如何实现反向传播
2018/02/06 Python
Python的UTC时间转换讲解
2019/02/26 Python
学习python分支结构
2019/05/17 Python
Python jieba库用法及实例解析
2019/11/04 Python
PyCharm如何导入python项目的方法
2020/02/06 Python
如何用python 操作zookeeper
2020/12/28 Python
Hotels.com英国:全球领先的酒店住宿提供商
2019/01/24 全球购物
应用服务器有那些
2012/01/19 面试题
与UNIX有关的几个名词
2015/09/17 面试题
儿科主治医生个人求职信
2013/09/23 职场文书
秘书岗位职责
2013/11/18 职场文书
春节联欢晚会主持词范文
2014/03/24 职场文书
公司合作意向书
2014/04/01 职场文书
大学生社团活动总结
2014/04/26 职场文书
爱祖国爱家乡演讲稿
2014/09/02 职场文书
生死牛玉儒观后感
2015/06/11 职场文书
小学副班长竞选稿
2015/11/21 职场文书
SQL实现LeetCode(175.联合两表)
2021/08/04 MySQL