1 //******************************************************************* 2 // 3 // License: MIT 4 // 5 // See top level LICENSE.txt file. 6 // 7 // Author: Garrett Potts (gpotts@imagelinks.com) 8 // 9 // Description: 10 // 11 //******************************************************************* 12 // $Id: ossimMultiBandHistogram.h 17205 2010-04-24 18:10:01Z dburken $ 13 #ifndef ossimMultiBandHistogram_HEADER 14 #define ossimMultiBandHistogram_HEADER 15 #include <vector> 16 #include <ossim/base/ossimConstants.h> 17 #include <ossim/base/ossimFilename.h> 18 #include <ossim/base/ossimHistogram.h> 19 #include <ossim/base/ossimRefPtr.h> 20 #include <ossim/base/ossimXmlNode.h> 21 #include <ossim/base/ossimReferenced.h> 22 23 class ossimKeywordlist; 24 class ossimImageSource; 25 26 class OSSIMDLLEXPORT ossimMultiBandHistogram : public ossimReferenced 27 { 28 public: 29 ossimMultiBandHistogram(); 30 ossimMultiBandHistogram(const ossimMultiBandHistogram& rhs); 31 ossimMultiBandHistogram(ossim_int32 numberOfBands, 32 ossim_int32 numberOfBuckets, 33 float minValue, 34 float maxValue, 35 float nullValue, 36 ossimScalarType scalar); 37 38 void create(const ossimImageSource* input); 39 40 void create(ossim_int32 numberOfBands, 41 ossim_int32 numberOfBuckets, 42 float minValue, 43 float maxValue, 44 float nullValue, 45 ossimScalarType scalar); 46 47 ossim_uint32 getNumberOfBands() const; 48 49 void create(ossim_int32 numberOfBands); 50 void setBinCount(double binNumber, double count); 51 ossimRefPtr<ossimHistogram> getHistogram(ossim_int32 band); 52 const ossimRefPtr<ossimHistogram> getHistogram(ossim_int32 band)const; 53 54 ossimRefPtr<ossimMultiBandHistogram> createAccumulationLessThanEqual()const; 55 ossimRefPtr<ossimMultiBandHistogram> createAccumulationGreaterThanEqual()const; 56 /*! 57 * Imports a text file that has histogram data 58 */ 59 virtual bool importHistogram(const ossimFilename& inputFile); 60 virtual bool importHistogram(std::istream& in); 61 virtual bool loadState(const ossimKeywordlist& kwl, 62 const char* prefix = 0); 63 virtual bool saveState(ossimKeywordlist& kwl, 64 const char* prefix = 0)const; 65 virtual bool saveState(ossimRefPtr<ossimXmlNode> xmlNode)const; 66 virtual bool loadState(const ossimRefPtr<ossimXmlNode> xmlNode); 67 68 protected: 69 virtual ~ossimMultiBandHistogram(); 70 class ossimProprietaryHeaderInformation 71 { 72 public: ossimProprietaryHeaderInformation()73 ossimProprietaryHeaderInformation(){clear();} 74 75 bool parseStream(std::istream& in); 76 77 ossim_uint32 getNumberOfBands() const; 78 79 void clear(); 80 81 ossimString theFileType; 82 ossimString theVersion; 83 ossimString theNumberOfBands; 84 85 }; 86 /*! 87 * Holds the histograms for each band 88 */ 89 std::vector<ossimRefPtr<ossimHistogram> > theHistogramList; 90 91 void deleteHistograms(); 92 93 bool parseProprietaryHistogram(std::istream& in); 94 95 }; 96 97 #endif 98