ITK 读写DICOM序列图像例子


#include "itkGDCMSeriesFileNames.h"
#include "itkImageSeriesReader.h"
#include "itkImageSeriesWriter.h"

//#include "itkImageFileReader.h"//读取头文件
//#include "itkImageFileWriter.h"//写入头文件
#include "itkGDCMImageIO.h"//ImageIo头文件


int main(int argc, char* argv[])
{

	typedef   float           InternalPixelType;
	const     unsigned int    Dimension = 3;//输入为三维
	typedef itk::Image< InternalPixelType, Dimension >  InternalImageType;

	typedef  float          OutputPixelType;
	const unsigned int      OutputDimension = 2;//输出为二维
	typedef itk::Image< OutputPixelType, OutputDimension > OutputImageType;

	typedef  itk::ImageSeriesReader< InternalImageType > ReaderType;
	typedef  itk::ImageSeriesWriter<  InternalImageType, OutputImageType  > WriterType;//自动在输入和输出之间转换

	ReaderType::Pointer reader = ReaderType::New();
	WriterType::Pointer writer = WriterType::New();

	//DICOM数据的ImageIO
	typedef itk::GDCMImageIO             ImageIOType;
	ImageIOType::Pointer gdcmIO = ImageIOType::New();

	//文件生成器
	typedef itk::GDCMSeriesFileNames     NamesGeneratorType;
	NamesGeneratorType::Pointer namesGenerator = NamesGeneratorType::New();
	namesGenerator->SetInputDirectory("D:/leg_dcm/");

	//保存文件名
	const ReaderType::FileNamesContainer& filenames = namesGenerator->GetInputFileNames();

	reader->SetImageIO(gdcmIO);
	reader->SetFileNames(filenames);

	try
	{
		reader->Update();
	}
	catch (itk::ExceptionObject& excp)
	{
		std::cerr << "Exception thrown while writing the image" << std::endl;
		std::cerr << excp << std::endl;
		std::cout << "succed1 " << std::endl;
		system("pause");
		return EXIT_FAILURE;
	}


	//输出文件夹
	const char* outputDirectory = "D:/124/";
	itksys::SystemTools::MakeDirectory(outputDirectory);
	//设置输出文件夹
	namesGenerator->SetOutputDirectory(outputDirectory);
	writer->SetFileNames(namesGenerator->GetOutputFileNames());
	//用原来的文件头
	writer->SetMetaDataDictionaryArray(reader->GetMetaDataDictionaryArray());
	writer->SetInput(reader->GetOutput());
    
	writer->SetImageIO(gdcmIO);
	try
	{
		writer->Update();
	}
	catch (itk::ExceptionObject& excep)
	{
		std::cerr << "Exception caught !" << std::endl;
		std::cerr << excep << std::endl;
		std::cout << "succed " << std::endl;
		system("pause");
		return EXIT_FAILURE;
	}

	system("pause");
	return EXIT_SUCCESS;
}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值