00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017 #ifndef __itkGaussianSpatialFunction_h
00018 #define __itkGaussianSpatialFunction_h
00019
00020 #include "itkSpatialFunction.h"
00021 #include "itkFixedArray.h"
00022 #include "itkPoint.h"
00023
00024 namespace itk
00025 {
00026
00040 template <typename TOutput=double,
00041 unsigned int VImageDimension=3,
00042 typename TInput=Point<double, VImageDimension> >
00043 class ITK_EXPORT GaussianSpatialFunction
00044 : public SpatialFunction<TOutput, VImageDimension, TInput>
00045 {
00046 public:
00048 typedef GaussianSpatialFunction Self;
00049 typedef SpatialFunction<TOutput, VImageDimension, TInput> Superclass;
00050 typedef SmartPointer<Self> Pointer;
00051 typedef SmartPointer<const Self> ConstPointer;
00052
00054 itkNewMacro(Self);
00055
00057 itkTypeMacro(GaussianSpatialFunction, SpatialFunction);
00058
00060 typedef typename Superclass::InputType InputType;
00061
00063 typedef typename Superclass::OutputType OutputType;
00064
00066 typedef FixedArray<double, VImageDimension> ArrayType;
00067
00069 OutputType Evaluate(const TInput& position) const;
00070
00072 itkSetMacro(Scale, double);
00073 itkGetMacro(Scale, double);
00074 itkSetMacro(Normalized, bool);
00075 itkGetMacro(Normalized, bool);
00076 itkSetMacro(Sigma, ArrayType);
00077 itkGetMacro(Sigma, ArrayType);
00078 itkSetMacro(Mean, ArrayType);
00079 itkGetMacro(Mean, ArrayType);
00081
00082 protected:
00083 GaussianSpatialFunction();
00084 virtual ~GaussianSpatialFunction();
00085 void PrintSelf(std::ostream& os, Indent indent) const;
00086
00087 private:
00088 GaussianSpatialFunction(const Self&);
00089 void operator=(const Self&);
00090
00092 ArrayType m_Sigma;
00093
00095 ArrayType m_Mean;
00096
00098 double m_Scale;
00099
00101 bool m_Normalized;
00102
00103 };
00104
00105 }
00106
00107
00108
00109 #define ITK_TEMPLATE_GaussianSpatialFunction(_, EXPORT, x, y) namespace itk { \
00110 _(3(class EXPORT GaussianSpatialFunction< ITK_TEMPLATE_3 x >)) \
00111 namespace Templates { typedef GaussianSpatialFunction< ITK_TEMPLATE_3 x >\
00112 GaussianSpatialFunction##y; } \
00113 }
00114
00115 #if ITK_TEMPLATE_EXPLICIT
00116 # include "Templates/itkGaussianSpatialFunction+-.h"
00117 #endif
00118
00119 #if ITK_TEMPLATE_TXX
00120 # include "itkGaussianSpatialFunction.txx"
00121 #endif
00122
00123 #endif
00124