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进行稳定可靠的文件操作详解
Dec 31 Python
python开发之IDEL(Python GUI)的使用方法图文详解
Nov 12 Python
Python实现OpenCV的安装与使用示例
Mar 30 Python
python读取一个目录下所有txt里面的内容方法
Jun 23 Python
Python2包含中文报错的解决方法
Jul 09 Python
简单了解Python3 bytes和str类型的区别和联系
Dec 19 Python
用 Python 制作地球仪的方法
Apr 24 Python
如何使用python的ctypes调用医保中心的dll动态库下载医保中心的账单
May 24 Python
基于python实现破解滑动验证码过程解析
May 28 Python
10个python爬虫入门实例(小结)
Nov 01 Python
用python 绘制茎叶图和复合饼图
Feb 26 Python
90行Python代码开发个人云盘应用
Apr 20 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中利用wsdl创建标准webservice的实现代码
2011/12/07 PHP
php curl抓取网页的介绍和推广及使用CURL抓取淘宝页面集成方法
2015/11/30 PHP
PHP基于cookie与session统计网站访问量并输出显示的方法
2016/01/15 PHP
PHP读取CSV大文件导入数据库的实例
2017/07/24 PHP
分析 JavaScript 中令人困惑的变量赋值
2007/08/13 Javascript
用于判断用户注册时,密码强度的JS代码
2009/01/01 Javascript
使用Microsoft Ajax Minifier减小JavaScript文件大小的方法
2010/04/01 Javascript
jquery获取元素索引值index()示例
2014/02/13 Javascript
jquery禁止回车触发表单提交
2014/12/12 Javascript
JS+CSS实现可拖动的弹出提示框
2015/02/16 Javascript
javascript中的Function.prototye.bind
2015/06/25 Javascript
修改Jquery Dialog 位置的实现方法
2016/08/26 Javascript
node网页分段渲染详解
2016/09/05 Javascript
Angular2表单自定义验证器的实现
2016/10/19 Javascript
原生js实现图片放大缩小计时器效果
2017/01/20 Javascript
JavaScript限定范围拖拽及自定义滚动条应用(3)
2017/05/17 Javascript
javascript 中事件冒泡和事件捕获机制的详解
2017/09/01 Javascript
vuejs实现标签选项卡动态更改css样式的方法
2018/05/31 Javascript
微信小程序实现的绘制table表格功能示例
2019/04/26 Javascript
Vue可自定义tab组件用法实例
2019/10/24 Javascript
node 版本切换的实现
2020/02/02 Javascript
简单了解Vue computed属性及watch区别
2020/07/10 Javascript
[56:14]Fnatic vs OG 2018国际邀请赛小组赛BO2 第二场 8.18
2018/08/19 DOTA
Python二分法搜索算法实例分析
2015/05/11 Python
MySQL中表的复制以及大型数据表的备份教程
2015/11/25 Python
深入理解python函数递归和生成器
2016/06/06 Python
Python画图学习入门教程
2016/07/01 Python
Python数据分析之双色球统计两个红和蓝球哪组合比例高的方法
2018/02/03 Python
python 日志增量抓取实现方法
2018/04/28 Python
浅谈Python中的异常和JSON读写数据的实现
2020/02/27 Python
解决jupyter notebook 前面书写后面内容消失的问题
2020/04/13 Python
Viking Direct荷兰:购买办公用品
2019/06/20 全球购物
行政工作个人的自我评价
2014/02/13 职场文书
优秀老员工获奖感言
2014/02/15 职场文书
优秀学生党员先进事迹材料
2014/05/29 职场文书
大学生考试作弊被抓检讨书
2014/12/27 职场文书