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
00042 template <typename TInputImage, typename TOutputImage=TInputImage>
00043 class ITK_EXPORT RecursiveGaussianImageFilter :
00044 public RecursiveSeparableImageFilter<TInputImage,TOutputImage>
00045 {
00046 public:
00048 typedef RecursiveGaussianImageFilter Self;
00049 typedef RecursiveSeparableImageFilter<TInputImage,TOutputImage> Superclass;
00050 typedef SmartPointer<Self> Pointer;
00051 typedef SmartPointer<const Self> ConstPointer;
00052
00053 typedef typename Superclass::RealType RealType;
00054
00056 itkNewMacro(Self);
00057
00059 itkTypeMacro( RecursiveGaussianImageFilter, RecursiveSeparableImageFilter );
00060
00063 itkGetMacro( Sigma, RealType );
00064 itkSetMacro( Sigma, RealType );
00065
00069 typedef enum { ZeroOrder, FirstOrder, SecondOrder } OrderEnumType;
00070
00072 typedef TOutputImage OutputImageType;
00073
00074
00090 itkSetMacro( NormalizeAcrossScale, bool );
00091 itkGetMacro( NormalizeAcrossScale, bool );
00092
00099 itkSetMacro( Order, OrderEnumType );
00100 itkGetMacro( Order, OrderEnumType );
00101
00102
00103 protected:
00104 RecursiveGaussianImageFilter();
00105 virtual ~RecursiveGaussianImageFilter() {};
00106 void PrintSelf(std::ostream& os, Indent indent) const;
00107
00111 virtual void SetUp(void);
00112
00118 void ComputeFilterCoefficients(bool symmetric);
00119
00120 private:
00121 RecursiveGaussianImageFilter(const Self&);
00122 void operator=(const Self&);
00123
00125 RealType m_Sigma;
00126
00128 bool m_NormalizeAcrossScale;
00129
00130 OrderEnumType m_Order;
00131
00132 };
00133
00134 }
00135
00136 #ifndef ITK_MANUAL_INSTANTIATION
00137 #include "itkRecursiveGaussianImageFilter.txx"
00138 #endif
00139
00140 #endif