00001 /*========================================================================= 00002 00003 Program: Visualization Toolkit 00004 Module: $RCSfile: vtkImageSeparableConvolution.h,v $ 00005 Language: C++ 00006 00007 Copyright (c) 1993-2002 Ken Martin, Will Schroeder, Bill Lorensen 00008 All rights reserved. 00009 See Copyright.txt or http://www.kitware.com/Copyright.htm for details. 00010 00011 This software is distributed WITHOUT ANY WARRANTY; without even 00012 the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR 00013 PURPOSE. See the above copyright notice for more information. 00014 00015 =========================================================================*/ 00045 #ifndef __vtkImageSeparableConvolution_h 00046 #define __vtkImageSeparableConvolution_h 00047 00048 00049 #include "vtkImageDecomposeFilter.h" 00050 00051 class vtkFloatArray; 00052 00053 class VTK_IMAGING_EXPORT vtkImageSeparableConvolution : public vtkImageDecomposeFilter 00054 { 00055 public: 00056 static vtkImageSeparableConvolution *New(); 00057 vtkTypeRevisionMacro(vtkImageSeparableConvolution,vtkImageDecomposeFilter); 00058 00059 00060 // Set the X convolution kernel, a null value indicates no convolution to be done. 00061 // The kernel must be of odd length 00062 virtual void SetXKernel(vtkFloatArray*); 00063 vtkGetObjectMacro ( XKernel, vtkFloatArray ); 00064 00065 // Set the Y convolution kernel, a null value indicates no convolution to be done 00066 // The kernel must be of odd length 00067 virtual void SetYKernel(vtkFloatArray*); 00068 vtkGetObjectMacro ( YKernel, vtkFloatArray ); 00069 00070 // Set the Z convolution kernel, a null value indicates no convolution to be done 00071 // The kernel must be of odd length 00072 virtual void SetZKernel(vtkFloatArray*); 00073 vtkGetObjectMacro ( ZKernel, vtkFloatArray ); 00074 00075 void PrintSelf(ostream& os, vtkIndent indent); 00076 00079 unsigned long int GetMTime(); 00080 00081 protected: 00082 vtkImageSeparableConvolution(); 00083 ~vtkImageSeparableConvolution(); 00084 00085 vtkFloatArray* XKernel; 00086 vtkFloatArray* YKernel; 00087 vtkFloatArray* ZKernel; 00088 00089 // void AllocateOutputScalars(vtkImageData *outData); 00090 void ComputeInputUpdateExtent(int inExt[6], int outExt[6]); 00091 void IterativeExecuteData(vtkImageData *inData, vtkImageData *outData); 00092 void ExecuteInformation(vtkImageData *input, vtkImageData *output); 00093 void ExecuteInformation() 00094 {this->vtkImageIterateFilter::ExecuteInformation();} 00095 00096 00097 //void AllocateOutputScalars(vtkImageData *outData); 00098 00099 00100 private: 00101 vtkImageSeparableConvolution(const vtkImageSeparableConvolution&); // Not implemented. 00102 void operator=(const vtkImageSeparableConvolution&); // Not implemented. 00103 }; 00104 00105 #endif 00106 00107 00108 00109 00110 00111 00112 00113 00114 00115