00001
00033 #ifndef INC_RVC_HISTOGRM_H
00034 #define INC_RVC_HISTOGRM_H
00035
00036 #ifndef INC_RVC_RASTER_H
00037 #include <rvc/raster.h>
00038 #endif
00039
00040 #ifndef INC_MI32_RANGE_H
00041 #include <mi32/range.h>
00042 #endif
00043
00044
00045 #ifndef GENERATING_DOXYGEN_OUTPUT
00046
00047 class REGION2D;
00048 class STAT_UNIVARIATE;
00049 namespace RVC {
00050 class CREDENTIALS;
00051 class FILEHANDLE;
00052 struct HISTINFO;
00053 }
00054 #endif
00055
00056
00057 namespace RVC {
00058
00065 class HISTOGRAM : public RVC::OBJECT {
00066 public:
00067
00068 #ifndef GENERATING_DOXYGEN_OUTPUT
00069 class FILTER_COMPONENT;
00070 #endif
00071
00072 HISTOGRAM ();
00073
00074 HISTOGRAM (
00075 const RVC::HISTOGRAM& rhs
00076 );
00077
00078 virtual ~HISTOGRAM ();
00079
00080 RVC::HISTOGRAM& operator= (
00081 const RVC::HISTOGRAM& rhs
00082 );
00083
00085 ERRVALUE ComputeFromRegion (
00086 const RVC::RASTER& RastObj,
00087 const REGION2D& Region,
00088 #ifdef RVC_CREDENTIALS_MANDATORY
00089 RVC::RASTER::COMPONENT Component,
00090 const CREDENTIALS* Credentials
00091 #else
00092 RVC::RASTER::COMPONENT Component = RVC::RASTER::COMPONENT_Default,
00093 const CREDENTIALS* Credentials = 0
00094 #endif
00095 );
00096
00099 int GetBinIndexFromValue (
00100 double CellValue
00101 ) const;
00102
00105 double GetBinInterval (
00106 ) const;
00107
00111 double GetBinMaxValue (
00112 ) const;
00113
00117 double GetBinMinValue (
00118 ) const;
00119
00121 const DOUBLE_RANGE& GetBinRange (
00122 ) const { return (m_BinRange); }
00123
00126 UINT32 GetCellCount (
00127 double CellValue
00128 ) const;
00129
00132 const SIMPLE_ARRAY<UINT32>& GetCellCounts (
00133 ) const;
00134
00137 double GetCellMaxValue (
00138 ) const { return (m_CellRange.GetMaximum()); }
00139
00141 double GetCellMinValue (
00142 ) const { return (m_CellRange.GetMinimum()); }
00143
00145 void GetCellRange (
00146 DOUBLE_RANGE& CellRange
00147 ) const { CellRange = m_CellRange; }
00148
00151 UINT16 GetColumnSampleInterval (
00152 ) const;
00153
00156 RVC::RASTER::COMPONENT GetComponent (
00157 ) const;
00158
00160 UINT16 GetCountScale (
00161 ) const { return (m_CountScale); }
00162
00165 UINT32 GetGreaterThanCount (
00166 ) const;
00167
00170 UINT32 GetLessThanCount (
00171 ) const;
00172
00175 UINT16 GetLineSampleInterval (
00176 ) const;
00177
00180 double GetMean (
00181 ) const;
00182
00185 UINT32 GetNullCellCount (
00186 ) const;
00187
00189 ERRVALUE GetStatistics (
00190 STAT_UNIVARIATE& stats
00191 ) const;
00192
00195 double GetStdDev (
00196 ) const;
00197
00199 ERRVALUE Make (
00200 const RVC::RASTER& parent,
00201 #ifdef RVC_CREDENTIALS_MANDATORY
00202 RVC::RASTER::COMPONENT Component,
00203 const CREDENTIALS* Credentials
00204 #else
00205 RVC::RASTER::COMPONENT Component = RVC::RASTER::COMPONENT_Default,
00206 const CREDENTIALS* Credentials = 0
00207 #endif
00208 );
00209
00212 ERRVALUE Read (
00213 const RVC::RASTER& parent,
00214 #ifdef RVC_CREDENTIALS_MANDATORY
00215 RVC::RASTER::COMPONENT Component,
00216 const CREDENTIALS* Credentials
00217 #else
00218 RVC::RASTER::COMPONENT Component = RVC::RASTER::COMPONENT_Default,
00219 const CREDENTIALS* Credentials = 0
00220 #endif
00221 );
00222
00224 void SetBinRange (
00225 const DOUBLE_RANGE& range
00226 );
00227
00229 void SetSampleIntervals (
00230 UINT16 LineInterval,
00231 UINT16 ColumnInterval
00232 );
00233
00234 private:
00235 #ifndef GENERATING_DOXYGEN_OUTPUT
00236
00237 SIMPLE_ARRAY<UINT32> m_CellCount;
00238 DOUBLE_RANGE m_BinRange;
00239 double m_BinInterval;
00240 double m_Mean;
00241 double m_StdDev;
00242 double m_Sum;
00243 double m_SumOfSquares;
00244 double m_MeanFull;
00245 UINT32 m_CountLtMin;
00246 UINT32 m_CountGtMax;
00247 UINT32 m_CountNull;
00248 UINT16 m_LineSample;
00249 UINT16 m_ColumnSample;
00250 DOUBLE_RANGE m_CellRange;
00251 LRECT2D m_HistExtents;
00252 RASTER::COMPONENT m_Component;
00253 UINT16 m_CountScale;
00254
00255 ERRVALUE ComputeDefaultHistogram (const RASTER& RastObj, const CREDENTIALS* Credentials);
00256 ERRVALUE ComputeHistogram (const OBJITEM& SrcObjItem, const CREDENTIALS* Credentials);
00257 void GetDftDescriptor (RVC::RASTER::COMPONENT Component, RVC::DESCRIPTOR& Descriptor) const;
00258 void GetInfo (HISTINFO& histinfo) const;
00259 static ERRVALUE GetInfo (FILEHANDLE* FileHandle, const OBJECT& obj, HISTINFO& histinfo);
00260 ERRVALUE SaveHistogram (const RASTER& RastObj, const DESCRIPTOR& Descriptor, const CREDENTIALS* Credentials);
00261 void SetInfo (const HISTINFO& histinfo, IMAGE::CELLTYPE CellType);
00262
00263
00264 virtual OBJTYPE v_GetDftObjectType () const;
00265
00266 class COMPHIST;
00267 friend class COMPHIST;
00268 friend class FILTER_COMPONENT;
00269 #endif // GENERATING_DOXYGEN_OUTPUT
00270 };
00271
00272
00274 class HISTOGRAM::FILTER_COMPONENT : public OBJECT::FILTER {
00275 public:
00276
00278 FILTER_COMPONENT (
00279 const RASTER& ParentRastObj,
00280 RASTER::COMPONENT Component
00281 );
00282
00284 virtual ~FILTER_COMPONENT ();
00285
00286 private:
00287 #ifndef GENERATING_DOXYGEN_OUTPUT
00288 RASTER::COMPONENT m_Component;
00289 IMAGE::CELLTYPE m_CellType;
00290 FILEHANDLE* m_FileHandle;
00291
00292 virtual bool Filter (const RVC::OBJECT& obj);
00293 #endif // GENERATING_DOXYGEN_OUTPUT
00294 };
00295
00296 }
00297
00298 #endif // INC_RVC_HISTOGRM_H