/*========================================================================= Program: Visualization Toolkit Module: vtkImageGaussianSmooth.h Copyright (c) Ken Martin, Will Schroeder, Bill Lorensen All rights reserved. See Copyright.txt or http://www.kitware.com/Copyright.htm for details. This software is distributed WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the above copyright notice for more information. =========================================================================*/ /** * @class vtkImageGaussianSmooth * @brief Performs a gaussian convolution. * * vtkImageGaussianSmooth implements a convolution of the input image * with a gaussian. Supports from one to three dimensional convolutions. */ #ifndef vtkImageGaussianSmooth_h #define vtkImageGaussianSmooth_h #include "vtkImagingGeneralModule.h" // For export macro #include "vtkThreadedImageAlgorithm.h" class VTKIMAGINGGENERAL_EXPORT vtkImageGaussianSmooth : public vtkThreadedImageAlgorithm { public: vtkTypeMacro(vtkImageGaussianSmooth,vtkThreadedImageAlgorithm); void PrintSelf(ostream& os, vtkIndent indent) override; /** * Creates an instance of vtkImageGaussianSmooth with the following * defaults: Dimensionality 3, StandardDeviations( 2, 2, 2), * Radius Factors ( 1.5, 1.5, 1.5) */ static vtkImageGaussianSmooth *New(); //@{ /** * Sets/Gets the Standard deviation of the gaussian in pixel units. */ vtkSetVector3Macro(StandardDeviations, double); void SetStandardDeviation(double std) {this->SetStandardDeviations(std,std,std);} void SetStandardDeviations(double a,double b) {this->SetStandardDeviations(a,b,0.0);} vtkGetVector3Macro(StandardDeviations, double); //@} /** * Sets/Gets the Standard deviation of the gaussian in pixel units. * These methods are provided for compatibility with old scripts */ void SetStandardDeviation(double a,double b) {this->SetStandardDeviations(a,b,0.0);} void SetStandardDeviation(double a,double b,double c) {this->SetStandardDeviations(a,b,c);} //@{ /** * Sets/Gets the Radius Factors of the gaussian (no unit). * The radius factors determine how far out the gaussian kernel will * go before being clamped to zero. */ vtkSetVector3Macro(RadiusFactors, double); void SetRadiusFactors(double f, double f2) { this->SetRadiusFactors(f,f2,1.5);} void SetRadiusFactor(double f) {this->SetRadiusFactors(f, f, f);} vtkGetVector3Macro(RadiusFactors, double); //@} //@{ /** * Set/Get the dimensionality of this filter. This determines whether * a one, two, or three dimensional gaussian is performed. */ vtkSetMacro(Dimensionality, int); vtkGetMacro(Dimensionality, int); //@} protected: vtkImageGaussianSmooth(); ~vtkImageGaussianSmooth() override; int Dimensionality; double StandardDeviations[3]; double RadiusFactors[3]; void ComputeKernel(double *kernel, int min, int max, double std); int RequestUpdateExtent (vtkInformation *, vtkInformationVector **, vtkInformationVector *) override; void InternalRequestUpdateExtent(int *, int*); void ExecuteAxis(int axis, vtkImageData *inData, int inExt[6], vtkImageData *outData, int outExt[6], int *pcycle, int target, int *pcount, int total, vtkInformation *inInfo); void ThreadedRequestData(vtkInformation *request, vtkInformationVector **inputVector, vtkInformationVector *outputVector, vtkImageData ***inData, vtkImageData **outData, int outExt[6], int id) override; private: vtkImageGaussianSmooth(const vtkImageGaussianSmooth&) = delete; void operator=(const vtkImageGaussianSmooth&) = delete; }; #endif