13 #ifndef mitkMultiModalAffineDefaultRegistrationAlgorithm_h
14 #define mitkMultiModalAffineDefaultRegistrationAlgorithm_h
16 #include <mapDiscreteElements.h>
17 #include <mapITKAffineMattesMIMultiResRegistrationAlgorithmTemplate.h>
18 #include <mapConfigure.h>
44 template <
class TImageType>
46 public map::algorithm::boxed::ITKAffineMattesMIMultiResRegistrationAlgorithm<TImageType, TImageType, ::map::algorithm::mitkMultiModalAffineDefaultRegistrationAlgorithmUIDPolicy, SealedFixedInterpolatorPolicyMacro< ::itk::LinearInterpolateImageFunction<TImageType, map::core::continuous::ScalarType> >, map::algorithm::itk::NoComponentInitializationPolicy>
51 typedef map::algorithm::boxed::ITKAffineMattesMIMultiResRegistrationAlgorithm<TImageType, TImageType, ::map::algorithm::mitkMultiModalAffineDefaultRegistrationAlgorithmUIDPolicy, SealedFixedInterpolatorPolicyMacro< ::itk::LinearInterpolateImageFunction<TImageType, map::core::continuous::ScalarType> >, map::algorithm::itk::NoComponentInitializationPolicy>
54 typedef ::itk::SmartPointer<Self>
Pointer;
58 ITKAffineMattesMIMultiResRegistrationAlgorithm);
79 Superclass::configureAlgorithm();
81 this->setResolutionLevels(3);
82 this->_preInitialize =
true;
83 this->_useCenterOfGravity =
false;
85 this->getConcreteOptimizerControl()->getConcreteOptimizer()->SetMaximumStepLength(3.00);
86 this->getConcreteOptimizerControl()->getConcreteOptimizer()->SetMinimumStepLength(0.5);
87 this->getConcreteOptimizerControl()->getConcreteOptimizer()->SetNumberOfIterations(200);
88 this->getConcreteOptimizerControl()->getConcreteOptimizer()->SetRelaxationFactor(0.8);
89 this->getConcreteOptimizerControl()->getConcreteOptimizer()->SetGradientMagnitudeTolerance(1e-4);
92 this->getConcreteMetricControl()->getConcreteMetric()->SetNumberOfHistogramBins(30);
93 this->getConcreteMetricControl()->getConcreteMetric()->SetUseAllPixels(
true);
94 this->getConcreteMetricControl()->getConcreteMetric()->ReinitializeSeed();
95 this->getConcreteMetricControl()->getConcreteMetric()->UseExplicitPDFDerivativesOn();
108 Superclass::doInterLevelSetup();
111 int dimCount = TImageType::ImageDimension*TImageType::ImageDimension + TImageType::ImageDimension;
112 int matrixEnd = TImageType::ImageDimension*TImageType::ImageDimension;
113 typename Superclass::ConcreteOptimizerType::ScalesType scales(dimCount);
114 double matrixScale = 1.0;
115 double transScale = 1.0;
117 if (this->getCurrentLevel() == 0)
120 transScale = 1.0 / 10000;
125 transScale = 1.0 / 1000;
128 for (
int i = 0; i < dimCount; ++i)
132 scales[i] = matrixScale;
137 scales[i] = transScale;
141 this->getConcreteOptimizerControl()->getConcreteOptimizer()->SetScales(scales);
144 if (this->getCurrentLevel() != 0)
146 this->getConcreteMetricControl()->getConcreteMetric()->SetUseAllPixels(
false);
148 unsigned int nrOfSmpl = ::itk::Math::Round<unsigned int, double>
149 (this->getMovingImage()->GetLargestPossibleRegion().GetNumberOfPixels() * 0.30);
151 this->getConcreteMetricControl()->getConcreteMetric()->SetNumberOfSpatialSamples(nrOfSmpl);
158 void operator=(
const Self&);
Default multimodal affine registration algorithm for MITK.
~MultiModalAffineDefaultRegistrationAlgorithm() override
MultiModalAffineDefaultRegistrationAlgorithm()
::itk::SmartPointer< const Self > ConstPointer
mapNewAlgorithmMacro(Self)
MultiModalAffineDefaultRegistrationAlgorithm Self
void configureAlgorithm() override
Configure the algorithm with default parameters.
map::algorithm::boxed::ITKAffineMattesMIMultiResRegistrationAlgorithm< TImageType, TImageType, ::map::algorithm::mitkMultiModalAffineDefaultRegistrationAlgorithmUIDPolicy, SealedFixedInterpolatorPolicyMacro< ::itk::LinearInterpolateImageFunction< TImageType, map::core::continuous::ScalarType > >, map::algorithm::itk::NoComponentInitializationPolicy > Superclass
void doInterLevelSetup() override
Adjust optimizer scales and spatial sampling between resolution levels.
::itk::SmartPointer< Self > Pointer
Find image slices visible on a given plane.