VTK
dox/Imaging/Statistics/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 "vtkImagingStatisticsModule.h" // For export macro
00037 #include "vtkThreadedImageAlgorithm.h"
00038 
00039 class vtkImageStencilData;
00040 class vtkIdTypeArray;
00041 
00042 class VTKIMAGINGSTATISTICS_EXPORT vtkImageHistogram : public vtkThreadedImageAlgorithm
00043 {
00044 public:
00045   static vtkImageHistogram *New();
00046   vtkTypeMacro(vtkImageHistogram,vtkThreadedImageAlgorithm);
00047 
00048   void PrintSelf(ostream& os, vtkIndent indent);
00049 
00051 
00052   enum {
00053     Linear = 0,
00054     Log = 1,
00055     Sqrt = 2
00056     };
00058 
00060 
00063   vtkSetMacro(ActiveComponent, int);
00064   vtkGetMacro(ActiveComponent, int);
00066 
00068 
00077   vtkSetMacro(AutomaticBinning, int);
00078   vtkBooleanMacro(AutomaticBinning, int);
00079   vtkGetMacro(AutomaticBinning, int);
00081 
00083 
00088   vtkSetMacro(MaximumNumberOfBins, int);
00089   vtkGetMacro(MaximumNumberOfBins, int);
00091 
00093 
00095   vtkSetMacro(NumberOfBins, int);
00096   vtkGetMacro(NumberOfBins, int);
00098 
00100 
00102   vtkSetMacro(BinOrigin, double);
00103   vtkGetMacro(BinOrigin, double);
00105 
00107 
00109   vtkSetMacro(BinSpacing, double);
00110   vtkGetMacro(BinSpacing, double);
00112 
00114 
00115   void SetStencilData(vtkImageStencilData *stencil);
00116   vtkImageStencilData *GetStencil();
00118 
00120   void SetStencilConnection(vtkAlgorithmOutput* algOutput);
00121 
00123 
00126   vtkSetMacro(GenerateHistogramImage, int);
00127   vtkBooleanMacro(GenerateHistogramImage, int);
00128   vtkGetMacro(GenerateHistogramImage, int);
00130 
00132 
00134   vtkSetVector2Macro(HistogramImageSize, int);
00135   vtkGetVector2Macro(HistogramImageSize, int);
00137 
00139 
00141   vtkSetClampMacro(HistogramImageScale, int,
00142     vtkImageHistogram::Linear, vtkImageHistogram::Sqrt);
00143   void SetHistogramImageScaleToLinear() {
00144     this->SetHistogramImageScale(vtkImageHistogram::Linear); }
00145   void SetHistogramImageScaleToLog() {
00146     this->SetHistogramImageScale(vtkImageHistogram::Log); }
00147   void SetHistogramImageScaleToSqrt() {
00148     this->SetHistogramImageScale(vtkImageHistogram::Sqrt); }
00149   vtkGetMacro(HistogramImageScale, int);
00150   const char *GetHistogramImageScaleAsString();
00152 
00155   vtkIdTypeArray *GetHistogram();
00156 
00159   vtkIdType GetTotal() { return this->Total; }
00160 
00162 
00164   virtual void ThreadedRequestData(vtkInformation *request,
00165                                    vtkInformationVector **inputVector,
00166                                    vtkInformationVector *outputVector,
00167                                    vtkImageData ***inData,
00168                                    vtkImageData **outData, int ext[6], int id);
00169 protected:
00170   vtkImageHistogram();
00171   ~vtkImageHistogram();
00173 
00174   virtual int RequestUpdateExtent(vtkInformation *vtkNotUsed(request),
00175                                  vtkInformationVector **inInfo,
00176                                  vtkInformationVector *vtkNotUsed(outInfo));
00177   virtual int RequestInformation(vtkInformation *vtkNotUsed(request),
00178                                  vtkInformationVector **inInfo,
00179                                  vtkInformationVector *vtkNotUsed(outInfo));
00180   virtual int RequestData(vtkInformation *,
00181                           vtkInformationVector **,
00182                           vtkInformationVector *);
00183 
00184   virtual int FillInputPortInformation(int port, vtkInformation *info);
00185   virtual int FillOutputPortInformation(int port, vtkInformation *info);
00186 
00190   void ComputeImageScalarRange(vtkImageData *data, double range[2]);
00191 
00192   int ActiveComponent;
00193   int AutomaticBinning;
00194   int MaximumNumberOfBins;
00195 
00196   int HistogramImageSize[2];
00197   int HistogramImageScale;
00198   int GenerateHistogramImage;
00199 
00200   int NumberOfBins;
00201   double BinOrigin;
00202   double BinSpacing;
00203 
00204   vtkIdTypeArray *Histogram;
00205   vtkIdType Total;
00206 
00207   vtkIdType *ThreadOutput[VTK_MAX_THREADS];
00208   int ThreadBinRange[VTK_MAX_THREADS][2];
00209 
00210 private:
00211   vtkImageHistogram(const vtkImageHistogram&);  // Not implemented.
00212   void operator=(const vtkImageHistogram&);  // Not implemented.
00213 };
00214 
00215 #endif