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 算法 排序实现快速排序
Jun 05 Python
详解python之多进程和进程池(Processing库)
Jun 09 Python
python切片及sys.argv[]用法详解
May 25 Python
对pandas的行列名更改与数据选择详解
Nov 12 Python
对python3新增的byte类型详解
Dec 04 Python
详解python算法之冒泡排序
Mar 05 Python
Python-Tkinter Text输入内容在界面显示的实例
Jul 12 Python
Pandas操作CSV文件的读写实现方法
Nov 13 Python
在django中自定义字段Field详解
Dec 03 Python
opencv python 图片读取与显示图片窗口未响应问题的解决
Apr 24 Python
python中使用.py配置文件的方法详解
Nov 23 Python
教你漂亮打印Pandas DataFrames和Series
May 29 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边学边教》(04.编写简易的通讯录――视频教程1)
2006/12/13 PHP
php微信开发之批量生成带参数的二维码
2016/06/26 PHP
Laravel中错误与异常处理的用法示例
2018/09/16 PHP
PHP反射学习入门示例
2019/06/14 PHP
TP框架实现上传一张图片和批量上传图片的方法分析
2020/04/23 PHP
jQuery回调函数的定义及用法实例
2014/12/23 Javascript
使用javascript获取页面名称
2014/12/23 Javascript
jQuery实现当前页面标签高亮显示的方法
2015/03/10 Javascript
JavaScript使用slice函数获取数组部分元素的方法
2015/04/06 Javascript
基于jQuery实现二级下拉菜单效果
2016/02/01 Javascript
使用jQuery处理AJAX请求的基础学习教程
2016/05/10 Javascript
javascript实现图片左右滚动效果【可自动滚动,有左右按钮】
2016/09/19 Javascript
JS识别浏览器类型(电脑浏览器和手机浏览器)
2016/11/18 Javascript
微信小程序 textarea 组件详解及简单实例
2017/01/10 Javascript
vue.js实现价格格式化的方法
2017/05/23 Javascript
Vue.js结合Ueditor富文本编辑器的实例代码
2017/07/11 Javascript
使用JS实现图片轮播的实例(前后首尾相接)
2017/09/21 Javascript
vue watch自动检测数据变化实时渲染的方法
2018/01/16 Javascript
element-ui中的select下拉列表设置默认值方法
2018/08/24 Javascript
JS+canvas画布实现炫酷的旋转星空效果示例
2019/02/13 Javascript
[03:11]完美世界DOTA2联赛PWL DAY8集锦
2020/11/09 DOTA
python 把文件中的每一行以数组的元素放入数组中的方法
2018/04/29 Python
python实现n个数中选出m个数的方法
2018/11/13 Python
Django框架模板文件使用及模板文件加载顺序分析
2019/05/23 Python
Pycharm新手教程(只需要看这篇就够了)
2019/06/18 Python
python批量处理多DNS多域名的nslookup解析实现
2020/06/28 Python
浅谈pandas dataframe对除数是零的处理
2020/07/20 Python
python如何提升爬虫效率
2020/09/27 Python
Blue Nile蓝色尼罗河香港官网:世界最大在线钻石珠宝销售商
2020/05/07 全球购物
文职个人求职信范文
2013/09/23 职场文书
儿媳婚宴答谢词
2014/01/14 职场文书
项目建议书格式
2014/03/12 职场文书
后勤个人工作总结
2015/02/28 职场文书
windows11怎么查看自己安装的版本号? win11版本号的查看方法
2021/11/21 数码科技
Golang bufio详细讲解
2022/04/21 Golang
JS前端canvas交互实现拖拽旋转及缩放示例
2022/08/05 Javascript