File failed to load: https://isis.astrogeology.usgs.gov/6.0.0/Object/assets/jax/output/NativeMML/config.js
Isis Developer Reference
Equalization.h
Go to the documentation of this file.
1 #ifndef Equalization_h
2 #define Equalization_h
3 
9 /* SPDX-License-Identifier: CC0-1.0 */
10 #include <vector>
11 
12 #include <QString>
13 #include <QStringList>
14 
15 #include "FileList.h"
16 #include "LeastSquares.h"
17 #include "OverlapNormalization.h"
18 
19 using namespace std;
20 
21 namespace Isis {
22  class Buffer;
23  class OverlapStatistics;
24  class Pvl;
25  class PvlGroup;
26  class PvlObject;
27  class Statistics;
122  class Equalization {
123  public:
124  Equalization(OverlapNormalization::SolutionType sType, QString fromListName);
125  virtual ~Equalization();
126 
127  void addHolds(QString holdListName);
128 
129  void calculateStatistics(double samplingPercent,
130  int mincnt,
131  bool wtopt,
132  LeastSquares::SolveMethod methodType);
133  void recalculateStatistics(QString inStatsFileName);
134  void importStatistics(QString instatsFileName);
135  void applyCorrection(QString toListName);
136 
137  PvlGroup getResults();
138  void write(QString outstatsFileName);
139 
140  double evaluate(double dn, int imageIndex, int bandIndex) const;
141 
142  protected:
151  public:
154 
155  void addGain(double gain) {
156  gains.push_back(gain);
157  }
158 
159  void addOffset(double offset) {
160  offsets.push_back(offset);
161  }
162 
163  void addAverage(double average) {
164  avgs.push_back(average);
165  }
166 
167  double getGain(int index) const {
168  return gains[index];
169  }
170 
171  double getOffset(int index) const {
172  return offsets[index];
173  }
174 
175  double getAverage(int index) const {
176  return avgs[index];
177  }
178 
179  double evaluate(double dn, int index) const {
180  double result = Null;
181 
182  double gain = gains[index];
183  if (m_sType != OverlapNormalization::GainsWithoutNormalization) {
184  double offset = offsets[index];
185  double avg = avgs[index];
186  result = (dn - avg) * gain + offset + avg;
187  }
188  else {
189  result = dn * gain;
190  }
191 
192  return result;
193  }
194 
195  private:
196  vector<double> gains;
197  vector<double> offsets;
198  vector<double> avgs;
199 
201  };
202 
211  public:
219  CalculateFunctor(Statistics *stats, double percent) {
220  m_stats = stats;
221  m_linc = (int) (100.0 / percent + 0.5);
222  }
223 
224  virtual ~CalculateFunctor() {}
225 
226  void operator()(Buffer &in) const;
227 
228  protected:
229  virtual void addStats(Buffer &in) const;
230 
231  private:
232  Statistics *m_stats;
233  int m_linc;
234  };
235 
243  class ApplyFunctor {
244  public:
245  ApplyFunctor(const ImageAdjustment *adjustment) {
246  m_adjustment = adjustment;
247  }
248 
249  void operator()(Buffer &in, Buffer &out) const;
250 
251  private:
252  const ImageAdjustment *m_adjustment;
253  };
254 
255  protected:
256  Equalization();
257  void loadInputs(QString fromListName);
258  void setInput(int index, QString value);
259  const FileList &getInputs() const;
260 
261  // Should these be protected or private? (Recall children, i.e. HiEqual... can't
262  // access Equalization's private vars directly)
263  void calculateBandStatistics();
264  void calculateOverlapStatistics();
265 
266  virtual void fillOutList(FileList &outList, QString toListName);
267  virtual void errorCheck(QString fromListName);
268 
269  void generateOutputs(FileList &outList);
270  void loadOutputs(FileList &outList, QString toListName);
271  void loadHolds(OverlapNormalization *oNorm);
272 
273  void setResults();
274 
275  void clearAdjustments();
276  void addAdjustment(ImageAdjustment *adjustment);
277 
278  void clearNormalizations();
279  void clearOverlapStatistics();
280 
281  void addValid(int count);
282  void addInvalid(int count);
283 
284  void fromPvl(const PvlObject &inStats);
285  void setSolved(bool solved);
286  bool isSolved() const;
287 
288  private:
289  void init();
290  QVector<int> validateInputStatistics(QString instatsFileName);
291 
292  bool m_normsSolved;
293  bool m_recalculating;
294  bool m_wtopt;
295 
296  FileList m_imageList; //<! List of input image filenames
297 
298  double m_samplingPercent;
301  int m_validCnt;
302  int m_invalidCnt;
303  int m_mincnt;
304 
305  int m_maxCube;
306  int m_maxBand;
307 
308  QStringList m_badFiles;
309 
310  vector<ImageAdjustment *> m_adjustments; //<! Corrective factors for equalization
311  vector<int> m_holdIndices;
312  vector<bool> m_doesOverlapList;
313  vector<bool> m_alreadyCalculated;
314  vector<OverlapNormalization *> m_overlapNorms;
315  vector<OverlapStatistics *> m_overlapStats;
316 
320  LeastSquares::SolveMethod m_lsqMethod;
321 
322  Pvl *m_results;
323  };
324 };
325 
326 #endif
Isis::Equalization::ImageAdjustment::addGain
void addGain(double gain)
Definition: Equalization.h:155
Isis::Statistics
This class is used to accumulate statistics on double arrays.
Definition: Statistics.h:94
Isis::PvlObject::findGroup
PvlGroupIterator findGroup(const QString &name, PvlGroupIterator beg, PvlGroupIterator end)
Find a group with the specified name, within these indexes.
Definition: PvlObject.h:129
Cube.h
Isis::PvlObject::group
PvlGroup & group(const int index)
Return the group at the specified index.
Definition: PvlObject.cpp:452
Isis::OverlapNormalization::SolutionType
SolutionType
Enumeration for whether user/programmer wants to calculate new gains, offsets, or both when solving.
Definition: OverlapNormalization.h:111
Isis::PvlObject
Contains Pvl Groups and Pvl Objects.
Definition: PvlObject.h:61
Isis::Equalization::ImageAdjustment::addOffset
void addOffset(double offset)
Definition: Equalization.h:159
Isis::PvlKeyword
A single keyword-value pair.
Definition: PvlKeyword.h:82
Isis::Average
Functor for reduce using average functionality.
Definition: Reduce.h:107
Isis::ProcessByLine::ProcessCube
void ProcessCube(const Functor &funct, bool threaded=true)
Same functionality as StartProcess(void funct(Isis::Buffer &in, Isis::Buffer &out)) using Functors.
Definition: ProcessByLine.h:153
QList< QString >
Isis::MultivariateStatistics::Y
Isis::Statistics Y() const
Returns a Stats object for all of the Y data fed through the AddData method.
Definition: MultivariateStatistics.cpp:262
Isis::PvlObject::beginObject
PvlObjectIterator beginObject()
Returns the index of the beginning object.
Definition: PvlObject.h:235
Isis::OverlapStatistics::HasOverlap
bool HasOverlap(int band) const
Checks the specified band for an overlap.
Definition: OverlapStatistics.h:76
Isis::FileName
File name manipulation and expansion.
Definition: FileName.h:100
Isis::MultivariateStatistics::ValidPixels
BigInt ValidPixels() const
Returns the number of valid pixels processed.
Definition: MultivariateStatistics.cpp:201
Process.h
PvlGroup.h
Isis::PvlObject::endObject
PvlObjectIterator endObject()
Returns the index of the ending object.
Definition: PvlObject.h:253
Isis::Equalization::CalculateFunctor::CalculateFunctor
CalculateFunctor(Statistics *stats, double percent)
Constructs a CalculateFunctor.
Definition: Equalization.h:219
Isis::OverlapStatistics::Bands
int Bands() const
Returns the number of bands both cubes have.
Definition: OverlapStatistics.h:138
Isis::Equalization::ImageAdjustment::~ImageAdjustment
~ImageAdjustment()
Definition: Equalization.h:153
LineManager.h
Isis::ProcessByBrick::SetOutputCube
virtual Cube * SetOutputCube(const QString &fname, const CubeAttributeOutput &att)
Create the output file.
Definition: ProcessByBrick.cpp:364
Isis::PvlContainer::hasKeyword
bool hasKeyword(const QString &name) const
Check to see if a keyword exists.
Definition: PvlContainer.cpp:159
Isis::Pvl
Container for cube-like labels.
Definition: Pvl.h:119
Isis::CubeAttributeOutput
Manipulate and parse attributes of output cube filenames.
Definition: CubeAttribute.h:473
Isis::PvlObject::addObject
void addObject(const PvlObject &object)
Add a PvlObject.
Definition: PvlObject.h:307
Isis::LeastSquares::SolveMethod
SolveMethod
Definition: LeastSquares.h:112
QStringList
Isis::toString
QString toString(bool boolToConvert)
Global function to convert a boolean to a string.
Definition: IString.cpp:211
Isis::IsSpecial
bool IsSpecial(const double d)
Returns if the input pixel is special.
Definition: SpecialPixel.h:197
Isis::Equalization::ImageAdjustment::evaluate
double evaluate(double dn, int index) const
Definition: Equalization.h:179
Isis::ProcessByLine
Process cubes by line.
Definition: ProcessByLine.h:97
Isis::Equalization::ImageAdjustment::getAverage
double getAverage(int index) const
Definition: Equalization.h:175
Isis::Buffer
Buffer for reading and writing cube data.
Definition: Buffer.h:53
Isis::MultivariateStatistics::X
Isis::Statistics X() const
Returns a Stats object for all of the X data fed through the AddData method.
Definition: MultivariateStatistics.cpp:252
Isis::ProcessByLine::ProcessCubeInPlace
void ProcessCubeInPlace(const Functor &funct, bool threaded=true)
Same functionality as StartProcess(void funct(Isis::Buffer &inout)) using Functors.
Definition: ProcessByLine.h:133
Isis::FileName::baseName
QString baseName() const
Returns the name of the file without the path and without extensions.
Definition: FileName.cpp:145
Buffer.h
FileList.h
Isis::Equalization::ApplyFunctor
This class is used as a functor to apply adjustments (equalize) to an image.
Definition: Equalization.h:243
Isis::PvlGroup
Contains multiple PvlContainers.
Definition: PvlGroup.h:41
Isis::OverlapStatistics::FileNameY
Isis::FileName FileNameY() const
Returns the filename of the second cube.
Definition: OverlapStatistics.h:96
Pvl.h
Isis::Cube::lineCount
int lineCount() const
Definition: Cube.cpp:1734
_FILEINFO_
#define _FILEINFO_
Macro for the filename and line number.
Definition: IException.h:24
Isis::PvlObject::ConstPvlObjectIterator
QList< PvlObject >::const_iterator ConstPvlObjectIterator
Definition: PvlObject.h:228
Isis::FileList::read
void read(FileName listFile)
reads in a FileName obj
Definition: FileList.cpp:52
Isis::Progress::SetText
void SetText(const QString &text)
Changes the value of the text string reported just before 0% processed.
Definition: Progress.cpp:61
Isis::Equalization::CalculateFunctor::~CalculateFunctor
virtual ~CalculateFunctor()
Definition: Equalization.h:224
Isis::OverlapNormalization
Calculate the bases and multipliers for normalizing overlapping "data sets" (e.g.,...
Definition: OverlapNormalization.h:61
Isis::Buffer::LineDimension
int LineDimension() const
Returns the number of lines in the shape buffer.
Definition: Buffer.h:79
Isis::Equalization::ImageAdjustment
Definition: Equalization.h:150
Isis::OverlapNormalization::AddHold
void AddHold(unsigned holdIndex)
Sets the list of files to be held during the solving process.
Definition: OverlapNormalization.h:103
Isis::Equalization::ImageAdjustment::ImageAdjustment
ImageAdjustment(OverlapNormalization::SolutionType sType)
Definition: Equalization.h:152
Isis::PvlObject::findObject
PvlObjectIterator findObject(const QString &name, PvlObjectIterator beg, PvlObjectIterator end)
Find the index of object with a specified name, between two indexes.
Definition: PvlObject.h:274
LeastSquares.h
Isis::Cube::sampleCount
int sampleCount() const
Definition: Cube.cpp:1807
ProcessByLine.h
Isis::Equalization::ImageAdjustment::getOffset
double getOffset(int index) const
Definition: Equalization.h:171
Isis::Process::Progress
Isis::Progress * Progress()
This method returns a pointer to a Progress object.
Definition: Process.h:259
Isis::Cube
IO Handler for Isis Cubes.
Definition: Cube.h:167
Isis::Equalization::CalculateFunctor
This class is used as a functor calculate image statistics.
Definition: Equalization.h:210
Isis::IException
Isis exception class.
Definition: IException.h:91
Isis::Cube::bandCount
virtual int bandCount() const
Returns the number of virtual bands for the cube.
Definition: Cube.cpp:1410
Isis::PvlContainer::addComment
void addComment(const QString &comment)
Definition: PvlContainer.h:269
Isis::Null
const double Null
Value for an Isis Null pixel.
Definition: SpecialPixel.h:95
Isis::Equalization
This class can be used to calculate, read in, and/or apply equalization statistics for a list of file...
Definition: Equalization.h:122
Isis::PvlObject::addGroup
void addGroup(const Isis::PvlGroup &group)
Add a group to the object.
Definition: PvlObject.h:186
Isis::Buffer::Band
int Band(const int index=0) const
Returns the band position associated with a shape buffer index.
Definition: Buffer.cpp:162
Isis::FileName::extension
QString extension() const
Returns the last extension of the file name.
Definition: FileName.cpp:178
Statistics.h
IException.h
Isis::toDouble
double toDouble(const QString &string)
Global function to convert from a string to a double.
Definition: IString.cpp:149
Isis::OverlapStatistics::SetMincount
void SetMincount(unsigned int mincnt)
Sets the minimum number of valid pixels for the overlap to be considered valid for PVL output.
Definition: OverlapStatistics.h:229
std
Namespace for the standard library.
Equalization.h
Isis::Equalization::ImageAdjustment::getGain
double getGain(int index) const
Definition: Equalization.h:167
Isis::OverlapStatistics
Calculates statistics in the area of overlap between two projected cubes.
Definition: OverlapStatistics.h:61
Isis::CubeAttributeInput
Manipulate and parse attributes of input cube filenames.
Definition: CubeAttribute.h:381
OverlapNormalization.h
PvlObject.h
Isis::Buffer::size
int size() const
Returns the total number of pixels in the shape buffer.
Definition: Buffer.h:97
Projection.h
Isis::PvlContainer::keywords
int keywords() const
Returns the number of keywords contained in the PvlContainer.
Definition: PvlContainer.h:86
QVector< int >
Isis::Equalization::ApplyFunctor::ApplyFunctor
ApplyFunctor(const ImageAdjustment *adjustment)
Definition: Equalization.h:245
Isis::OverlapStatistics::FileNameX
Isis::FileName FileNameX() const
Returns the filename of the first cube.
Definition: OverlapStatistics.h:87
OverlapStatistics.h
Isis::Projection
Base class for Map Projections.
Definition: Projection.h:155
Isis::Cube::open
void open(const QString &cfile, QString access="r")
This method will open an isis cube for reading or reading/writing.
Definition: Cube.cpp:627
Isis::ProcessByBrick::EndProcess
void EndProcess()
End the processing sequence and cleans up by closing cubes, freeing memory, etc.
Definition: ProcessByBrick.cpp:669
Isis::FileList
Internalizes a list of files.
Definition: FileList.h:54
Isis::ProcessByLine::SetInputCube
Isis::Cube * SetInputCube(const QString &parameter, const int requirements=0)
Opens an input cube specified by the user and verifies requirements are met.
Definition: ProcessByLine.cpp:41
Isis::Cube::projection
Projection * projection()
Definition: Cube.cpp:1794
Isis::OverlapStatistics::GetMStats
Isis::MultivariateStatistics GetMStats(int band) const
Returns the MultivariateStatistics object containing all the data from both cubes in the overlapping ...
Definition: OverlapStatistics.h:111
Isis::Buffer::Line
int Line(const int index=0) const
Returns the line position associated with a shape buffer index.
Definition: Buffer.cpp:145
Isis::FileName::path
QString path() const
Returns the path of the file name.
Definition: FileName.cpp:103
Isis::Equalization::ImageAdjustment::addAverage
void addAverage(double average)
Definition: Equalization.h:163
Isis
This is free and unencumbered software released into the public domain.
Definition: Apollo.h:16

U.S. Department of the Interior | U.S. Geological Survey
ISIS | Privacy & Disclaimers | Astrogeology Research Program
To contact us, please post comments and questions on the USGS Astrogeology Discussion Board
To report a bug, or suggest a feature go to: ISIS Github
File Modified: 07/13/2023 15:11:00