00001 /*========================================================================= 00002 00003 Program: Insight Segmentation & Registration Toolkit 00004 Module: $RCSfile: itkRecursiveSeparableImageFilter.h,v $ 00005 Language: C++ 00006 Date: $Date: 2002/04/25 01:27:08 $ 00007 Version: $Revision: 1.14 $ 00008 00009 Copyright (c) 2002 Insight Consortium. All rights reserved. 00010 See ITKCopyright.txt or http://www.itk.org/HTML/Copyright.htm for details. 00011 00012 This software is distributed WITHOUT ANY WARRANTY; without even 00013 the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR 00014 PURPOSE. See the above copyright notices for more information. 00015 00016 =========================================================================*/ 00017 #ifndef __itkRecursiveSeparableImageFilter_h 00018 #define __itkRecursiveSeparableImageFilter_h 00019 00020 #include "itkImageToImageFilter.h" 00021 #include "itkNumericTraits.h" 00022 00023 namespace itk 00024 { 00025 00038 template <typename TInputImage, typename TOutputImage=TInputImage> 00039 class ITK_EXPORT RecursiveSeparableImageFilter : 00040 public ImageToImageFilter<TInputImage,TOutputImage> 00041 { 00042 public: 00044 typedef RecursiveSeparableImageFilter Self; 00045 typedef ImageToImageFilter<TInputImage,TOutputImage> Superclass; 00046 typedef SmartPointer<Self> Pointer; 00047 typedef SmartPointer<const Self> ConstPointer; 00048 00050 itkTypeMacro( RecursiveSeparableImageFilter, ImageToImageFilter ); 00051 00053 typedef typename TInputImage::Pointer InputImagePointer; 00054 typedef typename TInputImage::ConstPointer InputImageConstPointer; 00055 00057 typedef typename TInputImage::PixelType InputPixelType; 00058 typedef typename NumericTraits<InputPixelType>::RealType RealType; 00059 00061 typedef TOutputImage OutputImageType; 00062 00064 itkGetMacro(Direction, unsigned int); 00065 00067 itkSetMacro(Direction, unsigned int); 00068 00070 void SetInputImage( const TInputImage * ); 00071 00073 const TInputImage * GetInputImage( void ); 00074 00075 protected: 00076 RecursiveSeparableImageFilter(); 00077 virtual ~RecursiveSeparableImageFilter() {}; 00078 void PrintSelf(std::ostream& os, Indent indent) const; 00079 00081 void GenerateData(void); 00082 00086 virtual void SetUp(void) = 0; 00087 00092 void ApplyRecursiveFilter(unsigned int dimension); 00093 00099 virtual void ComputeFilterCoefficients(bool symmetric) = 0; 00100 00104 void FilterDataArray(RealType *outs, 00105 const RealType *data, unsigned int ln); 00106 00107 private: 00108 RecursiveSeparableImageFilter(const Self&); //purposely not implemented 00109 void operator=(const Self&); //purposely not implemented 00110 00113 unsigned int m_Direction; 00114 00115 protected: 00117 RealType m_K; 00118 00120 RealType m_Spacing; 00121 00123 RealType m_A0; 00124 RealType m_A1; 00125 RealType m_B0; 00126 RealType m_B1; 00127 RealType m_C0; 00128 RealType m_C1; 00129 RealType m_W0; 00130 RealType m_W1; 00131 00133 RealType m_N00; 00134 RealType m_N11; 00135 RealType m_N22; 00136 RealType m_N33; 00137 00140 RealType m_D11; 00141 RealType m_D22; 00142 RealType m_D33; 00143 RealType m_D44; 00144 00146 RealType m_M11; 00147 RealType m_M22; 00148 RealType m_M33; 00149 RealType m_M44; 00150 00152 RealType m_BN1; 00153 RealType m_BN2; 00154 RealType m_BN3; 00155 RealType m_BN4; 00156 00157 RealType m_BM1; 00158 RealType m_BM2; 00159 RealType m_BM3; 00160 RealType m_BM4; 00161 00162 }; 00163 00164 00165 } // end namespace itk 00166 00167 #ifndef ITK_MANUAL_INSTANTIATION 00168 #include "itkRecursiveSeparableImageFilter.txx" 00169 #endif 00170 00171 00172 #endif