24 static const ossimKeyword HISTOGRAM_INVERSE_FLAG_KW(
"inverse_flag",
25 "specifies whether the inverse should be done for the getTile");
27 static ossimTrace traceDebug(
"ossimHistogramEqualization:debug");
32 theAccumulationHistogram(NULL),
41 theAccumulationHistogram(0),
56 theAccumulationHistogram(0),
57 theInverseFlag(inverseFlag)
83 if(!inputTile.
valid())
return inputTile;
101 if( !inputTile.
valid() ||
168 <<
"ossimHistogramEqualization::getTile WARNING: Unsupported scalar type." 185 const char* prefix)
const 190 HISTOGRAM_INVERSE_FLAG_KW,
200 static const char MODULE[] =
"ossimHistogramEqualization::loadState";
206 <<
"\nprefix: " << prefix << endl;
209 const char* lookup = kwl.
find(prefix,
210 HISTOGRAM_INVERSE_FLAG_KW);
268 T* buf =
static_cast<T*
>(tile->
getBuf(band));
271 if(bandHisto.
valid())
273 if(buf&&histoLut&&(actualBand < histo->getNumberOfBands()))
283 T minPix = (T)tile->
getMinPix(actualBand);
284 T maxPix = (T)tile->
getMaxPix(actualBand);
285 for(
long offset = 0; offset < offsetUpperBound; ++offset)
291 T value = (T)(histoLut[idx]);
298 buf[offset] = value < minPix ? minPix :
299 (value > maxPix ? maxPix : value);
305 T minPix = (T)tile->
getMinPix(actualBand);
306 T maxPix = (T)tile->
getMaxPix(actualBand);
308 for(
long offset = 0; offset < offsetUpperBound; ++offset)
312 if((buf[offset]!=nullPix)&&(idx>=0))
314 T value = (T)(histoLut[idx]);
321 buf[offset] = value < minPix ? minPix :
322 (value > maxPix ? maxPix : value);
326 buf[offset] = nullPix;
391 for(
long band = 0; band < maxBands; ++band)
402 vector<double> countForInverse(numberOfIndices);
408 const float* histoCounts = h->
GetCounts();
420 double delta = maxIntensity-minIntensity;
425 for(idx = 0; idx < numberOfIndices; ++ idx)
429 for(idx = 0; idx < numberOfIndices; ++ idx)
431 forwardLut[idx] = minIntensity + (histoCounts[idx]/maxCount)*delta;
436 inverseLut[inverseIdx] = minIntensity + delta*(idx/(
ossim_float32)numberOfIndices);
445 while((
ossim::isnan(inverseLut[idxEnd]))&&(idxEnd <numberOfIndices)){ ++idxEnd;}
446 if((idxStart!=idxEnd)&&(idxEnd<numberOfIndices))
448 std::fill(inverseLut,
452 idxStart = numberOfIndices-1;
453 while((
ossim::isnan(inverseLut[idxStart]))&&(idxStart > 0)){ --idxStart;}
456 std::fill(inverseLut+idxStart,
457 inverseLut+numberOfIndices,
458 inverseLut[idxStart]);
466 while(idxStart < numberOfIndices)
471 while(
ossim::isnan(inverseLut[idxEnd])&&(idxEnd < (numberOfIndices-1))) ++idxEnd;
472 double length = (idxEnd-idxStart)+1;
473 valueEnd = inverseLut[idxEnd];
474 double deltaVal = (valueEnd-valueStart);
478 while(tempIdx < idxEnd)
482 inverseLut[tempIdx] = valueStart + deltaVal*t;
487 valueStart = valueEnd;
491 valueStart = inverseLut[idxStart];
16 bit unsigned integer (15 bits used)
virtual ossim_uint32 getWidth() const
virtual bool isSourceEnabled() const
float GetRangeMin() const
virtual bool loadState(const ossimKeywordlist &kwl, const char *prefix=NULL)
Method to the load (recreate) the state of an object from a keyword list.
virtual bool loadState(const ossimKeywordlist &kwl, const char *prefix=NULL)
Method to the load (recreate) the state of an object from a keyword list.
virtual const ossim_float64 * getMaxPix() const
virtual bool saveState(ossimKeywordlist &kwl, const char *prefix=NULL) const
Method to save the state of an object to a keyword list.
ossimRefPtr< ossimImageData > runEqualizationAlgorithm(T dummyVariable, ossimRefPtr< ossimImageData > tile)
virtual ossim_uint32 getNumberOfBands() const
virtual std::ostream & print(std::ostream &out) const
Outputs theErrorStatus as an ossimErrorCode and an ossimString.
virtual void computeAccumulationHistogram()
Represents serializable keyword/value map.
float GetRangeMax() const
ossimRefPtr< ossimMultiResLevelHistogram > theAccumulationHistogram
const char * find(const char *key) const
double nan()
Method to return ieee floating point double precision NAN.
virtual void setHistogram(ossimRefPtr< ossimMultiResLevelHistogram > histogram)
virtual std::ostream & print(std::ostream &out) const
Outputs theErrorStatus as an ossimErrorCode and an ossimString.
virtual ~ossimHistogramEqualization()
ossimFilename theFilename
virtual ossimDataObjectStatus getDataObjectStatus() const
virtual ossim_uint32 getHeight() const
16 bit unsigned integer (14 bits used)
virtual void initialize()
16 bit unsigned integer (13 bits used)
virtual void initializeLuts()
virtual ossimRefPtr< ossimMultiResLevelHistogram > getHistogram()
virtual void initialize()
Initialize the data buffer.
virtual void initialize()
void add(const char *prefix, const ossimKeywordlist &kwl, bool overwrite=true)
virtual void setHistogram(ossimRefPtr< ossimMultiResLevelHistogram > histogram)
virtual void getOutputBandList(std::vector< ossim_uint32 > &bandList) const
Initializes bandList.
ossim_uint32 getNumberOfBands() const
static ossimImageDataFactory * instance()
virtual ossimDataObjectStatus validate() const
virtual void setImageRectangleAndBands(const ossimIrect &rect, ossim_uint32 numberOfBands)
bool toBool() const
String to numeric methods.
virtual ossimRefPtr< ossimImageData > getTile(const ossimIrect &tileRect, ossim_uint32 resLevel=0)
ossimImageSource * theInputConnection
unsigned int ossim_uint32
virtual const ossim_float64 * getNullPix() const
virtual int GetIndex(float) const
ossimRefPtr< ossimHistogram > getHistogram(ossim_int32 band)
virtual ossimIrect getImageRectangle() const
float GetMaxCount() const
virtual ossimRefPtr< ossimImageData > create(ossimSource *owner, ossimScalarType scalar, ossim_uint32 bands=1) const
vector< double * > theForwardLut
virtual bool saveState(ossimKeywordlist &kwl, const char *prefix=NULL) const
Method to save the state of an object to a keyword list.
virtual const ossim_float64 * getMinPix() const
std::vector< ossim_uint32 > theBandList
virtual ossimScalarType getScalarType() const
virtual void setInverseFlag(bool inverseFlag)
16 bit unsigned integer (11 bits used)
ossimRefPtr< ossimImageData > theTile
void allocate()
Called on first getTile, will initialize all data needed.
virtual const void * getBuf() const
vector< double * > theInverseLut
virtual void deleteLuts()
#define RTTI_DEF1(cls, name, b1)
ossimHistogramEqualization()
ossimRefPtr< ossimMultiBandHistogram > getMultiBandHistogram(ossim_uint32 resLevel) const
OSSIMDLLEXPORT std::ostream & ossimNotify(ossimNotifyLevel level=ossimNotifyLevel_WARN)
virtual bool getInverseFlag() const
ossimRefPtr< ossimMultiResLevelHistogram > createAccumulationLessThanEqual() const
std::basic_ostream< char > ostream
Base class for char output streams.
virtual bool saveState(ossimKeywordlist &kwl, const char *prefix=0) const
virtual const ossimFilename & getHistogramFilename() const
virtual ossimRefPtr< ossimImageData > getTile(const ossimIpt &origin, ossim_uint32 resLevel=0)
16 bit unsigned integer (12 bits used)
bool isnan(const float &v)
isnan Test for floating point Not A Number (NAN) value.