go home Home | Main Page | Modules | Namespace List | Class Hierarchy | Alphabetical List | Data Structures | File List | Namespace Members | Data Fields | Globals | Related Pages
elxNormalizedMutualInformationMetric.h
Go to the documentation of this file.
00001 /*======================================================================
00002 
00003   This file is part of the elastix software.
00004 
00005   Copyright (c) University Medical Center Utrecht. All rights reserved.
00006   See src/CopyrightElastix.txt or http://elastix.isi.uu.nl/legal.php for
00007   details.
00008 
00009      This software is distributed WITHOUT ANY WARRANTY; without even
00010      the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
00011      PURPOSE. See the above copyright notices for more information.
00012 
00013 ======================================================================*/
00014 
00015 #ifndef __elxNormalizedMutualInformationMetric_H__
00016 #define __elxNormalizedMutualInformationMetric_H__
00017 
00018 #include "elxIncludes.h"
00019 #include "itkParzenWindowNormalizedMutualInformationImageToImageMetric.h"
00020 
00021 #include "elxTimer.h"
00022 
00023 namespace elastix
00024 {
00025 using namespace itk;
00026 
00072   template <class TElastix >
00073     class NormalizedMutualInformationMetric :
00074     public
00075       ParzenWindowNormalizedMutualInformationImageToImageMetric<
00076         ITK_TYPENAME MetricBase<TElastix>::FixedImageType,
00077         ITK_TYPENAME MetricBase<TElastix>::MovingImageType >,
00078     public MetricBase<TElastix>
00079   {
00080   public:
00081 
00083     typedef NormalizedMutualInformationMetric         Self;
00084     typedef ParzenWindowNormalizedMutualInformationImageToImageMetric<
00085       typename MetricBase<TElastix>::FixedImageType,
00086       typename MetricBase<TElastix>::MovingImageType >    Superclass1;
00087     typedef MetricBase<TElastix>                          Superclass2;
00088     typedef SmartPointer<Self>                            Pointer;
00089     typedef SmartPointer<const Self>                      ConstPointer;
00090 
00092     itkNewMacro( Self );
00093 
00095     itkTypeMacro( NormalizedMutualInformationMetric,
00096       ParzenWindowNormalizedMutualInformationImageToImageMetric );
00097 
00102     elxClassNameMacro( "NormalizedMutualInformation" );
00103 
00105     typedef typename
00106       Superclass1::CoordinateRepresentationType              CoordinateRepresentationType;
00107     typedef typename Superclass1::MovingImageType            MovingImageType;
00108     typedef typename Superclass1::MovingImagePixelType       MovingImagePixelType;
00109     typedef typename Superclass1::MovingImageConstPointer    MovingImageConstPointer;
00110     typedef typename Superclass1::FixedImageType             FixedImageType;
00111     typedef typename Superclass1::FixedImageConstPointer     FixedImageConstPointer;
00112     typedef typename Superclass1::FixedImageRegionType       FixedImageRegionType;
00113     typedef typename Superclass1::TransformType              TransformType;
00114     typedef typename Superclass1::TransformPointer           TransformPointer;
00115     typedef typename Superclass1::InputPointType             InputPointType;
00116     typedef typename Superclass1::OutputPointType            OutputPointType;
00117     typedef typename Superclass1::TransformParametersType    TransformParametersType;
00118     typedef typename Superclass1::TransformJacobianType      TransformJacobianType;
00119     typedef typename Superclass1::InterpolatorType           InterpolatorType;
00120     typedef typename Superclass1::InterpolatorPointer        InterpolatorPointer;
00121     typedef typename Superclass1::RealType                   RealType;
00122     typedef typename Superclass1::GradientPixelType          GradientPixelType;
00123     typedef typename Superclass1::GradientImageType          GradientImageType;
00124     typedef typename Superclass1::GradientImagePointer       GradientImagePointer;
00125     typedef typename Superclass1::GradientImageFilterType    GradientImageFilterType;
00126     typedef typename Superclass1::GradientImageFilterPointer GradientImageFilterPointer;
00127     typedef typename Superclass1::FixedImageMaskType         FixedImageMaskType;
00128     typedef typename Superclass1::FixedImageMaskPointer      FixedImageMaskPointer;
00129     typedef typename Superclass1::MovingImageMaskType        MovingImageMaskType;
00130     typedef typename Superclass1::MovingImageMaskPointer     MovingImageMaskPointer;
00131     typedef typename Superclass1::MeasureType                MeasureType;
00132     typedef typename Superclass1::DerivativeType             DerivativeType;
00133     typedef typename Superclass1::ParametersType             ParametersType;
00134     typedef typename Superclass1::FixedImagePixelType        FixedImagePixelType;
00135     typedef typename Superclass1::MovingImageRegionType      MovingImageRegionType;
00136     typedef typename Superclass1::ImageSamplerType           ImageSamplerType;
00137     typedef typename Superclass1::ImageSamplerPointer        ImageSamplerPointer;
00138     typedef typename Superclass1::ImageSampleContainerType   ImageSampleContainerType;
00139     typedef typename
00140       Superclass1::ImageSampleContainerPointer               ImageSampleContainerPointer;
00141     typedef typename Superclass1::FixedImageLimiterType      FixedImageLimiterType;
00142     typedef typename Superclass1::MovingImageLimiterType     MovingImageLimiterType;
00143     typedef typename
00144       Superclass1::FixedImageLimiterOutputType               FixedImageLimiterOutputType;
00145     typedef typename
00146       Superclass1::MovingImageLimiterOutputType              MovingImageLimiterOutputType;
00147     typedef typename
00148       Superclass1::MovingImageDerivativeScalesType           MovingImageDerivativeScalesType;
00149 
00151     itkStaticConstMacro( FixedImageDimension, unsigned int,
00152       FixedImageType::ImageDimension );
00153 
00155     itkStaticConstMacro( MovingImageDimension, unsigned int,
00156       MovingImageType::ImageDimension );
00157 
00159     typedef typename Superclass2::ElastixType               ElastixType;
00160     typedef typename Superclass2::ElastixPointer            ElastixPointer;
00161     typedef typename Superclass2::ConfigurationType         ConfigurationType;
00162     typedef typename Superclass2::ConfigurationPointer      ConfigurationPointer;
00163     typedef typename Superclass2::RegistrationType          RegistrationType;
00164     typedef typename Superclass2::RegistrationPointer       RegistrationPointer;
00165     typedef typename Superclass2::ITKBaseType               ITKBaseType;
00166 
00168     typedef tmr::Timer          TimerType;
00170     typedef TimerType::Pointer  TimerPointer;
00171 
00177     virtual void BeforeEachResolution( void );
00178 
00181     virtual void Initialize(void) throw (ExceptionObject);
00182 
00183   protected:
00184 
00186     NormalizedMutualInformationMetric()
00187     {
00188       this->SetUseDerivative(true);
00189     };
00190 
00192     virtual ~NormalizedMutualInformationMetric() {}
00193 
00194   private:
00195 
00197     NormalizedMutualInformationMetric( const Self& ); // purposely not implemented
00199     void operator=( const Self& );                // purposely not implemented
00200 
00201   }; // end class NormalizedMutualInformationMetric
00202 
00203 
00204 } // end namespace elastix
00205 
00206 
00207 #ifndef ITK_MANUAL_INSTANTIATION
00208 #include "elxNormalizedMutualInformationMetric.hxx"
00209 #endif
00210 
00211 #endif // end #ifndef __elxNormalizedMutualInformationMetric_H__


Generated on 24-05-2012 for elastix by doxygen 1.7.6.1 elastix logo