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打印scrapy蜘蛛抓取树结构的方法
Apr 08 Python
Python实现登录人人网并抓取新鲜事的方法
May 11 Python
Python初学时购物车程序练习实例(推荐)
Aug 08 Python
Sublime开发python程序的示例代码
Jan 24 Python
解决Pandas to_json()中文乱码,转化为json数组的问题
May 10 Python
python3爬虫之设计签名小程序
Jun 19 Python
python实现俄罗斯方块游戏
Mar 25 Python
pyqt5 获取显示器的分辨率的方法
Jun 18 Python
Django 如何使用日期时间选择器规范用户的时间输入示例代码详解
May 22 Python
MoviePy常用剪辑类及Python视频剪辑自动化
Dec 18 Python
浅谈matplotlib默认字体设置探索
Feb 03 Python
Python中可变和不可变对象的深入讲解
Aug 02 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 dirname(__FILE__) 获取当前文件的绝对路径
2011/06/28 PHP
Linux下安装oracle客户端并配置php5.3
2014/10/12 PHP
PHP图像识别技术原理与实现
2016/10/27 PHP
PHP数组实际占用内存大小原理解析
2020/12/11 PHP
经常用到的JavasScript事件的翻译
2007/04/09 Javascript
在jQuery1.5中使用deferred对象 着放大镜看Promise
2011/03/12 Javascript
对javascript继承的理解
2016/10/11 Javascript
微信和qq时间格式模板实例详解
2016/10/21 Javascript
JavaScript 数组的深度复制解析
2016/11/02 Javascript
JavaScript输入分钟、秒倒计时技巧总结(附代码)
2017/08/17 Javascript
使用js获取伪元素的content实例
2017/10/24 Javascript
JS+canvas画一个圆锥实例代码
2017/12/13 Javascript
React-router4路由监听的实现
2018/08/07 Javascript
vue全局使用axios的方法实例详解
2018/11/22 Javascript
layui实现数据表格table分页功能(ajax异步)
2019/07/27 Javascript
vue-cli3单页构建大型项目方案
2020/04/07 Javascript
element中Steps步骤条和Tabs标签页关联的解决
2020/12/08 Javascript
代码块高亮可复制显示js插件highlight.js+clipboard.js整合
2021/02/15 Javascript
使用Python简单的实现树莓派的WEB控制
2016/02/18 Python
用yum安装MySQLdb模块的步骤方法
2016/12/15 Python
Python编程之序列操作实例详解
2017/07/22 Python
pandas系列之DataFrame 行列数据筛选实例
2018/04/12 Python
python实现对指定输入的字符串逆序输出的6种方法
2018/04/26 Python
python 读取文件并替换字段的实例
2018/07/12 Python
windows下pycharm安装、创建文件、配置默认模板
2018/07/31 Python
Python实现读取txt文件中的数据并绘制出图形操作示例
2019/02/26 Python
Python3列表内置方法大全及示例代码小结
2019/05/10 Python
python opencv pytesseract 验证码识别的实现
2020/08/28 Python
python 星号(*)的多种用途
2020/09/21 Python
Python可视化工具如何实现动态图表
2020/10/23 Python
美国在线纱线商店:Darn Good Yarn
2019/03/20 全球购物
怎样写好创业计划书的内容
2014/02/06 职场文书
党员学习党的群众路线思想汇报(5篇)
2014/09/10 职场文书
中学生社区服务活动报告
2015/02/05 职场文书
公务员个人总结
2015/02/12 职场文书
2015年学校远程教育工作总结
2015/07/20 职场文书