ITK elastix 刚性 配准

读取数据设置 3D

const unsigned int Dimension = 3;
	typedef float PixelType;
	typedef itk::Image<PixelType, Dimension> ImageType;
	typedef itk::ImageFileReader<ImageType> ReaderType;
	ReaderType::Pointer fixReader = ReaderType::New();
	ReaderType::Pointer movReader = ReaderType::New();
	fixReader->SetFileName("D:/input/fixed.mhd");
	movReader->SetFileName("D:/input/moving.mhd");
	try
	{
		fixReader->Update();
		movReader->Update();
	}
	catch (itk::ExceptionObject &ex)
	{
		std::cout << ex << std::endl;
		return 0;
	}

准备配准参数设置


	typedef ELASTIX::ParameterMapType RegistrationParametersType;
	typedef itk::ParameterFileParser ParserType;
	// Create parser for transform parameters text file.
	ParserType::Pointer file_parser = ParserType::New();
	// Try parsing transform parameters text file.
	file_parser->SetParameterFileName("D:/input/parameters_Rigid.txt");
	try
	{
		file_parser->ReadParameterFile();
	}
	catch (itk::ExceptionObject & e)
	{
		std::cout << e.what() << std::endl;
		// Do some error handling!
	}

运行elastix

	RegistrationParametersType parameters = file_parser->GetParameterMap();
	typedef std::vector<RegistrationParametersType> RegistrationParametersContainerType;
	ELASTIX* elastix = new ELASTIX();
	int error = 0;
	try
	{
		error = elastix->RegisterImages(
		 	static_cast<  itk::DataObject::Pointer>(fixReader->GetOutput()),
			static_cast<  itk::DataObject::Pointer>(movReader->GetOutput()),
			parameters, // Parameter map read in previous code
			"D:\\output", // Directory where output is written, if enabled
			true, // Enable/disable writing of elastix.log
			true, // Enable/disable output to console
			0, // Provide fixed image mask (optional, 0 = no mask)
			0 // Provide moving image mask (optional, 0 = no mask)
			);
	}
	catch (itk::ExceptionObject &err)
	{
		// Do some error handling.
	}
	if (error == 0)
	{
		if (elastix->GetResultImage().IsNotNull())
		{
			// Typedef the ITKImageType first...
			ImageType * output_image = static_cast<ImageType *>(
				elastix->GetResultImage().GetPointer());

		 
		}
		else
		{
			// Registration failure. Do some error handling.
		}
		// Get transform parameters of all registration steps.
	
		// Clean up memory.
		delete elastix;
	}

保存数据(注意 ImageType PixelTyp,读取和保存时,一定要注意,否则会有崩溃的可能)

		 Write the deformation field
		    itk::MetaImageIOFactory::RegisterOneFactory();
			typedef  itk::ImageFileWriter<ImageType>   WriterType;
			WriterType::Pointer writer = WriterType::New();
			writer->SetFileName("D:/output/imag.mhd");
			writer->SetInput(output_image);
	 
			writer->SetUseCompression(false);
		 
			try
			{
				writer->Update();
			}
			catch (itk::ExceptionObject & err)
			{
				std::cerr << "ExceptionObject caught !" << std::endl;
				std::cerr << err << std::endl;
				 
			} 

工程配置很复杂,这里不展开

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

恋恋西风

up up up

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值