主要实现的部分是利用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文件案例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持云海天教程。

原文链接:https://blog.csdn.net/zhimingf/article/details/71404557

matlab mha,ITK 实现多张图像转成单个nii.gz或mha文件案例相关推荐

  1. ITK:遮盖一张图像给定标签图

    ITK:遮盖一张图像给定标签图 内容提要 输出结果 C++实现代码 内容提要 根据一个输入itk :: LabelMap掩盖一个输入itk :: Image的内容 输出结果 C++实现代码 #incl ...

  2. ITK:在一张图像中设置像素值

    ITK:在一张图像中设置像素值 内容提要 输出结果 C++实现代码 内容提要 本示例演示如何设置图像中单个像素的值. 输出结果 C++实现代码 #include "itkImage.h&qu ...

  3. matlab两张图片合成一张_11. 图像合成与图像融合

    本文同步发表在我的微信公众号"计算摄影学",欢迎扫码关注 [转载请注明来源和作者] 我们终于进入了新的篇章.这一次我来给大家介绍一下图像合成与融合. 我们经常看到一些很奇妙的PS技 ...

  4. ❤️Matlab将多张图像无缝拼接成一张图像❤️

    有的时候需要将多张图像拼接成一张图片,如下图,将多张类似的图像平铺在一张图像上,那这是怎么做到的呢? 利用dir将文件夹中的多张图像拼接在一起 file_path = 'xxx';% 图像文件夹路径 ...

  5. [matlab数字图像处理2]对一张图像进行缩放,观察其分辨率,降低灰度分辨率两种模式,观察图像变化;

    %任务:对一张图像进行缩放,观察其分辨率,降低灰度分辨率两种模式,观察图像变化: %本文使用matlab2021a软件对图像进行处理 clear; clc; close all %首先获取一个灰度图像 ...

  6. 怎么用matlab读一张图像,利用matlab读取图像

    怎样用matlab读取20张图片并依次展示出来 指定路径下 单个文件夹data中所有图像 P = '.\data\';% 图像文件夹路径 img_path_list = dir(strcat(P,'* ...

  7. Matlab实现连通域标记算法求图像连通域

    Matlab实现连通域标记算法求图像连通域 连通域 连通域标记算法 连通域 连通区域(Connected Component)一般是指图像中具有相同像素值且位置相邻的前景像素点组成的图像区域(Regi ...

  8. ITK:计算两个图像之间的均方度量值

    ITK:计算两个图像之间的均方度量值 内容提要 输出结果 C++实现代码 内容提要 计算两个图像之间的均方根度量. 输出结果 来自2张图像的数据通过输出传递: [-10, -10]: 23101.7 ...

  9. ITK:减去两个图像

    ITK:减去两个图像 内容提要 C++实现代码 内容提要 彼此相减两张图像. C++实现代码 #include "itkImage.h" #include "itkIma ...

最新文章

  1. Linux学习(2)-命令基础背景+命令使用帮助获取
  2. php 变量调试,PHP变量调试函数
  3. AI编译器与传统编译器的联系与区别
  4. .NET Framework 工具下载
  5. java环境变量配置 - win10
  6. php mysql_fetch_array 不要0_1_php – mysql_fetch_array不适用于1行查询结果
  7. LintCode 137. 克隆图
  8. html初识教学反思,五年级长方体的认识教学反思
  9. 【数据资产】数据资产目录建设方法与案例
  10. A星算法优化(二)权重系数
  11. python:BeautifulSoup解析爬取网页文章demo
  12. 全网搜索一个人的痕迹,爬取百度搜索结果
  13. 2015年微信营销趋势分析与归纳!
  14. 如何把小程序游戏运行到自有App中?(IOS篇)
  15. 软件测试面试官:你有什么需要问我吗?小伙子一口气提了四个问题,被弃用!
  16. 戴尔台式计算机寿命,27年了 戴尔商用台式机如何保持活力?
  17. 安装 EndNote X 9.3.3
  18. scala spark dataframe添加序号(id)列
  19. 高等学校计算机水平考试一级,全国高等学校计算机水平考试一级office考试要点汇总大全...
  20. AutoCAD DxfCode组码值类型(一)

热门文章

  1. 语音情感识别领域-论文阅读笔记1:融合语音和文字的句段级别情感识别技术
  2. 京东校招编程题——小熊分苹果
  3. backtrader plot 出现错误的处理办法 ImportError: cannot import name ‘warnings‘ from ‘matplotlib.dates‘
  4. Sigma-Delta数模转换器的设计与实现
  5. 上计算机课学生玩游戏该怎么处理,初中信息技术课学生玩游戏的原因与解决对策...
  6. G++ 4.4.7 无法编译模板程序,Vs可以,和解?智者尾部留言,本人第一次使用vs pro,通常并且习惯在linux下写些小东西,虽然程序简单;...
  7. 基于STC15W4K32S4单片机仿真《74HC595驱动数码管动态显示》
  8. VxWorks入门06:虚拟机中运行
  9. 微信小程序路由的三种方法
  10. linux完美卸载编译的php,互联网常识:Linux(Ubuntu)安装和完美卸载PHP7详细教程