Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018 #include "mitkMetricFactory.h"
00019 #include "mitkMetricParameters.h"
00020
00021 #include <itkMeanSquaresImageToImageMetric.h>
00022 #include <itkMutualInformationImageToImageMetric.h>
00023 #include <itkNormalizedCorrelationImageToImageMetric.h>
00024 #include <itkMeanReciprocalSquareDifferenceImageToImageMetric.h>
00025 #include <itkMattesMutualInformationImageToImageMetric.h>
00026 #include <itkKullbackLeiblerCompareHistogramImageToImageMetric.h>
00027 #include <itkGradientDifferenceImageToImageMetric.h>
00028 #include <itkCorrelationCoefficientHistogramImageToImageMetric.h>
00029 #include <itkMeanSquaresHistogramImageToImageMetric.h>
00030 #include <itkMutualInformationHistogramImageToImageMetric.h>
00031 #include <itkNormalizedMutualInformationHistogramImageToImageMetric.h>
00032 #include <itkMatchCardinalityImageToImageMetric.h>
00033 #include <itkKappaStatisticImageToImageMetric.h>
00034
00035 namespace mitk {
00036
00037 template < class TPixelType, unsigned int VImageDimension >
00038 MetricFactory<TPixelType, VImageDimension>::MetricFactory() : m_MetricParameters(NULL)
00039 {
00040 }
00041
00042 template < class TPixelType, unsigned int VImageDimension >
00043 typename MetricFactory< TPixelType, VImageDimension>::MetricPointer
00044 MetricFactory<TPixelType, VImageDimension>
00045 ::GetMetric( )
00046 {
00047 int metric = m_MetricParameters->GetMetric();
00048 if (metric == MetricParameters::MEANSQUARESIMAGETOIMAGEMETRIC)
00049 {
00050 typename itk::MeanSquaresImageToImageMetric<FixedImageType, MovingImageType>::Pointer MetricPointer = itk::MeanSquaresImageToImageMetric<FixedImageType, MovingImageType>::New();
00051 MetricPointer->SetComputeGradient(m_MetricParameters->GetComputeGradient());
00052 return MetricPointer.GetPointer();
00053 }
00054 else if (metric == MetricParameters::NORMALIZEDCORRELATIONIMAGETOIMAGEMETRIC)
00055 {
00056 typename itk::NormalizedCorrelationImageToImageMetric<FixedImageType, MovingImageType>::Pointer MetricPointer = itk::NormalizedCorrelationImageToImageMetric<FixedImageType, MovingImageType>::New();
00057 MetricPointer->SetComputeGradient(m_MetricParameters->GetComputeGradient());
00058 return MetricPointer.GetPointer();
00059 }
00060 else if (metric == MetricParameters::GRADIENTDIFFERENCEIMAGETOIMAGEMETRIC)
00061 {
00062 typename itk::GradientDifferenceImageToImageMetric<FixedImageType, MovingImageType>::Pointer MetricPointer = itk::GradientDifferenceImageToImageMetric<FixedImageType, MovingImageType>::New();
00063 MetricPointer->SetComputeGradient(m_MetricParameters->GetComputeGradient());
00064 return MetricPointer.GetPointer();
00065 }
00066 else if (metric == MetricParameters::KULLBACKLEIBLERCOMPAREHISTOGRAMIMAGETOIMAGEMETRIC)
00067 {
00068 typename itk::KullbackLeiblerCompareHistogramImageToImageMetric<FixedImageType, MovingImageType>::Pointer MetricPointer = itk::KullbackLeiblerCompareHistogramImageToImageMetric<FixedImageType, MovingImageType>::New();
00069 unsigned int nBins = m_MetricParameters->GetNumberOfHistogramBinsKullbackLeiblerCompareHistogram();
00070 typename itk::KullbackLeiblerCompareHistogramImageToImageMetric<FixedImageType, MovingImageType>::HistogramType::SizeType histogramSize;
00071 histogramSize[0] = nBins;
00072 histogramSize[1] = nBins;
00073 MetricPointer->SetHistogramSize(histogramSize);
00074 MetricPointer->SetComputeGradient(m_MetricParameters->GetComputeGradient());
00075 return MetricPointer.GetPointer();
00076 }
00077 else if (metric == MetricParameters::CORRELATIONCOEFFICIENTHISTOGRAMIMAGETOIMAGEMETRIC)
00078 {
00079 typename itk::CorrelationCoefficientHistogramImageToImageMetric<FixedImageType, MovingImageType>::Pointer MetricPointer = itk::CorrelationCoefficientHistogramImageToImageMetric<FixedImageType, MovingImageType>::New();
00080 unsigned int nBins = m_MetricParameters->GetNumberOfHistogramBinsCorrelationCoefficientHistogram();
00081 typename itk::CorrelationCoefficientHistogramImageToImageMetric<FixedImageType, MovingImageType>::HistogramType::SizeType histogramSize;
00082 histogramSize[0] = nBins;
00083 histogramSize[1] = nBins;
00084 MetricPointer->SetHistogramSize(histogramSize);
00085 MetricPointer->SetComputeGradient(m_MetricParameters->GetComputeGradient());
00086 return MetricPointer.GetPointer();
00087 }
00088 else if (metric == MetricParameters::MEANSQUARESHISTOGRAMIMAGETOIMAGEMETRIC)
00089 {
00090 typename itk::MeanSquaresHistogramImageToImageMetric<FixedImageType, MovingImageType>::Pointer MetricPointer = itk::MeanSquaresHistogramImageToImageMetric<FixedImageType, MovingImageType>::New();
00091 unsigned int nBins = m_MetricParameters->GetNumberOfHistogramBinsMeanSquaresHistogram();
00092 typename itk::MeanSquaresHistogramImageToImageMetric<FixedImageType, MovingImageType>::HistogramType::SizeType histogramSize;
00093 histogramSize[0] = nBins;
00094 histogramSize[1] = nBins;
00095 MetricPointer->SetHistogramSize(histogramSize);
00096 MetricPointer->SetComputeGradient(m_MetricParameters->GetComputeGradient());
00097 return MetricPointer.GetPointer();
00098 }
00099 else if (metric == MetricParameters::MUTUALINFORMATIONHISTOGRAMIMAGETOIMAGEMETRIC)
00100 {
00101 typename itk::MutualInformationHistogramImageToImageMetric<FixedImageType, MovingImageType>::Pointer MetricPointer = itk::MutualInformationHistogramImageToImageMetric<FixedImageType, MovingImageType>::New();
00102 unsigned int nBins = m_MetricParameters->GetNumberOfHistogramBinsMutualInformationHistogram();
00103 typename itk::MutualInformationHistogramImageToImageMetric<FixedImageType, MovingImageType>::HistogramType::SizeType histogramSize;
00104 histogramSize[0] = nBins;
00105 histogramSize[1] = nBins;
00106 MetricPointer->SetHistogramSize(histogramSize);
00107 MetricPointer->SetComputeGradient(m_MetricParameters->GetComputeGradient());
00108 return MetricPointer.GetPointer();
00109 }
00110 else if (metric == MetricParameters::NORMALIZEDMUTUALINFORMATIONHISTOGRAMIMAGETOIMAGEMETRIC)
00111 {
00112 typename itk::NormalizedMutualInformationHistogramImageToImageMetric<FixedImageType, MovingImageType>::Pointer MetricPointer = itk::NormalizedMutualInformationHistogramImageToImageMetric<FixedImageType, MovingImageType>::New();
00113 unsigned int nBins = m_MetricParameters->GetNumberOfHistogramBinsNormalizedMutualInformationHistogram();
00114 typename itk::NormalizedMutualInformationHistogramImageToImageMetric<FixedImageType, MovingImageType>::HistogramType::SizeType histogramSize;
00115 histogramSize[0] = nBins;
00116 histogramSize[1] = nBins;
00117 MetricPointer->SetHistogramSize( histogramSize );
00118 MetricPointer->SetComputeGradient(m_MetricParameters->GetComputeGradient());
00119 return MetricPointer.GetPointer();
00120 }
00121 else if (metric == MetricParameters::MATTESMUTUALINFORMATIONIMAGETOIMAGEMETRIC)
00122 {
00123 typename itk::MattesMutualInformationImageToImageMetric<FixedImageType, MovingImageType>::Pointer MetricPointer = itk::MattesMutualInformationImageToImageMetric<FixedImageType, MovingImageType>::New();
00124 bool useSampling = m_MetricParameters->GetUseSamplesMattesMutualInformation();
00125 if( useSampling )
00126 {
00127
00128 MetricPointer->SetNumberOfSpatialSamples( m_MetricParameters->GetSpatialSamplesMattesMutualInformation() );
00129 }
00130 else
00131 {
00132 MetricPointer->UseAllPixelsOn();
00133 }
00134 MetricPointer->SetNumberOfHistogramBins(m_MetricParameters->GetNumberOfHistogramBinsMattesMutualInformation());
00135 MetricPointer->ReinitializeSeed( 76926294 );
00136 MetricPointer->SetComputeGradient(m_MetricParameters->GetComputeGradient());
00137 return MetricPointer.GetPointer();
00138 }
00139 else if (metric == MetricParameters::MEANRECIPROCALSQUAREDIFFERENCEIMAGETOIMAGEMETRIC)
00140 {
00141 typename itk::MeanReciprocalSquareDifferenceImageToImageMetric<FixedImageType, MovingImageType>::Pointer MetricPointer = itk::MeanReciprocalSquareDifferenceImageToImageMetric<FixedImageType, MovingImageType>::New();
00142
00143
00144
00145
00146 MetricPointer->SetLambda( m_MetricParameters->GetLambdaMeanReciprocalSquareDifference() );
00147 MetricPointer->SetComputeGradient(m_MetricParameters->GetComputeGradient());
00148 return MetricPointer.GetPointer();
00149 }
00150 else if (metric == MetricParameters::MUTUALINFORMATIONIMAGETOIMAGEMETRIC)
00151 {
00152 typename itk::MutualInformationImageToImageMetric<FixedImageType, MovingImageType>::Pointer MetricPointer = itk::MutualInformationImageToImageMetric<FixedImageType, MovingImageType>::New();
00153 MetricPointer->SetNumberOfSpatialSamples(m_MetricParameters->GetSpatialSamplesMutualInformation());
00154 MetricPointer->SetFixedImageStandardDeviation(m_MetricParameters->GetFixedImageStandardDeviationMutualInformation());
00155 MetricPointer->SetMovingImageStandardDeviation(m_MetricParameters->GetMovingImageStandardDeviationMutualInformation());
00156 MetricPointer->SetComputeGradient(m_MetricParameters->GetComputeGradient());
00157 return MetricPointer.GetPointer();
00158 }
00159 else if (metric == MetricParameters::MATCHCARDINALITYIMAGETOIMAGEMETRIC)
00160 {
00161 typename itk::MatchCardinalityImageToImageMetric<FixedImageType, MovingImageType>::Pointer MetricPointer = itk::MatchCardinalityImageToImageMetric<FixedImageType, MovingImageType>::New();
00162 MetricPointer->SetComputeGradient(m_MetricParameters->GetComputeGradient());
00163 return MetricPointer.GetPointer();
00164 }
00165 else if (metric == MetricParameters::KAPPASTATISTICIMAGETOIMAGEMETRIC)
00166 {
00167 typename itk::KappaStatisticImageToImageMetric<FixedImageType, MovingImageType>::Pointer MetricPointer = itk::KappaStatisticImageToImageMetric<FixedImageType, MovingImageType>::New();
00168 MetricPointer->SetComputeGradient(m_MetricParameters->GetComputeGradient());
00169 return MetricPointer.GetPointer();
00170 }
00171 return NULL;
00172 }
00173 }