VTK
dox/Imaging/vtkImageHistogram.h
Go to the documentation of this file.
00001 /*=========================================================================
00002 
00003   Program:   Visualization Toolkit
00004   Module:    vtkImageHistogram.h
00005 
00006   Copyright (c) Ken Martin, Will Schroeder, Bill Lorensen
00007   All rights reserved.
00008   See Copyright.txt or http://www.kitware.com/Copyright.htm for details.
00009 
00010      This software is distributed WITHOUT ANY WARRANTY; without even
00011      the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
00012      PURPOSE.  See the above copyright notice for more information.
00013 
00014 =========================================================================*/
00033 #ifndef __vtkImageHistogram_h
00034 #define __vtkImageHistogram_h
00035 
00036 #include "vtkThreadedImageAlgorithm.h"
00037 
00038 class vtkImageStencilData;
00039 class vtkIdTypeArray;
00040 
00041 class VTK_IMAGING_EXPORT vtkImageHistogram : public vtkThreadedImageAlgorithm
00042 {
00043 public:
00044   static vtkImageHistogram *New();
00045   vtkTypeMacro(vtkImageHistogram,vtkThreadedImageAlgorithm);
00046 
00047   void PrintSelf(ostream& os, vtkIndent indent);
00048 
00050 
00051   enum {
00052     Linear = 0,
00053     Log = 1,
00054     Sqrt = 2,
00055     };
00057 
00059 
00062   vtkSetMacro(ActiveComponent, int);
00063   vtkGetMacro(ActiveComponent, int);
00065 
00067 
00076   vtkSetMacro(AutomaticBinning, int);
00077   vtkBooleanMacro(AutomaticBinning, int);
00078   vtkGetMacro(AutomaticBinning, int);
00080 
00082 
00087   vtkSetMacro(MaximumNumberOfBins, int);
00088   vtkGetMacro(MaximumNumberOfBins, int);
00090 
00092 
00094   vtkSetMacro(NumberOfBins, int);
00095   vtkGetMacro(NumberOfBins, int);
00097 
00099 
00101   vtkSetMacro(BinOrigin, double);
00102   vtkGetMacro(BinOrigin, double);
00104 
00106 
00108   vtkSetMacro(BinSpacing, double);
00109   vtkGetMacro(BinSpacing, double);
00111 
00113 
00114   void SetStencil(vtkImageStencilData *stencil);
00115   vtkImageStencilData *GetStencil();
00117 
00119 
00122   vtkSetMacro(GenerateHistogramImage, int);
00123   vtkBooleanMacro(GenerateHistogramImage, int);
00124   vtkGetMacro(GenerateHistogramImage, int);
00126 
00128 
00130   vtkSetVector2Macro(HistogramImageSize, int);
00131   vtkGetVector2Macro(HistogramImageSize, int);
00133 
00135 
00137   vtkSetClampMacro(HistogramImageScale, int,
00138     vtkImageHistogram::Linear, vtkImageHistogram::Sqrt);
00139   void SetHistogramImageScaleToLinear() {
00140     this->SetHistogramImageScale(vtkImageHistogram::Linear); }
00141   void SetHistogramImageScaleToLog() {
00142     this->SetHistogramImageScale(vtkImageHistogram::Log); }
00143   void SetHistogramImageScaleToSqrt() {
00144     this->SetHistogramImageScale(vtkImageHistogram::Sqrt); }
00145   vtkGetMacro(HistogramImageScale, int);
00146   const char *GetHistogramImageScaleAsString();
00148 
00151   vtkIdTypeArray *GetHistogram();
00152 
00155   vtkIdType GetTotal() { return this->Total; }
00156 
00158 
00160   virtual void ThreadedRequestData(vtkInformation *request,
00161                                    vtkInformationVector **inputVector,
00162                                    vtkInformationVector *outputVector,
00163                                    vtkImageData ***inData,
00164                                    vtkImageData **outData, int ext[6], int id);
00165 protected:
00166   vtkImageHistogram();
00167   ~vtkImageHistogram();
00169 
00170   virtual int RequestUpdateExtent(vtkInformation *vtkNotUsed(request),
00171                                  vtkInformationVector **inInfo,
00172                                  vtkInformationVector *vtkNotUsed(outInfo));
00173   virtual int RequestInformation(vtkInformation *vtkNotUsed(request),
00174                                  vtkInformationVector **inInfo,
00175                                  vtkInformationVector *vtkNotUsed(outInfo));
00176   virtual int RequestData(vtkInformation *,
00177                           vtkInformationVector **,
00178                           vtkInformationVector *);
00179 
00180   virtual int FillInputPortInformation(int port, vtkInformation *info);
00181   virtual int FillOutputPortInformation(int port, vtkInformation *info);
00182 
00186   void ComputeImageScalarRange(vtkImageData *data, double range[2]);
00187 
00188   int ActiveComponent;
00189   int AutomaticBinning;
00190   int MaximumNumberOfBins;
00191 
00192   int HistogramImageSize[2];
00193   int HistogramImageScale;
00194   int GenerateHistogramImage;
00195 
00196   int NumberOfBins;
00197   double BinOrigin;
00198   double BinSpacing;
00199 
00200   vtkIdTypeArray *Histogram;
00201   vtkIdType Total;
00202 
00203   vtkIdType *ThreadOutput[VTK_MAX_THREADS];
00204   int ThreadBinRange[VTK_MAX_THREADS][2];
00205 
00206 private:
00207   vtkImageHistogram(const vtkImageHistogram&);  // Not implemented.
00208   void operator=(const vtkImageHistogram&);  // Not implemented.
00209 };
00210 
00211 #endif