OSSIM - Open Source Software Image Map  Version 1.9.0 (20180803)
Classes | Public Member Functions | Protected Member Functions | Protected Attributes | List of all members
ossimMultiResLevelHistogram Class Reference

#include <ossimMultiResLevelHistogram.h>

Inheritance diagram for ossimMultiResLevelHistogram:
ossimReferenced

Classes

class  ossimProprietaryHeaderInformation
 

Public Member Functions

 ossimMultiResLevelHistogram ()
 
 ossimMultiResLevelHistogram (ossim_uint32 numberOfResLevels)
 
 ossimMultiResLevelHistogram (const ossimMultiResLevelHistogram &rhs)
 
virtual ~ossimMultiResLevelHistogram ()
 
ossimRefPtr< ossimHistogramgetHistogram (ossim_uint32 band, ossim_uint32 resLevel=0)
 
const ossimRefPtr< ossimHistogramgetHistogram (ossim_uint32 band, ossim_uint32 resLevel=0) const
 
ossim_uint32 getNumberOfResLevels () const
 
ossim_uint32 getNumberOfBands (ossim_uint32 resLevel=0) const
 
void create (ossim_uint32 numberOfResLevels)
 
ossimRefPtr< ossimMultiBandHistogramgetMultiBandHistogram (ossim_uint32 resLevel) const
 
ossimRefPtr< ossimMultiResLevelHistogramcreateAccumulationLessThanEqual () const
 
ossimRefPtr< ossimMultiResLevelHistogramcreateAccumulationGreaterThanEqual () const
 
void setBinCount (double binNumber, double count)
 
virtual void addHistogram (ossimMultiBandHistogram *histo)
 
virtual ossimRefPtr< ossimMultiBandHistogramaddHistogram ()
 
virtual bool setHistogram (ossimRefPtr< ossimMultiBandHistogram > histo, ossim_uint32 resLevel)
 
virtual ossimFilename getHistogramFile () const
 
virtual bool importHistogram (const ossimFilename &inputFile)
 
virtual bool importHistogram (std::istream &in)
 
virtual bool loadState (const ossimKeywordlist &kwl, const char *prefix=0)
 
virtual bool saveState (ossimKeywordlist &kwl, const char *prefix=0) const
 
- Public Member Functions inherited from ossimReferenced
 ossimReferenced ()
 
 ossimReferenced (const ossimReferenced &)
 
ossimReferencedoperator= (const ossimReferenced &)
 
void ref () const
 increment the reference count by one, indicating that this object has another pointer which is referencing it. More...
 
void unref () const
 decrement the reference count by one, indicating that a pointer to this object is referencing it. More...
 
void unref_nodelete () const
 decrement the reference count by one, indicating that a pointer to this object is referencing it. More...
 
int referenceCount () const
 

Protected Member Functions

void deleteHistograms ()
 
bool parseProprietaryHistogram (std::istream &in)
 
- Protected Member Functions inherited from ossimReferenced
virtual ~ossimReferenced ()
 

Protected Attributes

std::vector< ossimRefPtr< ossimMultiBandHistogram > > theHistogramList
 
ossimFilename theHistogramFile
 

Detailed Description

Definition at line 21 of file ossimMultiResLevelHistogram.h.

Constructor & Destructor Documentation

◆ ossimMultiResLevelHistogram() [1/3]

ossimMultiResLevelHistogram::ossimMultiResLevelHistogram ( )

Definition at line 23 of file ossimMultiResLevelHistogram.cpp.

Referenced by createAccumulationGreaterThanEqual(), and createAccumulationLessThanEqual().

24  :
27 {
28 }
std::vector< ossimRefPtr< ossimMultiBandHistogram > > theHistogramList

◆ ossimMultiResLevelHistogram() [2/3]

ossimMultiResLevelHistogram::ossimMultiResLevelHistogram ( ossim_uint32  numberOfResLevels)

Definition at line 30 of file ossimMultiResLevelHistogram.cpp.

References create().

31  :
34 {
35  create(numberOfResLevels);
36 }
std::vector< ossimRefPtr< ossimMultiBandHistogram > > theHistogramList
void create(ossim_uint32 numberOfResLevels)

◆ ossimMultiResLevelHistogram() [3/3]

ossimMultiResLevelHistogram::ossimMultiResLevelHistogram ( const ossimMultiResLevelHistogram rhs)

Definition at line 38 of file ossimMultiResLevelHistogram.cpp.

References create(), getNumberOfResLevels(), and theHistogramList.

39  :
42 {
43 
45  for(ossim_uint32 i = 0; i < theHistogramList.size(); ++i)
46  {
47  theHistogramList[i] = rhs.theHistogramList[i].valid()?
50  }
51 }
std::vector< ossimRefPtr< ossimMultiBandHistogram > > theHistogramList
void create(ossim_uint32 numberOfResLevels)
unsigned int ossim_uint32

◆ ~ossimMultiResLevelHistogram()

ossimMultiResLevelHistogram::~ossimMultiResLevelHistogram ( )
virtual

Definition at line 53 of file ossimMultiResLevelHistogram.cpp.

References deleteHistograms().

Member Function Documentation

◆ addHistogram() [1/2]

void ossimMultiResLevelHistogram::addHistogram ( ossimMultiBandHistogram histo)
virtual

Will append to the list the passed in histogram.

Definition at line 141 of file ossimMultiResLevelHistogram.cpp.

References theHistogramList.

Referenced by ossimHistogramRemapper::computeHistogram(), and ossimOverviewSequencer::writeHistogram().

142 {
143  theHistogramList.push_back(histo);
144 }
std::vector< ossimRefPtr< ossimMultiBandHistogram > > theHistogramList

◆ addHistogram() [2/2]

ossimRefPtr< ossimMultiBandHistogram > ossimMultiResLevelHistogram::addHistogram ( )
virtual

This will create and append a histogram to the list and return a pointer to the new histogram.

Definition at line 146 of file ossimMultiResLevelHistogram.cpp.

References theHistogramList.

147 {
149  theHistogramList.push_back(result);
150  return result;
151 }
std::vector< ossimRefPtr< ossimMultiBandHistogram > > theHistogramList

◆ create()

void ossimMultiResLevelHistogram::create ( ossim_uint32  numberOfResLevels)

◆ createAccumulationGreaterThanEqual()

ossimRefPtr< ossimMultiResLevelHistogram > ossimMultiResLevelHistogram::createAccumulationGreaterThanEqual ( ) const

Definition at line 111 of file ossimMultiResLevelHistogram.cpp.

References ossimMultiResLevelHistogram(), and theHistogramList.

112 {
114 
115  if(theHistogramList.size() > 0)
116  {
118 
119  for(ossim_uint32 idx=0; idx < (ossim_uint32) theHistogramList.size(); ++ idx)
120  {
121  if(theHistogramList[idx].valid())
122  {
123  ossimRefPtr<ossimMultiBandHistogram> multiBandAccumulator = theHistogramList[idx]->createAccumulationGreaterThanEqual();
124  result->theHistogramList[idx]=multiBandAccumulator;
125  }
126  else
127  {
128  // we will push on a null since someone could
129  // turn off a band. A null accumulation will
130  // indicate no histogram data.
131  //
132  result->theHistogramList[idx] = 0;
133  }
134  }
135  result = 0;
136  }
137 
138  return result;
139 }
std::vector< ossimRefPtr< ossimMultiBandHistogram > > theHistogramList
unsigned int ossim_uint32

◆ createAccumulationLessThanEqual()

ossimRefPtr< ossimMultiResLevelHistogram > ossimMultiResLevelHistogram::createAccumulationLessThanEqual ( ) const

Definition at line 68 of file ossimMultiResLevelHistogram.cpp.

References ossimMultiResLevelHistogram(), and theHistogramList.

Referenced by ossimHistogramEqualization::computeAccumulationHistogram(), and ossimHistogramEqualization::ossimHistogramEqualization().

69 {
71 
72  if(theHistogramList.size() > 0)
73  {
75 
76  for(ossim_uint32 idx=0; idx < (ossim_uint32) theHistogramList.size(); ++ idx)
77  {
78  if(theHistogramList[idx].valid())
79  {
80  ossimRefPtr<ossimMultiBandHistogram> multiBandAccumulator = theHistogramList[idx]->createAccumulationLessThanEqual();
81  result->theHistogramList[idx] = multiBandAccumulator;
82  }
83  else
84  {
85  // we will push on a null since someone could
86  // turn off a band. A null accumulation will
87  // indicate no histogram data.
88  //
89  result->theHistogramList[idx] = 0;
90  }
91  }
92  }
93 
94  return result;
95 }
std::vector< ossimRefPtr< ossimMultiBandHistogram > > theHistogramList
unsigned int ossim_uint32

◆ deleteHistograms()

void ossimMultiResLevelHistogram::deleteHistograms ( )
protected

Definition at line 164 of file ossimMultiResLevelHistogram.cpp.

References theHistogramList.

Referenced by create(), importHistogram(), loadState(), and ~ossimMultiResLevelHistogram().

165 {
166  for(ossim_uint32 idx = 0; idx < (ossim_uint32)theHistogramList.size(); ++idx)
167  {
168  if(theHistogramList[idx].valid())
169  {
170  theHistogramList[idx] = NULL;
171  }
172  }
173 
174  theHistogramList.clear();
175 }
std::vector< ossimRefPtr< ossimMultiBandHistogram > > theHistogramList
unsigned int ossim_uint32

◆ getHistogram() [1/2]

ossimRefPtr< ossimHistogram > ossimMultiResLevelHistogram::getHistogram ( ossim_uint32  band,
ossim_uint32  resLevel = 0 
)

Definition at line 177 of file ossimMultiResLevelHistogram.cpp.

References ossimMultiBandHistogram::getHistogram(), getMultiBandHistogram(), and ossimRefPtr< T >::valid().

Referenced by ossimShorelineTool::autoComputeThreshold(), ossimHistogramRemapper::getHistogram(), and ossimHistogramRemapper::setNullCount().

179 {
181 
182  if(temp.valid())
183  {
184  return temp->getHistogram(band);
185  }
186 
187  return (ossimHistogram*)0;
188 }
bool valid() const
Definition: ossimRefPtr.h:75
ossimRefPtr< ossimHistogram > getHistogram(ossim_int32 band)
ossimRefPtr< ossimMultiBandHistogram > getMultiBandHistogram(ossim_uint32 resLevel) const

◆ getHistogram() [2/2]

const ossimRefPtr< ossimHistogram > ossimMultiResLevelHistogram::getHistogram ( ossim_uint32  band,
ossim_uint32  resLevel = 0 
) const

Definition at line 189 of file ossimMultiResLevelHistogram.cpp.

References ossimMultiBandHistogram::getHistogram(), getMultiBandHistogram(), and ossimRefPtr< T >::valid().

191 {
193 
194  if(temp.valid())
195  {
196  return temp->getHistogram(band);
197  }
198 
199  return (ossimHistogram*)0;
200 }
bool valid() const
Definition: ossimRefPtr.h:75
ossimRefPtr< ossimHistogram > getHistogram(ossim_int32 band)
ossimRefPtr< ossimMultiBandHistogram > getMultiBandHistogram(ossim_uint32 resLevel) const

◆ getHistogramFile()

ossimFilename ossimMultiResLevelHistogram::getHistogramFile ( ) const
virtual

Definition at line 508 of file ossimMultiResLevelHistogram.cpp.

References theHistogramFile.

Referenced by ossimHistogramRemapper::getHistogramFile().

509 {
510  return theHistogramFile;
511 }

◆ getMultiBandHistogram()

ossimRefPtr< ossimMultiBandHistogram > ossimMultiResLevelHistogram::getMultiBandHistogram ( ossim_uint32  resLevel) const

◆ getNumberOfBands()

ossim_uint32 ossimMultiResLevelHistogram::getNumberOfBands ( ossim_uint32  resLevel = 0) const

Definition at line 207 of file ossimMultiResLevelHistogram.cpp.

References getMultiBandHistogram(), ossimMultiBandHistogram::getNumberOfBands(), and ossimRefPtr< T >::valid().

Referenced by ossimHistogramRemapper::setNullCount().

208 {
210  if (h.valid())
211  {
212  return h->getNumberOfBands();
213  }
214 
215  return 0;
216 }
bool valid() const
Definition: ossimRefPtr.h:75
ossim_uint32 getNumberOfBands() const
ossimRefPtr< ossimMultiBandHistogram > getMultiBandHistogram(ossim_uint32 resLevel) const

◆ getNumberOfResLevels()

ossim_uint32 ossimMultiResLevelHistogram::getNumberOfResLevels ( ) const

Definition at line 202 of file ossimMultiResLevelHistogram.cpp.

References theHistogramList.

Referenced by ossimMultiResLevelHistogram(), and setHistogram().

203 {
204  return (ossim_uint32)theHistogramList.size();
205 }
std::vector< ossimRefPtr< ossimMultiBandHistogram > > theHistogramList
unsigned int ossim_uint32

◆ importHistogram() [1/2]

bool ossimMultiResLevelHistogram::importHistogram ( const ossimFilename inputFile)
virtual

Definition at line 335 of file ossimMultiResLevelHistogram.cpp.

References ossim::StreamFactoryRegistry::instance(), and theHistogramFile.

Referenced by ossimImageHandler::getImageHistogram(), ossimHistogramSource::loadState(), ossimHistogramRemapper::openHistogram(), and ossimImageSourceHistogramFilter::setHistogram().

336 {
337  //---
338  // File size check removed for s3
339  // if( file.fileSize() > 0 )
340  // {
341  // theHistogramFile = file;
342 
343  bool result = false;
344  std::shared_ptr<ossim::istream> in = ossim::StreamFactoryRegistry::instance()->
345  createIstream( file, std::ios_base::in );
346  if ( in )
347  {
348  result = importHistogram( *in );
349  if ( result )
350  {
351  theHistogramFile = file;
352  }
353  }
354  return result;
355 }
virtual bool importHistogram(const ossimFilename &inputFile)
static StreamFactoryRegistry * instance()

◆ importHistogram() [2/2]

bool ossimMultiResLevelHistogram::importHistogram ( std::istream &  in)
virtual

Definition at line 228 of file ossimMultiResLevelHistogram.cpp.

References ossimString::c_str(), deleteHistograms(), ossimString::find(), getline(), ossimMultiResLevelHistogram::ossimProprietaryHeaderInformation::getNumberOfResLevels(), ossimMultiBandHistogram::importHistogram(), loadState(), ossimMultiResLevelHistogram::ossimProprietaryHeaderInformation::parseStream(), ossimKeywordlist::parseStream(), ossimString::substr(), theHistogramList, and ossimString::toUInt32().

229 {
230  if (!in) // Check stream state.
231  {
232  return false;
233  }
234 
235  ossimString buffer;
236  getline(in, buffer);
237 
238  if ( in.eof() ) // Zero byte files will hit here.
239  {
240  return false;
241  }
242 
243  // check to see if it is a proprietary histogram file
244  //
245  if((buffer =="") || (buffer.c_str()[0] != 'F' ||
246  buffer.c_str()[1] != 'i'))
247  {
248  in.seekg(0, ios::beg);
249  ossimKeywordlist kwl;
250  if (kwl.parseStream(in) == true)
251  {
252  return loadState(kwl);
253  }
254  else
255  {
256  return false;
257  }
258  }
259 
260  ossimProprietaryHeaderInformation header;
261  in.seekg(0, ios::beg);
263  if(header.parseStream(in))
264  {
265  ossim_uint32 numberOfResLevels = header.getNumberOfResLevels();
266 
267  if(numberOfResLevels)
268  {
269  theHistogramList.resize(numberOfResLevels);
270 
271  for(ossim_uint32 counter = 0; counter < (ossim_uint32)theHistogramList.size(); ++counter)
272  {
273  theHistogramList[counter] = NULL;
274  }
275  ossimString reslevelBuffer;
276  ossimString buffer;
277 
278  for(ossim_uint32 idx = 0; idx < numberOfResLevels; ++idx)
279  {
280  getline(in, buffer);
281  if(buffer.find("RR Level") != string::npos)
282  {
283  std::string::size_type offset = buffer.find(":");
284  if(offset != string::npos)
285  {
286  reslevelBuffer = buffer.substr(offset+1);
287  }
288  else
289  {
291  return false;
292  }
293  }
294  else
295  {
297  return false;
298  }
299  ossim_uint32 resLevelIdx = reslevelBuffer.toUInt32();
300 
301  if(resLevelIdx < (ossim_uint32)theHistogramList.size())
302  {
303  if(!theHistogramList[resLevelIdx])
304  {
306  if(histogram->importHistogram(in))
307  {
308  theHistogramList[resLevelIdx] = histogram;
309  }
310  else
311  {
313  return false;
314  }
315  }
316  }
317  else
318  {
320  return false;
321  }
322  ossimString skipDot;
323  getline(in, skipDot);
324  }
325  }
326  else
327  {
328  return false;
329  }
330  }
331 
332  return true;
333 }
Represents serializable keyword/value map.
std::vector< ossimRefPtr< ossimMultiBandHistogram > > theHistogramList
ossim_uint32 toUInt32() const
std::istream & getline(std::istream &is, ossimString &str, char delim)
Definition: ossimString.h:916
virtual bool loadState(const ossimKeywordlist &kwl, const char *prefix=0)
unsigned int ossim_uint32
virtual bool parseStream(ossim::istream &is, bool ignoreBinaryChars)
deprecated method
const char * c_str() const
Returns a pointer to a null-terminated array of characters representing the string&#39;s contents...
Definition: ossimString.h:396
std::string substr(std::string::size_type pos=0, std::string::size_type n=std::string::npos) const
Equivalent to basic_string(*this, pos, n).
Definition: ossimString.h:910
std::string::size_type find(const std::string &s, std::string::size_type pos=0) const
Searches for s as a substring of *this, beginning at character pos of *this.
Definition: ossimString.h:753
virtual bool importHistogram(const ossimFilename &inputFile)

◆ loadState()

bool ossimMultiResLevelHistogram::loadState ( const ossimKeywordlist kwl,
const char *  prefix = 0 
)
virtual

Definition at line 476 of file ossimMultiResLevelHistogram.cpp.

References deleteHistograms(), and ossimKeywordlist::find().

Referenced by importHistogram(), and ossimHistogramSource::loadState().

478 {
480  const char* number_of_res_levels = kwl.find(prefix, NUMBER_OF_RES_LEVELS.key());
481 
482  if(number_of_res_levels)
483  {
484  ossim_uint32 numberOfResLevels = ossimString(number_of_res_levels).toUInt32();
485 
486  if(numberOfResLevels)
487  {
488  ossimString newPrefix;
489  for(ossim_uint32 idx = 0; idx < numberOfResLevels; ++idx)
490  {
492 
493  if (prefix) newPrefix = prefix;
494 
495  newPrefix += "rr_level";
496  newPrefix += ossimString::toString(idx);
497  newPrefix += ".";
498 
499  histo->loadState(kwl, newPrefix.c_str());
500 
501  theHistogramList.push_back(histo);
502  }
503  }
504  }
505  return true;
506 }
const char * find(const char *key) const
std::vector< ossimRefPtr< ossimMultiBandHistogram > > theHistogramList
virtual bool loadState(const ossimKeywordlist &kwl, const char *prefix=0)
static ossimString toString(bool aValue)
Numeric to string methods.
ossim_uint32 toUInt32() const
unsigned int ossim_uint32
const char * c_str() const
Returns a pointer to a null-terminated array of characters representing the string&#39;s contents...
Definition: ossimString.h:396
const char * key() const

◆ parseProprietaryHistogram()

bool ossimMultiResLevelHistogram::parseProprietaryHistogram ( std::istream &  in)
protected

◆ saveState()

bool ossimMultiResLevelHistogram::saveState ( ossimKeywordlist kwl,
const char *  prefix = 0 
) const
virtual

Definition at line 441 of file ossimMultiResLevelHistogram.cpp.

References ossimKeywordlist::add(), theHistogramList, and ossimKeywordNames::TYPE_KW.

Referenced by ossimHistogramEqualization::initializeLuts(), ossimHistogramSource::saveState(), ossimHistogramWriter::writeHistogram(), and ossimOverviewSequencer::writeHistogram().

443 {
444  bool result = true;
445  if(theHistogramList.size() > 0)
446  {
447  ossimString s1 = prefix;
448  kwl.add(prefix,
450  "ossimMultiResLevelHistogram",
451  true);
452  kwl.add(prefix,
453  NUMBER_OF_RES_LEVELS.key(),
454  static_cast<ossim_uint32>(theHistogramList.size()),
455  true);
456 
457  for(ossim_uint32 idx = 0; idx < theHistogramList.size(); ++idx)
458  {
459  ossimString rr_level = ossimString(prefix) + "rr_level";
460  rr_level += ossimString::toString(idx) + ".";
461  if(theHistogramList[idx].valid())
462  {
463  result = theHistogramList[idx]->saveState(kwl, rr_level.c_str());
464 
465  if(!result)
466  {
467  return result;
468  }
469  }
470  }
471  }
472 
473  return result;
474 }
std::vector< ossimRefPtr< ossimMultiBandHistogram > > theHistogramList
static ossimString toString(bool aValue)
Numeric to string methods.
static const char * TYPE_KW
void add(const char *prefix, const ossimKeywordlist &kwl, bool overwrite=true)
unsigned int ossim_uint32
const char * c_str() const
Returns a pointer to a null-terminated array of characters representing the string&#39;s contents...
Definition: ossimString.h:396
const char * key() const

◆ setBinCount()

void ossimMultiResLevelHistogram::setBinCount ( double  binNumber,
double  count 
)

Definition at line 97 of file ossimMultiResLevelHistogram.cpp.

References theHistogramList.

Referenced by ossimImageSourceHistogramFilter::setHistogram().

98 {
99  if(theHistogramList.size() > 0)
100  {
101  for(ossim_uint32 idx=0; idx < (ossim_uint32) theHistogramList.size(); ++ idx)
102  {
103  if(theHistogramList[idx].valid())
104  {
105  theHistogramList[idx]->setBinCount(binNumber, count);
106  }
107  }
108  }
109 }
std::vector< ossimRefPtr< ossimMultiBandHistogram > > theHistogramList
unsigned int ossim_uint32

◆ setHistogram()

bool ossimMultiResLevelHistogram::setHistogram ( ossimRefPtr< ossimMultiBandHistogram histo,
ossim_uint32  resLevel 
)
virtual

Will set the histogram to the passed in res level. It will delete the histogram at the res level before setting the pointer to the passed in histogram. if the resLevel is out of range it will return false meaning it was unable to assign the pointer.

Definition at line 153 of file ossimMultiResLevelHistogram.cpp.

References getNumberOfResLevels(), and theHistogramList.

155 {
156  if(resLevel < getNumberOfResLevels())
157  {
158  theHistogramList[resLevel] = histo;
159  return true;
160  }
161  return false;
162 }
std::vector< ossimRefPtr< ossimMultiBandHistogram > > theHistogramList

Member Data Documentation

◆ theHistogramFile

ossimFilename ossimMultiResLevelHistogram::theHistogramFile
protected

Definition at line 97 of file ossimMultiResLevelHistogram.h.

Referenced by getHistogramFile(), and importHistogram().

◆ theHistogramList

std::vector<ossimRefPtr<ossimMultiBandHistogram> > ossimMultiResLevelHistogram::theHistogramList
protected

The documentation for this class was generated from the following files: