00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018 #ifndef _itkRadialBasisFunctionBase_h
00019 #define _itkRadialBasisFunctionBase_h
00020
00021 #include "itkFunctionBase.h"
00022 #include "itkArray.h"
00023
00024 namespace itk
00025 {
00026 namespace Statistics
00027 {
00028
00029 template<class ScalarType>
00030 class RadialBasisFunctionBase : public FunctionBase<ScalarType,ScalarType>
00031 {
00032 public:
00033
00035 typedef RadialBasisFunctionBase Self;
00036 typedef FunctionBase<ScalarType,ScalarType> Superclass;
00037 typedef SmartPointer<Self> Pointer;
00038 typedef SmartPointer<const Self> ConstPointer;
00039
00041 itkTypeMacro(RadialBasisFunctionBase, FunctionBase);
00042
00044 typedef Array<ScalarType> ArrayType;
00045
00047 virtual ScalarType Evaluate(const ScalarType& input) const=0;
00048
00050 virtual ScalarType EvaluateDerivative(const ScalarType& dist, const ArrayType& input,
00051 char mode,int element_id=0) const=0;
00052
00053 itkSetMacro(Radius,ScalarType);
00054 itkGetConstMacro( Radius, ScalarType );
00055
00056 itkSetMacro(Center,ArrayType);
00057 itkGetConstMacro(Center, ArrayType );
00058
00059 protected:
00060
00061 RadialBasisFunctionBase()
00062 {
00063 m_Radius = 0;
00064 }
00065 virtual ~RadialBasisFunctionBase() {};
00066
00068 virtual void PrintSelf( std::ostream& os, Indent indent ) const
00069 {
00070 os << indent << "RadialBasisFunctionBase(" << this << ")" << std::endl;
00071 Superclass::PrintSelf( os, indent );
00072 }
00073
00074 private:
00075
00076 ArrayType m_Center;
00077 ScalarType m_Radius;
00078
00079 RadialBasisFunctionBase(const Self&);
00080 void operator=(const Self&);
00081 };
00082
00083 }
00084 }
00085
00086 #endif