00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017 #ifndef __itkRecursiveGaussianImageFilter_h
00018 #define __itkRecursiveGaussianImageFilter_h
00019
00020 #include "itkRecursiveSeparableImageFilter.h"
00021
00022 namespace itk
00023 {
00024
00036 template <typename TInputImage, typename TOutputImage=TInputImage>
00037 class ITK_EXPORT RecursiveGaussianImageFilter :
00038 public RecursiveSeparableImageFilter<TInputImage,TOutputImage>
00039 {
00040 public:
00042 typedef RecursiveGaussianImageFilter Self;
00043 typedef RecursiveSeparableImageFilter<TInputImage,TOutputImage> Superclass;
00044 typedef SmartPointer<Self> Pointer;
00045 typedef SmartPointer<const Self> ConstPointer;
00046
00047 typedef typename Superclass::RealType RealType;
00048
00050 itkNewMacro(Self);
00051
00053 itkTypeMacro( RecursiveGaussianImageFilter, RecursiveSeparableImageFilter );
00054
00056 itkGetMacro( Sigma, RealType );
00057 itkSetMacro( Sigma, RealType );
00058
00062 typedef enum { ZeroOrder, FirstOrder, SecondOrder } OrderEnumType;
00063
00065 typedef TOutputImage OutputImageType;
00066
00067
00082 itkSetMacro( NormalizeAcrossScale, bool );
00083 itkGetMacro( NormalizeAcrossScale, bool );
00084
00090 itkSetMacro( Order, OrderEnumType );
00091 itkGetMacro( Order, OrderEnumType );
00092
00093
00094 protected:
00095 RecursiveGaussianImageFilter();
00096 virtual ~RecursiveGaussianImageFilter() {};
00097 void PrintSelf(std::ostream& os, Indent indent) const;
00098
00102 virtual void SetUp(void);
00103
00109 void ComputeFilterCoefficients(bool symmetric);
00110
00111 private:
00112 RecursiveGaussianImageFilter(const Self&);
00113 void operator=(const Self&);
00114
00116 RealType m_Sigma;
00117
00119 bool m_NormalizeAcrossScale;
00120
00121 OrderEnumType m_Order;
00122
00123 };
00124
00125 }
00126
00127 #ifndef ITK_MANUAL_INSTANTIATION
00128 #include "itkRecursiveGaussianImageFilter.txx"
00129 #endif
00130
00131 #endif