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抓取网页图片并放到指定文件夹
Apr 24 Python
Python中Django框架下的staticfiles使用简介
May 30 Python
python3 发送任意文件邮件的实例
Jan 23 Python
python如何对实例属性进行类型检查
Mar 20 Python
PyQt5每天必学之QSplitter实现窗口分隔
Apr 19 Python
PyQT实现多窗口切换
Apr 20 Python
Django Rest framework之权限的实现示例
Dec 17 Python
对PyQt5基本窗口控件 QMainWindow的使用详解
Jun 19 Python
Python之修改图片像素值的方法
Jul 03 Python
python Django里CSRF 对应策略详解
Aug 05 Python
如何在VSCode下使用Jupyter的教程详解
Jul 13 Python
Python 中 Shutil 模块详情
Nov 11 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
多人战的战术与战略
2020/03/04 星际争霸
一个php作的文本留言本的例子(六)
2006/10/09 PHP
php 设计模式之 工厂模式
2008/12/19 PHP
PHP获取远程图片并保存到本地的方法
2015/05/12 PHP
yii的入口文件index.php中为什么会有这两句
2016/08/04 PHP
PHP自动补全表单的两种方法
2017/03/06 PHP
thinkPHP5框架分页样式类完整示例
2018/09/01 PHP
JS 判断undefined的实现代码
2009/11/26 Javascript
通过下拉框的值来确定输入框是否可以为空的代码
2011/10/18 Javascript
js使用正则实现ReplaceAll全部替换的方法
2014/08/22 Javascript
JavaScript数据结构和算法之图和图算法
2015/02/11 Javascript
论JavaScript模块化编程
2016/03/07 Javascript
Bootstrap基本组件学习笔记之下拉菜单(7)
2016/12/07 Javascript
vue中如何实现pdf文件预览的方法
2018/07/12 Javascript
dts文件中删除一个node或属性的操作方法
2018/08/05 Javascript
NodeJS 将文件夹按照存放路径变成一个对应的JSON的方法
2018/10/17 NodeJs
利用d3.js实现蜂巢图表带动画效果
2019/09/03 Javascript
Vant Weapp组件踩坑:picker的初始赋值解决
2020/11/12 Javascript
python 查找文件夹下所有文件 实现代码
2009/07/01 Python
利用python程序帮大家清理windows垃圾
2017/01/15 Python
python数据结构之线性表的顺序存储结构
2018/09/28 Python
python用plt画图时,cmp设置方法
2018/12/13 Python
Python实现 版本号对比功能的实例代码
2019/04/18 Python
Python利用requests模块下载图片实例代码
2019/08/12 Python
Python 使用office365邮箱的示例
2020/10/29 Python
scrapy redis配置文件setting参数详解
2020/11/18 Python
css3实现可滑动跳转的分页插件示例
2014/05/08 HTML / CSS
HTML5 Canvas 破碎重组的视频特效的示例代码
2019/09/24 HTML / CSS
意大利奢华内衣制造商:Cosabella
2017/08/29 全球购物
Merrell美国官网:美国登山运动鞋品牌
2018/02/07 全球购物
什么是命名空间(NameSpace)
2015/11/24 面试题
Linux开机引导的步骤是什么
2014/02/26 面试题
计算机应用专业学生的自我评价分享
2013/11/03 职场文书
工作会议主持词
2014/03/17 职场文书
房地产经营管理专业自荐信
2014/09/02 职场文书
毕业生个人总结
2015/02/28 职场文书