You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
114 lines
3.0 KiB
C++
114 lines
3.0 KiB
C++
/*=========================================================================
|
|
|
|
Program: Visualization Toolkit
|
|
Module: vtkImageConvolve.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 vtkImageConvolve
|
|
* @brief Convolution of an image with a kernel.
|
|
*
|
|
* vtkImageConvolve convolves the image with a 3D NxNxN kernel or a
|
|
* 2D NxN kernel. The output image is cropped to the same size as
|
|
* the input.
|
|
*/
|
|
|
|
#ifndef vtkImageConvolve_h
|
|
#define vtkImageConvolve_h
|
|
|
|
#include "vtkImagingGeneralModule.h" // For export macro
|
|
#include "vtkThreadedImageAlgorithm.h"
|
|
|
|
class VTKIMAGINGGENERAL_EXPORT vtkImageConvolve : public vtkThreadedImageAlgorithm
|
|
{
|
|
public:
|
|
//@{
|
|
/**
|
|
* Construct an instance of vtkImageConvolve filter.
|
|
*/
|
|
static vtkImageConvolve* New();
|
|
vtkTypeMacro(vtkImageConvolve, vtkThreadedImageAlgorithm);
|
|
void PrintSelf(ostream& os, vtkIndent indent) override;
|
|
//@}
|
|
|
|
//@{
|
|
/**
|
|
* Get the kernel size
|
|
*/
|
|
vtkGetVector3Macro(KernelSize, int);
|
|
//@}
|
|
|
|
//@{
|
|
/**
|
|
* Set the kernel to be a given 3x3 or 5x5 or 7x7 kernel.
|
|
*/
|
|
void SetKernel3x3(const double kernel[9]);
|
|
void SetKernel5x5(const double kernel[25]);
|
|
//@}
|
|
|
|
void SetKernel7x7(const double kernel[49]);
|
|
|
|
//@{
|
|
/**
|
|
* Return an array that contains the kernel.
|
|
*/
|
|
double* GetKernel3x3() VTK_SIZEHINT(9);
|
|
void GetKernel3x3(double kernel[9]);
|
|
double* GetKernel5x5() VTK_SIZEHINT(25);
|
|
void GetKernel5x5(double kernel[25]);
|
|
//@}
|
|
|
|
double* GetKernel7x7() VTK_SIZEHINT(49);
|
|
void GetKernel7x7(double kernel[49]);
|
|
|
|
/**
|
|
* Set the kernel to be a 3x3x3 or 5x5x5 or 7x7x7 kernel.
|
|
*/
|
|
void SetKernel3x3x3(const double kernel[27]);
|
|
|
|
void SetKernel5x5x5(const double kernel[125]);
|
|
void SetKernel7x7x7(const double kernel[343]);
|
|
|
|
//@{
|
|
/**
|
|
* Return an array that contains the kernel
|
|
*/
|
|
double* GetKernel3x3x3() VTK_SIZEHINT(27);
|
|
void GetKernel3x3x3(double kernel[27]);
|
|
//@}
|
|
|
|
double* GetKernel5x5x5() VTK_SIZEHINT(125);
|
|
void GetKernel5x5x5(double kernel[125]);
|
|
double* GetKernel7x7x7() VTK_SIZEHINT(343);
|
|
void GetKernel7x7x7(double kernel[343]);
|
|
|
|
protected:
|
|
vtkImageConvolve();
|
|
~vtkImageConvolve() override;
|
|
|
|
void ThreadedRequestData(vtkInformation* request, vtkInformationVector** inputVector,
|
|
vtkInformationVector* outputVector, vtkImageData*** inData, vtkImageData** outData,
|
|
int outExt[6], int id) override;
|
|
|
|
void GetKernel(double* kernel);
|
|
double* GetKernel();
|
|
void SetKernel(const double* kernel, int sizeX, int sizeY, int sizeZ);
|
|
|
|
int KernelSize[3];
|
|
double Kernel[343];
|
|
|
|
private:
|
|
vtkImageConvolve(const vtkImageConvolve&) = delete;
|
|
void operator=(const vtkImageConvolve&) = delete;
|
|
};
|
|
|
|
#endif
|