ITK  4.2.0
Insight Segmentation and Registration Toolkit
itkImageToImageMetricv4.h
Go to the documentation of this file.
00001 /*=========================================================================
00002  *
00003  *  Copyright Insight Software Consortium
00004  *
00005  *  Licensed under the Apache License, Version 2.0 (the "License");
00006  *  you may not use this file except in compliance with the License.
00007  *  You may obtain a copy of the License at
00008  *
00009  *         http://www.apache.org/licenses/LICENSE-2.0.txt
00010  *
00011  *  Unless required by applicable law or agreed to in writing, software
00012  *  distributed under the License is distributed on an "AS IS" BASIS,
00013  *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
00014  *  See the License for the specific language governing permissions and
00015  *  limitations under the License.
00016  *
00017  *=========================================================================*/
00018 #ifndef __itkImageToImageMetricv4_h
00019 #define __itkImageToImageMetricv4_h
00020 
00021 #include "itkCovariantVector.h"
00022 #include "itkImageFunction.h"
00023 #include "itkObjectToObjectMetric.h"
00024 #include "itkInterpolateImageFunction.h"
00025 #include "itkSpatialObject.h"
00026 #include "itkResampleImageFilter.h"
00027 #include "itkThreadedIndexedContainerPartitioner.h"
00028 #include "itkThreadedImageRegionPartitioner.h"
00029 #include "itkImageToImageFilter.h"
00030 #include "itkImageToImageMetricv4GetValueAndDerivativeThreader.h"
00031 #include "itkGradientRecursiveGaussianImageFilter.h"
00032 #include "itkPointSet.h"
00033 
00034 namespace itk
00035 {
00175 template<class TFixedImage,class TMovingImage,class TVirtualImage = TFixedImage>
00176 class ITK_EXPORT ImageToImageMetricv4 :
00177   public ObjectToObjectMetric<TFixedImage::ImageDimension, TMovingImage::ImageDimension>
00178 {
00179 public:
00180 
00182   typedef ImageToImageMetricv4                                                            Self;
00183   typedef ObjectToObjectMetric<TFixedImage::ImageDimension, TMovingImage::ImageDimension> Superclass;
00184   typedef SmartPointer<Self>                                                              Pointer;
00185   typedef SmartPointer<const Self>                                                        ConstPointer;
00186 
00188   itkTypeMacro(ImageToImageMetricv4, ObjectToObjectMetric);
00189 
00191   typedef typename Superclass::InternalComputationValueType InternalComputationValueType;
00192 
00194   typedef typename Superclass::CoordinateRepresentationType CoordinateRepresentationType;
00195 
00197   typedef typename Superclass::ParametersType       ParametersType;
00198   typedef typename Superclass::ParametersValueType  ParametersValueType;
00199 
00201   typedef typename Superclass::GradientSourceType GradientSourceType;
00202 
00204   typedef typename Superclass::DimensionType      DimensionType;
00205   typedef typename Superclass::DimensionType      ImageDimensionType;
00206 
00208   typedef typename Superclass::FixedTransformType            FixedTransformType;
00209   typedef typename Superclass::FixedTransformPointer         FixedTransformPointer;
00210   typedef typename Superclass::FixedInputPointType           FixedInputPointType;
00211   typedef typename Superclass::FixedOutputPointType          FixedOutputPointType;
00212   typedef typename Superclass::FixedTransformParametersType  FixedTransformParametersType;
00213 
00214   typedef typename Superclass::MovingTransformType            MovingTransformType;
00215   typedef typename Superclass::MovingTransformPointer         MovingTransformPointer;
00216   typedef typename Superclass::MovingInputPointType           MovingInputPointType;
00217   typedef typename Superclass::MovingOutputPointType          MovingOutputPointType;
00218   typedef typename Superclass::MovingTransformParametersType  MovingTransformParametersType;
00219 
00220   typedef typename Superclass::JacobianType                   JacobianType;
00221   typedef typename Superclass::FixedTransformJacobianType     FixedTransformJacobianType;
00222   typedef typename Superclass::MovingTransformJacobianType    MovingTransformJacobianType;
00223 
00225   typedef TFixedImage                             FixedImageType;
00226   typedef typename FixedImageType::PixelType      FixedImagePixelType;
00227   typedef typename FixedImageType::Pointer        FixedImagePointer;
00228   typedef typename FixedImageType::ConstPointer   FixedImageConstPointer;
00229   typedef typename FixedImageType::PointType      FixedImagePointType;
00230   typedef typename FixedImageType::IndexType      FixedImageIndexType;
00231   typedef TMovingImage                            MovingImageType;
00232   typedef typename MovingImageType::PixelType     MovingImagePixelType;
00233   typedef typename MovingImageType::Pointer       MovingImagePointer;
00234   typedef typename MovingImageType::ConstPointer  MovingImageConstPointer;
00235   typedef typename MovingImageType::PointType     MovingImagePointType;
00236   typedef typename MovingImageType::RegionType    MovingImageRegionType;
00237   typedef typename MovingImageType::IndexType     MovingImageIndexType;
00238 
00240   typedef TVirtualImage                             VirtualImageType;
00241   typedef typename VirtualImageType::PixelType      VirtualImagePixelType;
00242   typedef typename VirtualImageType::Pointer        VirtualImagePointer;
00243   typedef typename VirtualImageType::RegionType     VirtualRegionType;
00244   typedef typename VirtualRegionType::SizeType      VirtualSizeType;
00245   typedef typename VirtualImageType::SpacingType    VirtualSpacingType;
00246   typedef typename VirtualImageType::PointType      VirtualOriginType;
00247   typedef typename VirtualImageType::PointType      VirtualPointType;
00248   typedef typename VirtualImageType::DirectionType  VirtualDirectionType;
00249   typedef typename VirtualImageType::SizeType       VirtualRadiusType;
00250   typedef typename VirtualImageType::IndexType      VirtualIndexType;
00251 
00252   /* Image dimension accessors */
00253   itkStaticConstMacro(FixedImageDimension, DimensionType, Superclass::FixedDimension);
00254   itkStaticConstMacro(MovingImageDimension, DimensionType, Superclass::MovingDimension);
00255   itkStaticConstMacro(VirtualImageDimension, DimensionType, Superclass::VirtualDimension);
00256 
00259   typedef SpatialObject< itkGetStaticConstMacro(FixedImageDimension) >  FixedImageMaskType;
00260   typedef typename FixedImageMaskType::Pointer                          FixedImageMaskPointer;
00261   typedef typename FixedImageMaskType::ConstPointer                     FixedImageMaskConstPointer;
00262 
00265   typedef SpatialObject< itkGetStaticConstMacro(MovingImageDimension) > MovingImageMaskType;
00266   typedef typename MovingImageMaskType::Pointer                         MovingImageMaskPointer;
00267   typedef typename MovingImageMaskType::ConstPointer                    MovingImageMaskConstPointer;
00268 
00270   typedef PointSet<typename FixedImageType::PixelType, itkGetStaticConstMacro(FixedImageDimension)>
00271                                                                         FixedSampledPointSetType;
00272   typedef typename FixedSampledPointSetType::Pointer                    FixedSampledPointSetPointer;
00273   typedef typename FixedSampledPointSetType::ConstPointer               FixedSampledPointSetConstPointer;
00274 
00275   typedef PointSet<typename VirtualImageType::PixelType, itkGetStaticConstMacro(VirtualImageDimension)>
00276                                                                                   VirtualSampledPointSetType;
00277 
00278   typedef typename VirtualSampledPointSetType::Pointer VirtualSampledPointSetPointer;
00279 
00281   typedef InterpolateImageFunction< FixedImageType,
00282                                     CoordinateRepresentationType >
00283                                                       FixedInterpolatorType;
00284   typedef InterpolateImageFunction< MovingImageType,
00285                                     CoordinateRepresentationType >
00286                                                       MovingInterpolatorType;
00287   typedef typename FixedInterpolatorType::Pointer     FixedInterpolatorPointer;
00288   typedef typename MovingInterpolatorType::Pointer    MovingInterpolatorPointer;
00289 
00291   typedef   CovariantVector< CoordinateRepresentationType,
00292                              itkGetStaticConstMacro(FixedImageDimension) >
00293                                                       FixedImageGradientType;
00294   typedef   CovariantVector< CoordinateRepresentationType,
00295                              itkGetStaticConstMacro(MovingImageDimension) >
00296                                                       MovingImageGradientType;
00298 
00299   typedef   CovariantVector< CoordinateRepresentationType,
00300                              itkGetStaticConstMacro(VirtualImageDimension) >
00301                                                       VirtualImageGradientType;
00302 
00306   typedef typename NumericTraits< FixedImagePixelType >::RealType
00307                                                     FixedRealType;
00308   typedef CovariantVector< FixedRealType,
00309                            itkGetStaticConstMacro(FixedImageDimension) >
00310                                                     FixedGradientPixelType;
00311   typedef Image< FixedGradientPixelType,
00312                  itkGetStaticConstMacro(FixedImageDimension) >
00313                                                 FixedImageGradientImageType;
00314   typedef typename FixedImageGradientImageType::Pointer
00315                                                 FixedImageGradientImagePointer;
00317 
00318   typedef ImageToImageFilter< FixedImageType, FixedImageGradientImageType >
00319                                                  FixedImageGradientFilterType;
00320 
00321   typedef typename NumericTraits< MovingImagePixelType >::RealType
00322                                                  MovingRealType;
00323   typedef CovariantVector< MovingRealType,
00324                            itkGetStaticConstMacro(MovingImageDimension) >
00325                                                  MovingGradientPixelType;
00326   typedef Image< MovingGradientPixelType,
00327                  itkGetStaticConstMacro(MovingImageDimension) >
00328                                                     MovingImageGradientImageType;
00329   typedef typename MovingImageGradientImageType::Pointer MovingImageGradientImagePointer;
00330 
00331   typedef ImageToImageFilter< MovingImageType, MovingImageGradientImageType >
00332                                                  MovingImageGradientFilterType;
00333   typedef typename FixedImageGradientFilterType::Pointer
00334                                               FixedImageGradientFilterPointer;
00335   typedef typename MovingImageGradientFilterType::Pointer
00336                                               MovingImageGradientFilterPointer;
00337 
00339   typedef GradientRecursiveGaussianImageFilter< FixedImageType,
00340                                                 FixedImageGradientImageType >
00341                                                   DefaultFixedImageGradientFilter;
00342   typedef GradientRecursiveGaussianImageFilter< MovingImageType,
00343                                                 MovingImageGradientImageType >
00344                                                   DefaultMovingImageGradientFilter;
00345 
00348   typedef ImageFunction<FixedImageType,
00349                         CovariantVector<double,
00350                                   itkGetStaticConstMacro( FixedImageDimension )>,
00351                         CoordinateRepresentationType>
00352                                             FixedImageGradientCalculatorType;
00353   typedef ImageFunction<MovingImageType,
00354                         CovariantVector<double,
00355                                   itkGetStaticConstMacro( MovingImageDimension )>,
00356                         CoordinateRepresentationType>
00357                                             MovingImageGradientCalculatorType;
00359 
00360   typedef typename FixedImageGradientCalculatorType::Pointer
00361                                             FixedImageGradientCalculatorPointer;
00362   typedef typename MovingImageGradientCalculatorType::Pointer
00363                                             MovingImageGradientCalculatorPointer;
00364 
00366   typedef typename Superclass::MeasureType    MeasureType;
00367 
00369   typedef typename Superclass::DerivativeType DerivativeType;
00370   typedef typename DerivativeType::ValueType  DerivativeValueType;
00371 
00374   typedef typename Superclass::NumberOfParametersType   NumberOfParametersType;
00375 
00376   /* Set/get images */
00378   itkSetConstObjectMacro(FixedImage, FixedImageType);
00379 
00381   itkGetConstObjectMacro(FixedImage, FixedImageType);
00382 
00384   itkSetConstObjectMacro(MovingImage, MovingImageType);
00385 
00387   itkGetConstObjectMacro(MovingImage, MovingImageType);
00388 
00404   void CreateVirtualDomainImage( VirtualSpacingType & spacing,
00405                                     VirtualOriginType & origin,
00406                                     VirtualDirectionType & direction,
00407                                     VirtualRegionType & region );
00408 
00414   void SetVirtualDomainImage( VirtualImageType * virtualImage);
00415 
00417   itkGetConstObjectMacro(VirtualDomainImage, VirtualImageType);
00418 
00421   const VirtualSpacingType    GetVirtualDomainSpacing( void ) const;
00422   const VirtualOriginType     GetVirtualDomainOrigin( void ) const;
00423   const VirtualDirectionType  GetVirtualDomainDirection( void ) const;
00424   const VirtualRegionType     GetVirtualDomainRegion( void ) const;
00426 
00428   itkSetObjectMacro(FixedInterpolator, FixedInterpolatorType);
00429 
00431   itkGetConstObjectMacro(FixedInterpolator, FixedInterpolatorType);
00432 
00434   itkSetObjectMacro(MovingInterpolator, MovingInterpolatorType);
00435 
00437   itkGetConstObjectMacro(MovingInterpolator, MovingInterpolatorType);
00438 
00440   itkSetObjectMacro(MovingImageMask, MovingImageMaskType);
00441   itkSetConstObjectMacro(MovingImageMask, MovingImageMaskType);
00442   itkGetConstObjectMacro(MovingImageMask, MovingImageMaskType);
00444 
00446   itkSetObjectMacro(FixedImageMask, FixedImageMaskType);
00447   itkSetConstObjectMacro(FixedImageMask, FixedImageMaskType);
00448   itkGetConstObjectMacro(FixedImageMask, FixedImageMaskType);
00450 
00454   itkSetObjectMacro(FixedSampledPointSet, FixedSampledPointSetType);
00455   itkSetConstObjectMacro(FixedSampledPointSet, FixedSampledPointSetType);
00456   itkGetConstObjectMacro(FixedSampledPointSet, FixedSampledPointSetType);
00458 
00460   itkSetMacro(UseFixedSampledPointSet, bool);
00461   itkGetConstReferenceMacro(UseFixedSampledPointSet, bool);
00462   itkBooleanMacro(UseFixedSampledPointSet);
00464 
00466   itkGetConstObjectMacro(VirtualSampledPointSet, VirtualSampledPointSetType);
00467 
00469   itkSetObjectMacro( FixedImageGradientFilter, FixedImageGradientFilterType );
00470   itkGetObjectMacro( FixedImageGradientFilter, FixedImageGradientFilterType );
00471   itkSetObjectMacro( MovingImageGradientFilter, MovingImageGradientFilterType );
00472   itkGetObjectMacro( MovingImageGradientFilter, MovingImageGradientFilterType );
00474 
00476   itkSetObjectMacro( FixedImageGradientCalculator, FixedImageGradientCalculatorType);
00477   itkGetObjectMacro( FixedImageGradientCalculator, FixedImageGradientCalculatorType);
00478   itkSetObjectMacro( MovingImageGradientCalculator, MovingImageGradientCalculatorType);
00479   itkGetObjectMacro( MovingImageGradientCalculator, MovingImageGradientCalculatorType);
00481 
00484   itkSetMacro(UseFixedImageGradientFilter, bool);
00485   itkGetConstReferenceMacro(UseFixedImageGradientFilter, bool);
00486   itkBooleanMacro(UseFixedImageGradientFilter);
00488 
00490   itkSetMacro(UseMovingImageGradientFilter, bool);
00491   itkGetConstReferenceMacro(UseMovingImageGradientFilter, bool);
00492   itkBooleanMacro(UseMovingImageGradientFilter);
00494 
00497   virtual ThreadIdType GetNumberOfThreadsUsed() const;
00498 
00502   virtual void SetMaximumNumberOfThreads( const ThreadIdType threads );
00503   virtual ThreadIdType GetMaximumNumberOfThreads() const;
00505 
00507   itkGetConstObjectMacro(FixedImageGradientImage, FixedImageGradientImageType);
00508 
00510   itkGetConstObjectMacro(MovingImageGradientImage, MovingImageGradientImageType);
00511 
00513   itkGetConstMacro( NumberOfValidPoints, SizeValueType );
00514 
00519   SizeValueType GetNumberOfDomainPoints() const;
00520 
00534   itkSetMacro(UseFloatingPointCorrection, bool);
00535   itkGetConstReferenceMacro(UseFloatingPointCorrection, bool);
00536   itkBooleanMacro(UseFloatingPointCorrection);
00538 
00543   itkSetMacro( FloatingPointCorrectionResolution, DerivativeValueType );
00544   itkGetConstMacro( FloatingPointCorrectionResolution, DerivativeValueType );
00546 
00547   /* Initialize the metric before calling GetValue or GetDerivative.
00548    * Derived classes must call this Superclass version if they override
00549    * this to perform their own initialization.
00550    * \note This is meant to be called once for a particular metric setup.
00551    * That is, when used in registration, this method would be called once
00552    * before entering the registration loop, during which GetValue or
00553    * GetDerivative will be called repeatedly. It must be called again if
00554    * metric settings are changed before beginning a new registration. */
00555   virtual void Initialize(void) throw ( itk::ExceptionObject );
00556 
00557   /* Computes an offset for accessing parameter data from a virtual domain
00558    * index. Relevant for metrics with local-support transforms, to access
00559    * parameter or derivative memory that is stored linearly in a 1D array.
00560    * The result is the offset (1D array index) to the first of N parameters
00561    * corresponding to the given virtual index, where N is the number of
00562    * local parameters. */
00563   OffsetValueType ComputeParameterOffsetFromVirtualDomainIndex( const VirtualIndexType & index, const NumberOfParametersType numberOfLocalParameters ) const;
00564 
00565   virtual MeasureType GetValue() const;
00566 
00567   virtual void GetDerivative( DerivativeType & ) const;
00568 
00574   virtual void GetValueAndDerivative( MeasureType & value, DerivativeType & derivative ) const;
00575 
00579   itkGetConstReferenceMacro(NumberOfSkippedFixedSampledPoints, SizeValueType);
00580 
00581 protected:
00582   /* Interpolators for image gradient filters. */
00583   typedef LinearInterpolateImageFunction< FixedImageGradientImageType,
00584                                           CoordinateRepresentationType >
00585                                                   FixedImageGradientInterpolatorType;
00586   typedef LinearInterpolateImageFunction< MovingImageGradientImageType,
00587                                           CoordinateRepresentationType >
00588                                                   MovingImageGradientInterpolatorType;
00589 
00590   friend class ImageToImageMetricv4GetValueAndDerivativeThreaderBase< ThreadedImageRegionPartitioner< VirtualImageDimension >, Self >;
00591   friend class ImageToImageMetricv4GetValueAndDerivativeThreaderBase< ThreadedIndexedContainerPartitioner, Self >;
00592   friend class ImageToImageMetricv4GetValueAndDerivativeThreader< ThreadedImageRegionPartitioner< VirtualImageDimension >, Self >;
00593   friend class ImageToImageMetricv4GetValueAndDerivativeThreader< ThreadedIndexedContainerPartitioner, Self >;
00594 
00595   /* A DenseGetValueAndDerivativeThreader
00596    * Derived classes must define this class and assign it in their constructor
00597    * if threaded processing in GetValueAndDerivative is performed. */
00598   typename ImageToImageMetricv4GetValueAndDerivativeThreader< ThreadedImageRegionPartitioner< VirtualImageDimension >, Self >::Pointer m_DenseGetValueAndDerivativeThreader;
00599   /* A SparseGetValueAndDerivativeThreader
00600    * Derived classes must define this class and assign it in their constructor
00601    * if threaded processing in GetValueAndDerivative is performed. */
00602   typename ImageToImageMetricv4GetValueAndDerivativeThreader< ThreadedIndexedContainerPartitioner, Self >::Pointer m_SparseGetValueAndDerivativeThreader;
00603 
00608   virtual void InitializeForIteration() const;
00609 
00622   bool TransformAndEvaluateFixedPoint(
00623                            const VirtualIndexType & index,
00624                            const VirtualPointType & point,
00625                            const bool computeImageGradient,
00626                            FixedImagePointType & mappedFixedPoint,
00627                            FixedImagePixelType & mappedFixedPixelValue,
00628                            FixedImageGradientType & mappedFixedImageGradient ) const;
00629 
00631   bool TransformAndEvaluateMovingPoint(
00632                            const VirtualIndexType & index,
00633                            const VirtualPointType & point,
00634                            const bool computeImageGradient,
00635                            MovingImagePointType & mappedMovingPoint,
00636                            MovingImagePixelType & mappedMovingPixelValue,
00637                            MovingImageGradientType & mappedMovingImageGradient ) const;
00638 
00643   virtual void ComputeFixedImageGradientAtPoint(
00644                                     const FixedImagePointType & mappedPoint,
00645                                     FixedImageGradientType & gradient ) const;
00646 
00648   virtual void ComputeMovingImageGradientAtPoint(
00649                                     const MovingImagePointType & mappedPoint,
00650                                     MovingImageGradientType & gradient ) const;
00651 
00657   virtual void ComputeFixedImageGradientAtIndex(
00658                                     const VirtualIndexType & index,
00659                                     FixedImageGradientType & gradient ) const;
00660 
00662   virtual void ComputeMovingImageGradientAtIndex(
00663                                     const VirtualIndexType & index,
00664                                     MovingImageGradientType & gradient ) const;
00665 
00669   virtual void ComputeFixedImageGradientFilterImage();
00670 
00674   virtual void ComputeMovingImageGradientFilterImage() const;
00675 
00682   virtual void GetValueAndDerivativeExecute() const;
00683 
00686   virtual void InitializeDefaultFixedImageGradientFilter(void);
00687   virtual void InitializeDefaultMovingImageGradientFilter(void);
00689 
00690   FixedImageConstPointer  m_FixedImage;
00691   MovingImageConstPointer m_MovingImage;
00692   VirtualImagePointer     m_VirtualDomainImage;
00693 
00695   FixedInterpolatorPointer                                m_FixedInterpolator;
00696   MovingInterpolatorPointer                               m_MovingInterpolator;
00697   typename FixedImageGradientInterpolatorType::Pointer    m_FixedImageGradientInterpolator;
00698   typename MovingImageGradientInterpolatorType::Pointer   m_MovingImageGradientInterpolator;
00699 
00702   bool                          m_UseFixedImageGradientFilter;
00703   bool                          m_UseMovingImageGradientFilter;
00704 
00706   FixedImageGradientFilterPointer   m_FixedImageGradientFilter;
00707   MovingImageGradientFilterPointer  m_MovingImageGradientFilter;
00708 
00711   typename DefaultFixedImageGradientFilter::Pointer
00712                                              m_DefaultFixedImageGradientFilter;
00713   typename DefaultMovingImageGradientFilter::Pointer
00714                                              m_DefaultMovingImageGradientFilter;
00715 
00717   mutable FixedImageGradientImagePointer    m_FixedImageGradientImage;
00718   mutable MovingImageGradientImagePointer   m_MovingImageGradientImage;
00719 
00721   FixedImageGradientCalculatorPointer   m_FixedImageGradientCalculator;
00722   MovingImageGradientCalculatorPointer  m_MovingImageGradientCalculator;
00723 
00728   mutable DerivativeType *                m_DerivativeResult;
00729 
00732   mutable SizeValueType                   m_NumberOfValidPoints;
00733 
00736   bool                                    m_UserHasProvidedVirtualDomainImage;
00737 
00739   FixedImageMaskConstPointer              m_FixedImageMask;
00740   MovingImageMaskConstPointer             m_MovingImageMask;
00741 
00743   FixedSampledPointSetConstPointer        m_FixedSampledPointSet;
00744   VirtualSampledPointSetPointer           m_VirtualSampledPointSet;
00745 
00747   bool                                    m_UseFixedSampledPointSet;
00748 
00749   ImageToImageMetricv4();
00750   virtual ~ImageToImageMetricv4();
00751 
00752   void PrintSelf(std::ostream& os, Indent indent) const;
00753 
00756   virtual void VerifyDisplacementFieldSizeAndPhysicalSpace();
00757 
00764   bool VerifyNumberOfValidPoints( MeasureType & value, DerivativeType & derivative ) const;
00765 
00766 private:
00768   void MapFixedSampledPointSetToVirtual( void );
00769 
00772   mutable bool m_HaveMadeGetValueWarning;
00773 
00774   ImageToImageMetricv4(const Self &); //purposely not implemented
00775   void operator=(const Self &); //purposely not implemented
00776 
00777   //Sample point coordinates from the virtual image domain
00778   std::vector<VirtualPointType> m_VirtualImageCornerPoints;
00779 
00780   /* Keep track of the number of sampled fixed points that are
00781    * deemed invalid during conversion to virtual domain.
00782    * For informational purposes. */
00783   SizeValueType m_NumberOfSkippedFixedSampledPoints;
00784 
00785   bool                m_UseFloatingPointCorrection;
00786   DerivativeValueType m_FloatingPointCorrectionResolution;
00787 
00790   #ifdef ITK_USE_CONCEPT_CHECKING
00791   typedef typename PixelTraits<FixedImagePixelType>::ValueType  FixedImagePixelValueType;
00792   typedef typename PixelTraits<MovingImagePixelType>::ValueType MovingImagePixelValueType;
00793   itkConceptMacro( OnlyDefinedForFloatingPointTypes0, ( itk::Concept::IsFloatingPoint<FixedImagePixelValueType> ) );
00794   itkConceptMacro( OnlyDefinedForFloatingPointTypes1, ( itk::Concept::IsFloatingPoint<MovingImagePixelValueType> ) );
00795   #endif // ITK_USE_CONCEPT_CHECKING
00796 
00797 
00798 };
00799 }//namespace itk
00800 
00801 #ifndef ITK_MANUAL_INSTANTIATION
00802 #include "itkImageToImageMetricv4.hxx"
00803 #endif
00804 
00805 #endif
00806