VTK  9.0.1
vtkImageHistogram.h
Go to the documentation of this file.
1 /*=========================================================================
2 
3  Program: Visualization Toolkit
4  Module: vtkImageHistogram.h
5 
6  Copyright (c) Ken Martin, Will Schroeder, Bill Lorensen
7  All rights reserved.
8  See Copyright.txt or http://www.kitware.com/Copyright.htm for details.
9 
10  This software is distributed WITHOUT ANY WARRANTY; without even
11  the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
12  PURPOSE. See the above copyright notice for more information.
13 
14 =========================================================================*/
31 #ifndef vtkImageHistogram_h
32 #define vtkImageHistogram_h
33 
34 #include "vtkImagingStatisticsModule.h" // For export macro
36 
38 class vtkIdTypeArray;
39 class vtkImageHistogramThreadData;
40 class vtkImageHistogramSMPThreadLocal;
41 
42 class VTKIMAGINGSTATISTICS_EXPORT vtkImageHistogram : public vtkThreadedImageAlgorithm
43 {
44 public:
45  static vtkImageHistogram* New();
47 
48  void PrintSelf(ostream& os, vtkIndent indent) override;
49 
53  enum
54  {
55  Linear = 0,
56  Log = 1,
57  Sqrt = 2
58  };
59 
61 
66  vtkSetMacro(ActiveComponent, int);
67  vtkGetMacro(ActiveComponent, int);
69 
71 
82  vtkSetMacro(AutomaticBinning, vtkTypeBool);
83  vtkBooleanMacro(AutomaticBinning, vtkTypeBool);
84  vtkGetMacro(AutomaticBinning, vtkTypeBool);
86 
88 
96  vtkSetMacro(MaximumNumberOfBins, int);
97  vtkGetMacro(MaximumNumberOfBins, int);
99 
101 
105  vtkSetMacro(NumberOfBins, int);
106  vtkGetMacro(NumberOfBins, int);
108 
110 
114  vtkSetMacro(BinOrigin, double);
115  vtkGetMacro(BinOrigin, double);
117 
119 
123  vtkSetMacro(BinSpacing, double);
124  vtkGetMacro(BinSpacing, double);
126 
128 
131  void SetStencilData(vtkImageStencilData* stencil);
132  vtkImageStencilData* GetStencil();
134 
138  void SetStencilConnection(vtkAlgorithmOutput* algOutput);
139 
141 
146  vtkSetMacro(GenerateHistogramImage, vtkTypeBool);
147  vtkBooleanMacro(GenerateHistogramImage, vtkTypeBool);
148  vtkGetMacro(GenerateHistogramImage, vtkTypeBool);
150 
152 
156  vtkSetVector2Macro(HistogramImageSize, int);
157  vtkGetVector2Macro(HistogramImageSize, int);
159 
161 
165  vtkSetClampMacro(HistogramImageScale, int, vtkImageHistogram::Linear, vtkImageHistogram::Sqrt);
166  void SetHistogramImageScaleToLinear() { this->SetHistogramImageScale(vtkImageHistogram::Linear); }
167  void SetHistogramImageScaleToLog() { this->SetHistogramImageScale(vtkImageHistogram::Log); }
168  void SetHistogramImageScaleToSqrt() { this->SetHistogramImageScale(vtkImageHistogram::Sqrt); }
169  vtkGetMacro(HistogramImageScale, int);
170  const char* GetHistogramImageScaleAsString();
172 
177  vtkIdTypeArray* GetHistogram();
178 
183  vtkIdType GetTotal() { return this->Total; }
184 
189  void ThreadedRequestData(vtkInformation* request, vtkInformationVector** inputVector,
190  vtkInformationVector* outputVector, vtkImageData*** inData, vtkImageData** outData, int ext[6],
191  int id) override;
192 
193 protected:
195  ~vtkImageHistogram() override;
196 
197  int RequestUpdateExtent(vtkInformation* vtkNotUsed(request), vtkInformationVector** inInfo,
198  vtkInformationVector* vtkNotUsed(outInfo)) override;
199  int RequestInformation(vtkInformation* vtkNotUsed(request), vtkInformationVector** inInfo,
200  vtkInformationVector* vtkNotUsed(outInfo)) override;
202 
203  int FillInputPortInformation(int port, vtkInformation* info) override;
205 
211  void ComputeImageScalarRange(vtkImageData* data, double range[2]);
212 
216 
217  int HistogramImageSize[2];
220 
222  double BinOrigin;
223  double BinSpacing;
224 
227 
228  // Used for vtkMultiThreader operation.
229  vtkImageHistogramThreadData* ThreadData;
230 
231  // Used for vtkSMPTools operation.
232  vtkImageHistogramSMPThreadLocal* SMPThreadData;
233 
234 private:
235  vtkImageHistogram(const vtkImageHistogram&) = delete;
236  void operator=(const vtkImageHistogram&) = delete;
237 
238  friend class vtkImageHistogramFunctor;
239 };
240 
241 #endif
Store vtkAlgorithm input/output information.
int RequestData(vtkInformation *request, vtkInformationVector **inputVector, vtkInformationVector *outputVector) override
This is called by the superclass.
dynamic, self-adjusting array of vtkIdType
int vtkIdType
Definition: vtkType.h:338
vtkIdType GetTotal()
Get the total count of the histogram.
vtkTypeBool GenerateHistogramImage
virtual int RequestUpdateExtent(vtkInformation *, vtkInformationVector **, vtkInformationVector *)
Subclasses can reimplement this method to translate the update extent requests from each output port ...
Proxy object to connect input/output ports.
int vtkTypeBool
Definition: vtkABI.h:69
Generic filter that has one input.
vtkTypeBool AutomaticBinning
void SetHistogramImageScaleToLog()
Set the scale to use for the histogram image.
vtkImageHistogramSMPThreadLocal * SMPThreadData
void SetHistogramImageScaleToSqrt()
Set the scale to use for the histogram image.
a simple class to control print indentation
Definition: vtkIndent.h:33
efficient description of an image stencil
topologically and geometrically regular array of data
Definition: vtkImageData.h:41
virtual int RequestInformation(vtkInformation *request, vtkInformationVector **inputVector, vtkInformationVector *outputVector)
Subclasses can reimplement this method to collect information from their inputs and set information f...
virtual void ThreadedRequestData(vtkInformation *request, vtkInformationVector **inputVector, vtkInformationVector *outputVector, vtkImageData ***inData, vtkImageData **outData, int extent[6], int threadId)
If the subclass does not define an Execute method, then the task will be broken up, multiple threads will be spawned, and each thread will call this method.
int FillInputPortInformation(int port, vtkInformation *info) override
These method should be reimplemented by subclasses that have more than a single input or single outpu...
int FillOutputPortInformation(int port, vtkInformation *info) override
These method should be reimplemented by subclasses that have more than a single input or single outpu...
Store zero or more vtkInformation instances.
static vtkAlgorithm * New()
void PrintSelf(ostream &os, vtkIndent indent) override
Methods invoked by print to print information about the object including superclasses.
vtkIdTypeArray * Histogram
void SetHistogramImageScaleToLinear()
Set the scale to use for the histogram image.
vtkImageHistogramThreadData * ThreadData
Compute the histogram for an image.