我是靠谱客的博主 无辜啤酒,这篇文章主要介绍ITK使用elastix库作配准,现在分享给大家,希望可以做个参考。

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
#include <iostream> #include "elastixlib.h" #include "itkParameterFileParser.h" #include "itkImageFileWriter.h" #include "itkImageFileReader.h" int main() { const unsigned int Dimension = 3; typedef short PixelType; typedef itk::Image<PixelType, Dimension> ImageType; typedef itk::ImageFileReader<ImageType> ReaderType; ReaderType::Pointer fixReader = ReaderType::New(); ReaderType::Pointer movReader = ReaderType::New(); fixReader->SetFileName("E:/registration/input/fix.mhd"); movReader->SetFileName("E:/registration/input/mov.mhd"); try { fixReader->Update(); movReader->Update(); } catch (itk::ExceptionObject &ex) { std::cout << ex << std::endl; return 0; } using namespace elastix; 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("E:/registration/input/parameters.txt"); try { file_parser->ReadParameterFile(); } catch (itk::ExceptionObject & e) { std::cout << e.what() << std::endl; // Do some error handling! } // Retrieve parameter settings as map. RegistrationParametersType parameters = file_parser->GetParameterMap(); typedef std::vector<RegistrationParametersType> RegistrationParametersContainerType; ELASTIX* elastix = new ELASTIX(); int error = 0; try { error = elastix->RegisterImages( static_cast<typename itk::DataObject::Pointer>(fixReader->GetOutput()), static_cast<typename itk::DataObject::Pointer>(movReader->GetOutput()), parameters, // Parameter map read in previous code "E:/registration/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. RegistrationParametersContainerType transform_parameters = elastix->GetTransformParameterMapList(); // Clean up memory. delete elastix; return 0; } }

注:
1、如果图像像素类型与elastix配置文本中像素类型不一致时,会导致图像读取结果为空。
2、图像转换我也搞定了,但是重采样图像一次要五分钟- -?!

最后

以上就是无辜啤酒最近收集整理的关于ITK使用elastix库作配准的全部内容,更多相关ITK使用elastix库作配准内容请搜索靠谱客的其他文章。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(75)

评论列表共有 0 条评论

立即
投稿
返回
顶部