栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

使用c++的itk进行nii数据的读取和写入

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

使用c++的itk进行nii数据的读取和写入

读取
#pragma once

#include
#include


itk::Image::Pointer read_nii_image(const char* file_path) {
	// 设置图像类型
	using ImageType = itk::Image;
	using ReaderType = itk::ImageFileReader;
	// 设置读取的文件类型
	using ImageIoType = itk::NiftiImageIO;

	ReaderType::Pointer reader = ReaderType::New();
	ImageIoType::Pointer niftiIO = ImageIoType::New();
	reader->SetImageIO(niftiIO);

	reader->SetFileName(file_path);
	reader->Update(); // 读取文件结束
	// 得到文件
	ImageType::Pointer image = reader->GetOutput();

	return image;
}
转换类型和写入
#include
#include
#include
#include
#include
#include "funcs.h" // 自定义函数
using namespace std;


int main() {
	const char* filename = "E:/projectFiles/hips/bone_seg_4/dir_001/gu_bone.nii.gz";
	// 调用函数
	itk::Image::Pointer image = read_nii_image(filename);

	// 查看spacing
	itk::Image::SpacingType spacing = image->GetSpacing();
	cout << "spacing:n " << spacing << endl;
	// 查看direction
	itk::Image::DirectionType direction = image->GetDirection();
	cout << "direction:n " << direction << endl;
	// 查看origin
	itk::Image::PointType origin = image->GetOrigin();
	cout << "origin: n" << origin << endl;
	// 查看大小: x,y,z
	itk::Image::SizeType size = image->GetLargestPossibleRegion().GetSize();
	cout << "size: n" << size << endl;

	// 写入文件
	using WriterType = itk::ImageFileWriter>;
	using ImageIOType = itk::NiftiImageIO;
	
	WriterType::Pointer writer = WriterType::New();
	ImageIOType::Pointer niiIO = ImageIOType::New();
	const char* outputFilename = "rename.nii.gz";
	

	// casting转换,将image的输入类型转换成输出类型
	using FilterType =
		itk::CastImageFilter, itk::Image>;
		
	FilterType::Pointer filter = FilterType::New();
	
	filter->SetInput(image); // 转换完成
	// set spacing
	itk::Image::Pointer imagein = filter->GetOutput();

	writer->SetInput(imagein);
	writer->SetFileName(outputFilename);

	writer->SetImageIO(niiIO);
	try
	{
		writer->Update();
	}
	catch (const itk::ExceptionObject& err)
	{
		std::cerr << "ExceptionObject caught !" << std::endl;
		std::cerr << err << std::endl;
		return EXIT_FAILURE;
	}

	return 0;
}
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1019151.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号