/*========================================================================= Program: Insight Segmentation & Registration Toolkit Module: $RCSfile: itkAnytimeImageToImageMetric2Base.h,v $ Language: C++ Date: $Date: 2007/09/20 21:30:18 $ Version: $Revision: 1.2 $ Copyright (c) Insight Software Consortium. All rights reserved. See ITKCopyright.txt or http://www.itk.org/HTML/Copyright.htm for details. This software is distributed WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the above copyright notices for more information. =========================================================================*/ #ifndef __itkAnytimeImageToImageMetric2Base_h #define __itkAnytimeImageToImageMetric2Base_h #define NUMCHANNELS 20 #include "itkArray2D.h" #include "itkArray.h" #include "itkTransformBase.h" //namespace itk //{ /** \class AnytimeImageToImageMetric2Base * Generic class to allow crosscasts in optimizers. */ class AnytimeImageToImageMetric2Base { public: typedef itk::Array2D HessianType; typedef double MeasureType; typedef itk::Array DerivativeType; typedef itk::Array ParametersType; virtual void GetHessian( const ParametersType& parameters, HessianType& Hessian, const int channel ) const =0; virtual void GetValueAndHessian( const ParametersType& parameters, MeasureType& Value, HessianType& Hessian, const int channel ) const=0 ; /** Get the derivatives of the match measure. */ virtual void GetDerivativeAndHessian( const ParametersType & parameters, DerivativeType & derivative, HessianType& Hessian, const int channel ) const=0; /** Get value and derivatives for multiple valued optimizers. */ virtual void GetValueAndDerivativeAndHessian( const ParametersType & parameters, MeasureType& Value, DerivativeType& Derivative, HessianType& Hessian, const int channel ) const=0; virtual itk::TransformBase::Pointer GetTransformCopy() const=0; virtual void GetHessian( const ParametersType& parameters, HessianType& Hessian) const=0; virtual void GetValueAndHessian( const ParametersType& parameters, MeasureType& Value, HessianType& Hessian ) const =0; /** Get the derivatives of the match measure. */ virtual void GetDerivativeAndHessian( const ParametersType & parameters, DerivativeType & derivative, HessianType& Hessian ) const =0; /** Get value and derivatives for multiple valued optimizers. */ virtual void GetValueAndDerivativeAndHessian( const ParametersType & parameters, MeasureType& Value, DerivativeType& Derivative, HessianType& Hessian) const =0; virtual void GetHessian( const ParametersType& parameters, HessianType& Hessian, const int channel, const double level ) const =0; virtual void GetValueAndHessian( const ParametersType& parameters, MeasureType& Value,HessianType& Hessian, const int channel, const double level ) const=0 ; /** Get the derivatives of the match measure. */ virtual void GetDerivativeAndHessian( const ParametersType & parameters, DerivativeType & derivative, HessianType& Hessian, int channel, double level ) const=0; /** Get value and derivatives for multiple valued optimizers. */ virtual void GetValueAndDerivativeAndHessian( const ParametersType & parameters, MeasureType& Value, DerivativeType& Derivative, HessianType& Hessian, int channel,double level ) const=0 ; virtual void GetHessian( const ParametersType& parameters, HessianType& Hessian, const double level ) const=0 ; virtual void GetValueAndHessian( const ParametersType& parameters, MeasureType& Value, HessianType& Hessian, const double level ) const =0; /** Get the derivatives of the match measure. */ virtual void GetDerivativeAndHessian( const ParametersType & parameters, DerivativeType & derivative, HessianType& Hessian, double level ) const=0; /** Get value and derivatives for multiple valued optimizers. */ virtual void GetValueAndDerivativeAndHessian( const ParametersType & parameters, MeasureType& Value, DerivativeType& Derivative, HessianType& Hessian, double level ) const =0; AnytimeImageToImageMetric2Base(){}; virtual ~AnytimeImageToImageMetric2Base(){}; AnytimeImageToImageMetric2Base(const AnytimeImageToImageMetric2Base&) {}; //purposely not implemented void operator=(const AnytimeImageToImageMetric2Base&){}; //purposely not implemented }; //} // end namespace itk #endif