00001 
00002 
00003 
00004 
00005 
00006 
00007 
00008 
00009 
00010 
00011 
00012 
00013 
00014 
00015 
00016 
00017 
00018 
00019 
00020 
00021 
00022 
00023 
00024 
00025 
00026 
00027 
00028 
00029 
00030 
00031 
00032 
00033 
00034 
00035 
00036 
00037 
00038 
00071 #ifndef __vtkImageAnisotropicDiffusion3D_h
00072 #define __vtkImageAnisotropicDiffusion3D_h
00073 
00074 
00075 #include "vtkImageSpatialFilter.h"
00076 
00077 class VTK_EXPORT vtkImageAnisotropicDiffusion3D : public vtkImageSpatialFilter
00078 {
00079 public:
00080   static vtkImageAnisotropicDiffusion3D *New();
00081   vtkTypeMacro(vtkImageAnisotropicDiffusion3D,vtkImageSpatialFilter);
00082   void PrintSelf(ostream& os, vtkIndent indent);
00083   
00084   
00087   void SetNumberOfIterations(int num);
00088   
00090   vtkGetMacro(NumberOfIterations,int);
00091 
00093   vtkSetMacro(DiffusionThreshold,float);
00094   vtkGetMacro(DiffusionThreshold,float);
00095   
00097   vtkSetMacro(DiffusionFactor,float);
00098   vtkGetMacro(DiffusionFactor,float);
00099 
00101   vtkSetMacro(Faces,int);
00102   vtkGetMacro(Faces,int);
00103   vtkBooleanMacro(Faces,int);
00104   vtkSetMacro(Edges,int);
00105   vtkGetMacro(Edges,int);
00106   vtkBooleanMacro(Edges,int);
00107   vtkSetMacro(Corners,int);
00108   vtkGetMacro(Corners,int);
00109   vtkBooleanMacro(Corners,int);
00110 
00113   vtkSetMacro(GradientMagnitudeThreshold,int);
00114   vtkGetMacro(GradientMagnitudeThreshold,int);
00115   vtkBooleanMacro(GradientMagnitudeThreshold,int);
00116   
00117 protected:
00118   vtkImageAnisotropicDiffusion3D();
00119   ~vtkImageAnisotropicDiffusion3D() {};
00120   vtkImageAnisotropicDiffusion3D(const vtkImageAnisotropicDiffusion3D&) {};
00121   void operator=(const vtkImageAnisotropicDiffusion3D&) {};
00122 
00123   int NumberOfIterations;
00124   float DiffusionThreshold;
00125   float DiffusionFactor;  
00126   
00127   int Faces;
00128   int Edges;
00129   int Corners;
00130   
00131   int GradientMagnitudeThreshold;
00132   
00133   void ThreadedExecute(vtkImageData *inData, vtkImageData *outData, 
00134              int extent[6], int id);
00135   void Iterate(vtkImageData *in, vtkImageData *out, 
00136           float ar0, float ar1, float ar3, int *coreExtent, int count);
00137 };
00138 
00139 #endif
00140 
00141 
00142