VTK
|
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