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