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之有容乃大的list(2)
Sep 15 Python
总结Python编程中三条常用的技巧
May 11 Python
python在控制台输出进度条的方法
Jun 20 Python
Python的math模块中的常用数学函数整理
Feb 04 Python
win10系统中安装scrapy-1.1
Jul 03 Python
简述:我为什么选择Python而不是Matlab和R语言
Nov 14 Python
python 画三维图像 曲面图和散点图的示例
Dec 29 Python
Python opencv实现人眼/人脸识别以及实时打码处理
Apr 29 Python
Python基本数据结构之字典类型dict用法分析
Jun 08 Python
Python 调用有道翻译接口实现翻译
Mar 02 Python
基于Django signals 信号作用及用法详解
Mar 28 Python
python 爬虫如何正确的使用cookie
Oct 27 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重定向的3种方式
2013/03/07 PHP
PHP的自定义模板引擎
2017/03/24 PHP
PHP基于堆栈实现的高级计算器功能示例
2017/09/15 PHP
javascript new后的constructor属性
2010/08/05 Javascript
jQuery EasyUI 的EasyLoader功能介绍
2010/09/12 Javascript
JQuery操作Select的Options的Bug(IE8兼容性视图模式)
2013/04/21 Javascript
JS对话框_JS模态对话框showModalDialog用法总结
2014/01/11 Javascript
Javascript中的关键字和保留字整理
2014/10/16 Javascript
JS实现简单的键盘打字的效果
2015/04/24 Javascript
picLazyLoad 实现图片延时加载(包含背景图片)
2016/07/21 Javascript
Ajax分页插件Pagination从前台jQuery到后端java总结
2016/07/22 Javascript
Vue项目使用CDN优化首屏加载问题
2018/04/01 Javascript
基于vue.js组件实现分页效果
2018/12/29 Javascript
微信小程序bindinput与bindsubmit的区别实例分析
2019/04/17 Javascript
小程序分页实践之编写可复用分页组件
2019/07/18 Javascript
基于JavaScript实现大文件上传后端代码实例
2020/08/18 Javascript
在Vue里如何把网页的数据导出到Excel的方法
2020/09/30 Javascript
微信小程序视频弹幕发送功能的实现
2020/12/28 Javascript
Python中SOAP项目的介绍及其在web开发中的应用
2015/04/14 Python
Python扫描IP段查看指定端口是否开放的方法
2015/06/09 Python
Python输入二维数组方法
2018/04/13 Python
python hough变换检测直线的实现方法
2019/07/12 Python
python 经典数字滤波实例
2019/12/16 Python
python将音频进行变速的操作方法
2020/04/08 Python
Python 如何展开嵌套的序列
2020/08/01 Python
CSS3按钮鼠标悬浮实现光圈效果源码
2016/09/11 HTML / CSS
运动会100米解说词
2014/01/23 职场文书
安全标语大全
2014/06/10 职场文书
客服专员岗位职责
2015/02/10 职场文书
2015年办公室工作总结范文
2015/03/31 职场文书
培训讲师开场白
2015/06/01 职场文书
高考1977观后感
2015/06/04 职场文书
会计工作自我鉴定范文
2019/06/21 职场文书
会议承办单位欢迎词
2019/07/09 职场文书
python字符串的一些常见实用操作
2022/04/06 Python
Vue OpenLayer测距功能的实现
2022/04/20 Vue.js