/*========================================================================= Program: Visualization Toolkit Module: $RCSfile: vtkImageNonMaximumSuppression.h,v $ 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. =========================================================================*/ // .NAME vtkImageNonMaximumSuppression - Performs non-maximum suppression // .SECTION Description // vtkImageNonMaximumSuppression Sets to zero any pixel that is not a peak. // If a pixel has a neighbor along the vector that has larger magnitude, the // smaller pixel is set to zero. The filter takes two inputs: a magnitude // and a vector. Output is magnitude information and is always in doubles. // Typically this filter is used with vtkImageGradient and // vtkImageGradientMagnitude as inputs. #ifndef __vtkImageNonMaximumSuppression_h #define __vtkImageNonMaximumSuppression_h #define VTK_IMAGE_NON_MAXIMUM_SUPPRESSION_MAGNITUDE_INPUT 0 #define VTK_IMAGE_NON_MAXIMUM_SUPPRESSION_VECTOR_INPUT 1 #include "vtkThreadedImageAlgorithm.h" #include "vtkImageData.h" // makes things a bit easier class VTK_IMAGING_EXPORT vtkImageNonMaximumSuppression : public vtkThreadedImageAlgorithm { public: static vtkImageNonMaximumSuppression *New(); vtkTypeRevisionMacro(vtkImageNonMaximumSuppression,vtkThreadedImageAlgorithm); void PrintSelf(ostream& os, vtkIndent indent); // Description: // Set the magnitude and vector inputs. void SetMagnitudeInput(vtkImageData *input) {this->SetInput(0,input);}; void SetVectorInput(vtkImageData *input) {this->SetInput(1,input);}; // Description: // If "HandleBoundariesOn" then boundary pixels are duplicated // So central differences can get values. vtkSetMacro(HandleBoundaries, int); vtkGetMacro(HandleBoundaries, int); vtkBooleanMacro(HandleBoundaries, int); // Description: // Determines how the input is interpreted (set of 2d slices or a 3D volume) vtkSetClampMacro(Dimensionality,int,2,3); vtkGetMacro(Dimensionality,int); protected: vtkImageNonMaximumSuppression(); ~vtkImageNonMaximumSuppression() {}; int HandleBoundaries; int Dimensionality; virtual int RequestInformation (vtkInformation *, vtkInformationVector **, vtkInformationVector *); virtual int RequestUpdateExtent(vtkInformation*, vtkInformationVector**, vtkInformationVector*); virtual void ThreadedRequestData(vtkInformation *request, vtkInformationVector **inputVector, vtkInformationVector *outputVector, vtkImageData ***inData, vtkImageData **outData, int extent[6], int threadId); private: vtkImageNonMaximumSuppression(const vtkImageNonMaximumSuppression&); // Not implemented. void operator=(const vtkImageNonMaximumSuppression&); // Not implemented. }; #endif