// SPDX-FileCopyrightText: Copyright (c) Ken Martin, Will Schroeder, Bill Lorensen // SPDX-License-Identifier: BSD-3-Clause /** * @class vtkImageDilateErode3D * @brief Dilates one value and erodes another. * * vtkImageDilateErode3D will dilate one value and erode another. * It uses an elliptical foot print, and only erodes/dilates on the * boundary of the two values. The filter is restricted to the * X, Y, and Z axes for now. It can degenerate to a 2 or 1 dimensional * filter by setting the kernel size to 1 for a specific axis. */ #ifndef vtkImageDilateErode3D_h #define vtkImageDilateErode3D_h #include "vtkImageSpatialAlgorithm.h" #include "vtkImagingMorphologicalModule.h" // For export macro VTK_ABI_NAMESPACE_BEGIN class vtkImageEllipsoidSource; class VTKIMAGINGMORPHOLOGICAL_EXPORT vtkImageDilateErode3D : public vtkImageSpatialAlgorithm { public: ///@{ /** * Construct an instance of vtkImageDilateErode3D filter. * By default zero values are dilated. */ static vtkImageDilateErode3D* New(); vtkTypeMacro(vtkImageDilateErode3D, vtkImageSpatialAlgorithm); void PrintSelf(ostream& os, vtkIndent indent) override; ///@} /** * This method sets the size of the neighborhood. It also sets the * default middle of the neighborhood and computes the elliptical foot print. */ void SetKernelSize(int size0, int size1, int size2); ///@{ /** * Set/Get the Dilate and Erode values to be used by this filter. */ vtkSetMacro(DilateValue, double); vtkGetMacro(DilateValue, double); vtkSetMacro(ErodeValue, double); vtkGetMacro(ErodeValue, double); ///@} protected: vtkImageDilateErode3D(); ~vtkImageDilateErode3D() override; vtkImageEllipsoidSource* Ellipse; double DilateValue; double ErodeValue; void ThreadedRequestData(vtkInformation* request, vtkInformationVector** inputVector, vtkInformationVector* outputVector, vtkImageData*** inData, vtkImageData** outData, int outExt[6], int id) override; int RequestData(vtkInformation* request, vtkInformationVector** inputVector, vtkInformationVector* outputVector) override; private: vtkImageDilateErode3D(const vtkImageDilateErode3D&) = delete; void operator=(const vtkImageDilateErode3D&) = delete; }; VTK_ABI_NAMESPACE_END #endif