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