MCPcopy Create free account
hub / github.com/SimpleITK/SimpleITK / main

Function main

Examples/ImageRegistrationMethod3/ImageRegistrationMethod3.cxx:60–117  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

58
59
60int
61main(int argc, char * argv[])
62{
63 if (argc < 4)
64 {
65 std::cout << "Usage: " << argv[0] << " <fixedImageFile> <movingImageFile> <outputTransformFile>" << std::endl;
66 return 1;
67 }
68
69 sitk::Image fixed = sitk::ReadImage(argv[1], sitk::sitkFloat32);
70 sitk::Image moving = sitk::ReadImage(argv[2], sitk::sitkFloat32);
71
72 sitk::ImageRegistrationMethod R;
73
74 R.SetMetricAsCorrelation();
75 R.SetOptimizerAsRegularStepGradientDescent(2.0, // learningRate
76 1e-4, // minStep
77 500, // numberOfIterations
78 0.5, // relaxationFactor
79 1e-8); // gradientMagnitudeTolerance
80 R.SetOptimizerScalesFromIndexShift();
81
82 sitk::Transform tx = sitk::CenteredTransformInitializer(fixed, moving, sitk::Similarity2DTransform());
83 R.SetInitialTransform(tx);
84 R.SetInterpolator(sitk::sitkLinear);
85
86 IterationUpdate cmd(R);
87 R.AddCommand(sitk::sitkIterationEvent, cmd);
88
89 sitk::Transform outTx = R.Execute(fixed, moving);
90
91 std::cout << "-------" << std::endl;
92 std::cout << outTx.ToString() << std::endl;
93 std::cout << "Optimizer stop condition: " << R.GetOptimizerStopConditionDescription() << std::endl;
94 std::cout << " Iteration: " << R.GetOptimizerIteration() << std::endl;
95 std::cout << " Metric value: " << R.GetMetricValue() << std::endl;
96
97 sitk::WriteTransform(outTx, argv[3]);
98
99 sitk::ResampleImageFilter resampler;
100 resampler.SetReferenceImage(fixed);
101 resampler.SetInterpolator(sitk::sitkLinear);
102 resampler.SetDefaultPixelValue(100);
103 resampler.SetTransform(outTx);
104
105 sitk::Image out = resampler.Execute(moving);
106
107 sitk::Image simg1 = sitk::Cast(sitk::RescaleIntensity(fixed), sitk::sitkUInt8);
108 sitk::Image simg2 = sitk::Cast(sitk::RescaleIntensity(out), sitk::sitkUInt8);
109 sitk::Image cimg = sitk::Compose(simg1, simg2, sitk::Divide(sitk::Add(simg1, simg2), 2));
110
111 if (getenv("SITK_NOSHOW") == nullptr)
112 {
113 sitk::Show(cimg, "ImageRegistration3 Composition");
114 }
115
116 return 0;
117}

Callers

nothing calls this directly

Calls 15

WriteTransformFunction · 0.85
CastFunction · 0.85
ShowFunction · 0.85
SetInitialTransformMethod · 0.80
SetInterpolatorMethod · 0.80
AddCommandMethod · 0.80
GetOptimizerIterationMethod · 0.80

Tested by

no test coverage detected