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中使用urllib2伪造HTTP报头的2个方法
Jul 07 Python
python写的一个squid访问日志分析的小程序
Sep 17 Python
初步讲解Python中的元组概念
May 21 Python
python数组复制拷贝的实现方法
Jun 09 Python
利用Python将文本中的中英文分离方法
Oct 31 Python
Python3 pip3 list 出现 DEPRECATION 警告的解决方法
Feb 16 Python
Python-while 计算100以内奇数和的方法
Jun 11 Python
应用OpenCV和Python进行SIFT算法的实现详解
Aug 21 Python
Python netmiko模块的使用
Feb 14 Python
Python Matplotlib绘图基础知识代码解析
Aug 31 Python
scrapy处理python爬虫调度详解
Nov 23 Python
PyQt5实现多张图片显示并滚动
Jun 11 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可逆加密函数(分享)
2013/06/06 PHP
php+memcache实现的网站在线人数统计代码
2014/07/04 PHP
PHP文件缓存类实现代码
2015/10/26 PHP
CI框架中类的自动加载问题分析
2016/11/21 PHP
PHP实现找出链表中环的入口节点
2018/01/16 PHP
JQuery实现鼠标滚轮滑动到页面节点
2015/07/28 Javascript
jQuery移动web开发中的页面初始化与加载事件
2015/12/03 Javascript
JavaScript定义数组的三种方法(new Array(),new Array('x','y')
2016/10/04 Javascript
Mac下使用charles遇到的问题以及解决办法
2017/01/10 Javascript
JavaScript实现审核流程状态的动态显示进度条
2017/03/15 Javascript
Angular2 之 路由与导航详细介绍
2017/05/26 Javascript
vue axios请求超时的正确处理方法
2018/04/02 Javascript
JS实现的简单分页功能示例
2018/08/23 Javascript
javascript 对象 与 prototype 原型用法实例分析
2019/11/11 Javascript
以一个投票程序的实例来讲解Python的Django框架使用
2016/02/18 Python
Python实现mysql数据库更新表数据接口的功能
2017/11/19 Python
用python 批量更改图像尺寸到统一大小的方法
2018/03/31 Python
django 外键model的互相读取方法
2018/12/15 Python
在SQLite-Python中实现返回、查询中文字段的方法
2019/07/17 Python
Django  ORM 练习题及答案
2019/07/19 Python
微信公众号token验证失败解决方案
2019/07/22 Python
Django框架序列化与反序列化操作详解
2019/11/01 Python
使用 Python 处理3万多条数据只要几秒钟
2020/01/19 Python
django rest framework使用django-filter用法
2020/07/15 Python
python爬虫多次请求超时的几种重试方法(6种)
2020/12/01 Python
be2台湾单身男女交友:全球网路婚姻介绍的领导品牌
2019/10/11 全球购物
Otiumberg官网:英国半精致珠宝品牌
2021/01/16 全球购物
《小动物过冬》教学反思
2014/04/17 职场文书
小学节能减排倡议书
2014/05/15 职场文书
教师节宣传方案
2014/05/23 职场文书
安全生产标语
2014/06/06 职场文书
教师学习群众路线心得体会
2014/11/04 职场文书
2015年公司新年寄语
2014/12/08 职场文书
秀!学妹看见都惊呆的Python小招数!【详细语言特性使用技巧】
2021/04/27 Python
Python卷积神经网络图片分类框架详解分析
2021/11/07 Python
Python中的嵌套循环详情
2022/03/23 Python