Main Page   Groups   Namespace List   Class Hierarchy   Alphabetical List   Compound List   File List   Namespace Members   Compound Members   File Members   Concepts

itkGradientVectorFlowImageFilter.h

Go to the documentation of this file.
00001 #ifndef __itkGradientVectorFlowImageFilter_h
00002 #define __itkGradientVectorFlowImageFilter_h
00003 
00004 #include "itkImageToImageFilter.h"
00005 #include "vnl/vnl_matrix_fixed.h"
00006 #include "vnl/vnl_math.h"
00007 #include "itkImage.h"
00008 #include "itkVector.h"
00009 #include "itkLaplacianImageFilter.h"
00010 #include "itkImageRegionIterator.h"
00011 #include "itkImageRegionConstIteratorWithIndex.h"
00012 //#include "itkImageRegionConstIterator.h"
00013 
00014 namespace itk
00015 {
00016 
00026 template <class TInputImage, class TOutputImage>
00027 class GradientVectorFlowImageFilter : public ImageToImageFilter<TInputImage, TOutputImage>
00028 {
00029 public:
00031   typedef GradientVectorFlowImageFilter  Self;
00032 
00034   typedef ImageToImageFilter<TInputImage, TOutputImage> Superclass;
00035 
00037   typedef SmartPointer<Self>  Pointer;
00038   typedef SmartPointer<const Self>  ConstPointer;
00039 
00041   itkNewMacro(Self);
00042   
00044   itkTypeMacro(GradientVectorFlowImageFilter, ImageToImageFilter);
00045 
00047   typedef TInputImage InputImageType;
00048   typedef TOutputImage OutputImageType;
00049 
00050   typedef typename TInputImage::IndexType IndexType;
00051   typedef typename TInputImage::SizeType SizeType;
00052   typedef typename TInputImage::PixelType PixelType;
00053   typedef typename OutputImageType::Pointer OutputImagePointer;
00054   typedef typename OutputImageType::RegionType RegionType;
00055 
00057 //  typedef ImageRegionConstIterator<InputImageType> InputImageConstIterator;
00058   typedef ImageRegionIterator<InputImageType>      InputImageIterator;
00059   typedef ImageRegionConstIteratorWithIndex<InputImageType>  InputImageConstIterator;
00060   typedef ImageRegionIterator<OutputImageType>     OutputImageIterator;
00061 
00063   itkStaticConstMacro(ImageDimension, unsigned int,
00064                       TInputImage::ImageDimension);
00065 
00066   typedef itk::Image<double, itkGetStaticConstMacro(ImageDimension)>  InternalImageType;
00067   typedef typename InternalImageType::Pointer InternalImagePointer;
00068   typedef ImageRegionIterator<InternalImageType> InternalImageIterator;
00069 
00070   typedef LaplacianImageFilter<InternalImageType, InternalImageType> LaplacianFilterType;
00071   typedef typename LaplacianFilterType::Pointer LaplacianFilterPointer;
00072 
00075   itkSetMacro(LaplacianFilter, LaplacianFilterPointer);
00076 
00077   itkSetMacro(TimeStep, double);
00078   itkGetMacro(TimeStep, double);
00079 
00080   itkSetMacro(NoiseLevel, double);
00081   itkGetMacro(NoiseLevel, double);
00082 
00083   itkSetMacro(IterationNum, int);
00084   itkGetMacro(IterationNum, int);
00085 
00086 protected:
00087   GradientVectorFlowImageFilter();
00088   ~GradientVectorFlowImageFilter() {}
00089   GradientVectorFlowImageFilter(const Self&) {}
00090   void operator=(const Self&) {}
00091   void PrintSelf(std::ostream& os, Indent indent) const; 
00092 
00093   virtual void GenerateData();
00094 
00095   void InitInterImage();
00096   void UpdateInterImage();
00097   void UpdatePixels();
00098 
00099 private:
00100   // parameters;
00101   double m_TimeStep; //the timestep of each iteration
00102   double m_Steps[Superclass::InputImageDimension]; // set to be 1 in all directions in most cases
00103   double m_NoiseLevel; // the noise level of the image
00104   int m_IterationNum;  // the iteration number
00105 
00106   LaplacianFilterPointer m_LaplacianFilter;
00107   typename Superclass::InputImagePointer m_IntermediateImage;
00108   InternalImagePointer m_InternalImages[Superclass::InputImageDimension];
00109   InternalImagePointer m_BImage;  // store the "b" value for every pixel
00110   typename Superclass::InputImagePointer m_CImage; // store the $c_i$ value for every pixel
00111 };
00112 
00113 } // end namespace itk
00114 
00115 #ifndef ITK_MANUAL_INSTANTIATION
00116 #include "itkGradientVectorFlowImageFilter.txx"
00117 #endif
00118 
00119 #endif

Generated at Wed Mar 12 01:12:58 2003 for ITK by doxygen 1.2.15 written by Dimitri van Heesch, © 1997-2000