Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015 #ifndef __itkParzenWindowNormalizedMutualInformationImageToImageMetric_H__
00016 #define __itkParzenWindowNormalizedMutualInformationImageToImageMetric_H__
00017
00018 #include "itkParzenWindowHistogramImageToImageMetric.h"
00019
00020 namespace itk
00021 {
00022
00067 template <class TFixedImage,class TMovingImage >
00068 class ParzenWindowNormalizedMutualInformationImageToImageMetric :
00069 public ParzenWindowHistogramImageToImageMetric< TFixedImage, TMovingImage >
00070 {
00071 public:
00072
00074 typedef ParzenWindowNormalizedMutualInformationImageToImageMetric Self;
00075 typedef ParzenWindowHistogramImageToImageMetric<
00076 TFixedImage, TMovingImage > Superclass;
00077 typedef SmartPointer<Self> Pointer;
00078 typedef SmartPointer<const Self> ConstPointer;
00079
00081 itkNewMacro( Self );
00082
00084 itkTypeMacro(
00085 ParzenWindowNormalizedMutualInformationImageToImageMetric,
00086 ParzenWindowHistogramImageToImageMetric );
00087
00089 typedef typename
00090 Superclass::CoordinateRepresentationType CoordinateRepresentationType;
00091 typedef typename Superclass::MovingImageType MovingImageType;
00092 typedef typename Superclass::MovingImagePixelType MovingImagePixelType;
00093 typedef typename Superclass::MovingImageConstPointer MovingImageConstPointer;
00094 typedef typename Superclass::FixedImageType FixedImageType;
00095 typedef typename Superclass::FixedImageConstPointer FixedImageConstPointer;
00096 typedef typename Superclass::FixedImageRegionType FixedImageRegionType;
00097 typedef typename Superclass::TransformType TransformType;
00098 typedef typename Superclass::TransformPointer TransformPointer;
00099 typedef typename Superclass::InputPointType InputPointType;
00100 typedef typename Superclass::OutputPointType OutputPointType;
00101 typedef typename Superclass::TransformParametersType TransformParametersType;
00102 typedef typename Superclass::TransformJacobianType TransformJacobianType;
00103 typedef typename Superclass::InterpolatorType InterpolatorType;
00104 typedef typename Superclass::InterpolatorPointer InterpolatorPointer;
00105 typedef typename Superclass::RealType RealType;
00106 typedef typename Superclass::GradientPixelType GradientPixelType;
00107 typedef typename Superclass::GradientImageType GradientImageType;
00108 typedef typename Superclass::GradientImagePointer GradientImagePointer;
00109 typedef typename Superclass::GradientImageFilterType GradientImageFilterType;
00110 typedef typename Superclass::GradientImageFilterPointer GradientImageFilterPointer;
00111 typedef typename Superclass::FixedImageMaskType FixedImageMaskType;
00112 typedef typename Superclass::FixedImageMaskPointer FixedImageMaskPointer;
00113 typedef typename Superclass::MovingImageMaskType MovingImageMaskType;
00114 typedef typename Superclass::MovingImageMaskPointer MovingImageMaskPointer;
00115 typedef typename Superclass::MeasureType MeasureType;
00116 typedef typename Superclass::DerivativeType DerivativeType;
00117 typedef typename Superclass::ParametersType ParametersType;
00118 typedef typename Superclass::FixedImagePixelType FixedImagePixelType;
00119 typedef typename Superclass::MovingImageRegionType MovingImageRegionType;
00120 typedef typename Superclass::ImageSamplerType ImageSamplerType;
00121 typedef typename Superclass::ImageSamplerPointer ImageSamplerPointer;
00122 typedef typename Superclass::ImageSampleContainerType ImageSampleContainerType;
00123 typedef typename
00124 Superclass::ImageSampleContainerPointer ImageSampleContainerPointer;
00125 typedef typename Superclass::FixedImageLimiterType FixedImageLimiterType;
00126 typedef typename Superclass::MovingImageLimiterType MovingImageLimiterType;
00127 typedef typename
00128 Superclass::FixedImageLimiterOutputType FixedImageLimiterOutputType;
00129 typedef typename
00130 Superclass::MovingImageLimiterOutputType MovingImageLimiterOutputType;
00131 typedef typename
00132 Superclass::MovingImageDerivativeScalesType MovingImageDerivativeScalesType;
00133
00135 itkStaticConstMacro( FixedImageDimension, unsigned int,
00136 FixedImageType::ImageDimension );
00137
00139 itkStaticConstMacro( MovingImageDimension, unsigned int,
00140 MovingImageType::ImageDimension );
00141
00143 MeasureType GetValue( const ParametersType& parameters ) const;
00144
00146 void GetValueAndDerivative( const ParametersType& parameters,
00147 MeasureType& Value, DerivativeType& Derivative ) const;
00148
00149 protected:
00150
00152 ParzenWindowNormalizedMutualInformationImageToImageMetric() {};
00153
00155 virtual ~ParzenWindowNormalizedMutualInformationImageToImageMetric() {};
00156
00158 void PrintSelf( std::ostream& os, Indent indent ) const;
00159
00163 typedef typename Superclass::FixedImageIndexType FixedImageIndexType;
00164 typedef typename Superclass::FixedImageIndexValueType FixedImageIndexValueType;
00165 typedef typename Superclass::MovingImageIndexType MovingImageIndexType;
00166 typedef typename Superclass::FixedImagePointType FixedImagePointType;
00167 typedef typename Superclass::MovingImagePointType MovingImagePointType;
00168 typedef typename Superclass::MovingImageContinuousIndexType MovingImageContinuousIndexType;
00169 typedef typename Superclass::BSplineInterpolatorType BSplineInterpolatorType;
00170 typedef typename Superclass::CentralDifferenceGradientFilterType CentralDifferenceGradientFilterType;
00171 typedef typename Superclass::MovingImageDerivativeType MovingImageDerivativeType;
00172 typedef typename Superclass::PDFValueType PDFValueType;
00173 typedef typename Superclass::MarginalPDFType MarginalPDFType;
00174 typedef typename Superclass::JointPDFType JointPDFType;
00175 typedef typename Superclass::JointPDFDerivativesType JointPDFDerivativesType;
00176 typedef typename Superclass::IncrementalMarginalPDFType IncrementalMarginalPDFType;
00177 typedef typename Superclass::JointPDFIndexType JointPDFIndexType;
00178 typedef typename Superclass::JointPDFRegionType JointPDFRegionType;
00179 typedef typename Superclass::JointPDFSizeType JointPDFSizeType;
00180 typedef typename Superclass::JointPDFDerivativesIndexType JointPDFDerivativesIndexType;
00181 typedef typename Superclass::JointPDFDerivativesRegionType JointPDFDerivativesRegionType;
00182 typedef typename Superclass::JointPDFDerivativesSizeType JointPDFDerivativesSizeType;
00183 typedef typename Superclass::ParzenValueContainerType ParzenValueContainerType;
00184 typedef typename Superclass::KernelFunctionType KernelFunctionType;
00185 typedef typename Superclass::NonZeroJacobianIndicesType NonZeroJacobianIndicesType;
00186
00189 virtual void ComputeLogMarginalPDF( MarginalPDFType & pdf ) const;
00190
00197 virtual MeasureType ComputeNormalizedMutualInformation( MeasureType & jointEntropy ) const;
00198
00199 private:
00200
00202 ParzenWindowNormalizedMutualInformationImageToImageMetric( const Self& );
00204 void operator=( const Self& );
00205
00206 };
00207
00208 }
00209
00210 #ifndef ITK_MANUAL_INSTANTIATION
00211 #include "itkParzenWindowNormalizedMutualInformationImageToImageMetric.hxx"
00212 #endif
00213
00214 #endif // end #ifndef __itkParzenWindowNormalizedMutualInformationImageToImageMetric_H__
00215