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 26 Python
Python 中的with关键字使用详解
Sep 11 Python
python如何通过twisted实现数据库异步插入
Mar 20 Python
python实现树形打印目录结构
Mar 29 Python
使用Python实现租车计费系统的两种方法
Sep 29 Python
Python+AutoIt实现界面工具开发过程详解
Aug 07 Python
Django模板导入母版继承和自定义返回Html片段过程解析
Sep 18 Python
Python迭代器iterator生成器generator使用解析
Oct 24 Python
Jupyter加载文件的实现方法
Apr 14 Python
pycharm无法安装第三方库的问题及解决方法以scrapy为例(图解)
May 09 Python
用python打开摄像头并把图像传回qq邮箱(Pyinstaller打包)
May 17 Python
Django+Celery实现定时任务的示例
Jun 23 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
提高define性能的php扩展hidef的安装和使用
2011/06/14 PHP
几款极品的javascript压缩混淆工具
2007/05/16 Javascript
javascript 异步页面查询实现代码(asp.net)
2010/05/26 Javascript
自定义一个jquery插件[鼠标悬浮时候 出现说明label]
2011/06/27 Javascript
JavaScript转换农历类实现及调用方法
2013/01/27 Javascript
jQuery+easyui中的combobox实现下拉框特效
2015/02/27 Javascript
jQuery三级下拉列表导航菜单代码分享
2020/04/15 Javascript
JSON格式的时间/Date(2367828670431)/格式转为正常的年-月-日 格式的代码
2016/07/27 Javascript
javascript创建对象的3种方法
2016/11/02 Javascript
微信公众号  提示:Unauthorized API function 问题解决方法
2016/12/05 Javascript
谈谈Vue.js——vue-resource全攻略
2017/01/16 Javascript
JS实现图片预加载之无序预加载功能代码
2017/05/12 Javascript
nodejs 生成和导出 word的实例代码
2018/07/31 NodeJs
Node.js连接Sql Server 2008及数据层封装详解
2018/08/27 Javascript
JavaScript交换变量常用4种方法解析
2020/09/02 Javascript
[10:05]DOTA2-DPC中国联赛 正赛 iG vs PSG.LGD 选手采访
2021/03/11 DOTA
用实例详解Python中的Django框架中prefetch_related()函数对数据库查询的优化
2015/04/01 Python
Python的Django框架中if标签的相关使用
2015/07/15 Python
matplotlib 输出保存指定尺寸的图片方法
2018/05/24 Python
Python批量删除只保留最近几天table的代码实例
2019/04/01 Python
Pytorch实现GoogLeNet的方法
2019/08/18 Python
让你相见恨晚的十个Python骚操作
2020/11/18 Python
GANT葡萄牙官方商店:拥有美国运动服传统的生活方式品牌
2018/10/18 全球购物
bonprix荷兰网上商店:便宜的服装、鞋子和家居用品
2020/07/04 全球购物
应届毕业生的个人自我鉴定
2013/10/24 职场文书
放飞蜻蜓反思
2014/02/05 职场文书
新闻编辑求职信
2014/04/09 职场文书
《数星星的孩子》教学反思
2014/04/11 职场文书
学雷锋演讲稿汇总
2014/05/10 职场文书
党员检讨书
2014/10/13 职场文书
2014年学校法制宣传日活动总结
2014/11/01 职场文书
2014年班组长工作总结
2014/11/20 职场文书
高校教师个人工作总结2014
2014/12/17 职场文书
护理工作心得体会
2016/01/22 职场文书
Python-OpenCV教程之图像的位运算详解
2021/06/21 Python
MySQL 服务和数据库管理
2021/11/11 MySQL