Isis 3 Programmer Reference
|
This class can be used to calculate, read in, and/or apply equalization statistics for a list of files. More...
#include <Equalization.h>
Classes | |
class | ApplyFunctor |
This class is used as a functor to apply adjustments (equalize) to an image. More... | |
class | CalculateFunctor |
This class is used as a functor calculate image statistics. More... | |
class | ImageAdjustment |
Public Member Functions | |
Equalization (OverlapNormalization::SolutionType sType, QString fromListName) | |
Constructs an Equalization with the specified solution type and loads input images. More... | |
virtual | ~Equalization () |
Destructor. More... | |
void | addHolds (QString holdListName) |
Adds a list of images to be held in the equalization. More... | |
void | calculateStatistics (double samplingPercent, int mincnt, bool wtopt, LeastSquares::SolveMethod methodType) |
Calculates the image and overlap statistics, and then determines corrective factors if possible. More... | |
void | recalculateStatistics (QString inStatsFileName) |
Recalculates statistics for any new input images. More... | |
void | importStatistics (QString instatsFileName) |
Imports statistics for applying correction. More... | |
void | applyCorrection (QString toListName) |
Equalizes the input images. More... | |
PvlGroup | getResults () |
Returns general information about the equalization. More... | |
void | write (QString outstatsFileName) |
Write the equalization information (results) to a file. More... | |
double | evaluate (double dn, int imageIndex, int bandIndex) const |
Protected Member Functions | |
Equalization () | |
Default constructor. More... | |
void | loadInputs (QString fromListName) |
Loads in the input images. More... | |
void | setInput (int index, QString value) |
const FileList & | getInputs () const |
void | calculateBandStatistics () |
Calculates the image statistics on a band-by-band basis. More... | |
void | calculateOverlapStatistics () |
Calculates the overlap statistics for each pair of input images. More... | |
virtual void | fillOutList (FileList &outList, QString toListName) |
virtual void | errorCheck (QString fromListName) |
Checks that the input images have the same mapping groups and same number of bands. More... | |
void | generateOutputs (FileList &outList) |
Generates the names of the equalized cubes if no output list is provided. More... | |
void | loadOutputs (FileList &outList, QString toListName) |
Checks that the output image list is correct. More... | |
void | loadHolds (OverlapNormalization *oNorm) |
void | setResults () |
Creates the results pvl containing statistics and corrective factors. More... | |
void | clearAdjustments () |
Frees image adjustments. More... | |
void | addAdjustment (ImageAdjustment *adjustment) |
Adds an image adjustment. More... | |
void | clearNormalizations () |
Frees overlap normalizations. More... | |
void | clearOverlapStatistics () |
Frees overlap statistics. More... | |
void | addValid (int count) |
Increments the number of valid overlaps by a given amount. More... | |
void | addInvalid (int count) |
Increments the number of invalid overlaps by a given amount. More... | |
void | fromPvl (const PvlObject &inStats) |
Loads a previous Equalization state from an input pvl object. More... | |
void | setSolved (bool solved) |
Sets solved state indicating if OverlapNormalizations (corrective factors) were solved. More... | |
bool | isSolved () const |
Indicates if the corrective factors were solved. More... | |
Private Member Functions | |
void | init () |
Initializes member variables to default values. More... | |
QVector< int > | validateInputStatistics (QString instatsFileName) |
Validates the input statistics pvl file. More... | |
Private Attributes | |
bool | m_normsSolved |
Indicates if corrective factors were solved. More... | |
bool | m_recalculating |
Indicates if recalculating with loaded statistics. More... | |
bool | m_wtopt |
Whether or not overlaps should be weighted. More... | |
FileList | m_imageList |
double | m_samplingPercent |
Percentage of the lines to consider when gathering cube and overlap statistics (process-by-line) More... | |
int | m_validCnt |
Number of valid overlaps. More... | |
int | m_invalidCnt |
Number of invalid overlaps. More... | |
int | m_mincnt |
Minimum number of pixels for an overlap to be considered valid. More... | |
int | m_maxCube |
Number of input images. More... | |
int | m_maxBand |
Number of bands in each input image. More... | |
QStringList | m_badFiles |
List of image names that don't overlap. More... | |
vector< ImageAdjustment * > | m_adjustments |
vector< int > | m_holdIndices |
Indices of images being held. More... | |
vector< bool > | m_doesOverlapList |
Which images have a valid overlap. More... | |
vector< bool > | m_alreadyCalculated |
Which images that have statistics already calculated. More... | |
vector< OverlapNormalization * > | m_overlapNorms |
Normalization data for input images. More... | |
vector< OverlapStatistics * > | m_overlapStats |
Calculated overlap statistics. More... | |
OverlapNormalization::SolutionType | m_sType |
The normalization solution type for solving normalizations (offsets, gains, or both) More... | |
LeastSquares::SolveMethod | m_lsqMethod |
Least squares method for solving normalization correcitve factors. More... | |
Pvl * | m_results |
Calculation results and normalization corrective factors (if solved) More... | |
This class can be used to calculate, read in, and/or apply equalization statistics for a list of files.
Code example for calculating statistics, writing results to a Pvl, writing results to a file, and applying results: Equalization eq(inputCubeListFileName); // calculate eq.addHolds(holdListFileName); eq.calculateStatistics(samplingPercent, mincnt, wtopt, sType, methodType); // write to PvlGroup PvlGroup resultsGroup = eq.getResults(); // write to file eq.write(outputStatisticsFileName); // apply corrections to cubes in input list eq.applyCorrection();
Code example for importing statistics and applying them. Equalization eq(listFileName); eq.importStatistics(inputStatisticsFileName); // create new output cubes from equalized cube list and apply corrections eq.applyCorrection(equalizedCubeListFileName);
This class contains the classes ImageAdjustment, CalculateFunctor, and ApplyFunctor.
2012-04-26 Jeannie Backer - Added includes to Filelist, Pvl, PvlGroup, and Statistics classes to the implementation file.
2013-01-29 Jeannie Backer - Added input parameter to calculateStatistics() method. Added error catch to improve thrown message. Fixes #962.
2013-01-29 Jeannie Backer - Fixed bugs from previous checkin. Improved test coverage by more than 23% for each coverage type.
2013-02-06 Steven Lambright - Made the OverlapNormalization::SolutionType into a member required upon instantiation in order to support gain adjustments without normalization, which uses a separate formula in evaluate() instead of just modifying how statistics are computed. Implemented the GainsWithoutNormalization solution type. References #911.
2016-07-15 Ian Humphrey - Added recalculateStatistics() method to allow for statistics to be calculated only for new input images, using previously calculated statistics for the rest of the input images. Added fromPvl() method to unserialize Equalization data from a pvl object. Refactored calculateStatistics() to separate functionality and allow for statistics recalculation. Added methods to properly free some of the vector members. Added new members to help with unserialization via the fromPvl() method and help with recalulating overlap statistics. Added API documentation. Updated unit test. Fixes #2282.
2017-05-19 Christopher Combs - Modified uniTest.cpp: truncated paths of NonOverlaps in output PVL on lines 100 and 123 to allow the test to pass when not using the standard data areas. Added ReportError method to remove paths when outputting errors. Fixes #4738.
Definition at line 138 of file Equalization.h.
Isis::Equalization::Equalization | ( | OverlapNormalization::SolutionType | sType, |
QString | fromListName | ||
) |
Constructs an Equalization with the specified solution type and loads input images.
sType | An integer value corresponding to the enumerated value of the OverlapNormalization::SolutionType to be used. |
fromListName | Name of the input image list. |
Definition at line 46 of file Equalization.cpp.
|
virtual |
Destructor.
Definition at line 57 of file Equalization.cpp.
|
protected |
Default constructor.
Definition at line 34 of file Equalization.cpp.
|
protected |
Adds an image adjustment.
This method adds an image adjustment to be used for equalizing.
adjustment | - ImageAdjustment pointer to add. |
Definition at line 713 of file Equalization.cpp.
void Isis::Equalization::addHolds | ( | QString | holdListName | ) |
Adds a list of images to be held in the equalization.
holdListName | Name of the file containing a list of images to hold. |
IException::User | "The list of identifiers to be held must be less than or equal to the total number of identifiers." |
IException::User | "The hold list file does not match a file in the from list" |
Definition at line 78 of file Equalization.cpp.
References _FILEINFO_, and Isis::FileList::read().
|
protected |
Increments the number of invalid overlaps by a given amount.
count | An integer value to increment the internally stored number of invalid overlaps |
Definition at line 755 of file Equalization.cpp.
|
protected |
Increments the number of valid overlaps by a given amount.
count | An integer value to increment the internally stored number of valid overlaps |
Definition at line 745 of file Equalization.cpp.
void Isis::Equalization::applyCorrection | ( | QString | toListName = "" | ) |
Equalizes the input images.
This method applies corretive factors to the input images, thereby equalizing them.
toListName | (Default value is "") List of cube names to save the equalized images as |
IException::User | "Corrective factors have not yet been determined. Fix any " "non-overlapping images and recalculate the image statistics." |
Definition at line 461 of file Equalization.cpp.
References _FILEINFO_, Isis::Cube::bandCount(), Isis::ProcessByBrick::EndProcess(), Isis::Cube::lineCount(), Isis::ProcessByLine::ProcessCube(), Isis::Process::Progress(), Isis::Cube::sampleCount(), Isis::ProcessByLine::SetInputCube(), Isis::ProcessByBrick::SetOutputCube(), Isis::Progress::SetText(), and Isis::toString().
|
protected |
Calculates the image statistics on a band-by-band basis.
This method calculates statistics by band for the input images. Each set of band statistics is used to initialize the OverlapNormalizations that will be used to determine gains and offsets for equalization.
Definition at line 206 of file Equalization.cpp.
References Isis::ProcessByBrick::EndProcess(), Isis::ProcessByLine::ProcessCubeInPlace(), Isis::Process::Progress(), Isis::ProcessByLine::SetInputCube(), Isis::Progress::SetText(), and Isis::toString().
|
protected |
Calculates the overlap statistics for each pair of input images.
This method calculates any overlap statistics that have not been previously calculated for the input images.
Definition at line 246 of file Equalization.cpp.
References Isis::OverlapStatistics::GetMStats(), Isis::OverlapStatistics::HasOverlap(), Isis::Cube::open(), Isis::OverlapStatistics::SetMincount(), Isis::toString(), Isis::MultivariateStatistics::ValidPixels(), Isis::MultivariateStatistics::X(), and Isis::MultivariateStatistics::Y().
void Isis::Equalization::calculateStatistics | ( | double | percent, |
int | mincnt, | ||
bool | wtopt, | ||
LeastSquares::SolveMethod | methodType | ||
) |
Calculates the image and overlap statistics, and then determines corrective factors if possible.
This method calculates image statistics on a band-by-band basis and calculates overlap statistics for the input images. Overlaps are considered valid if the number of valid pixels in the overlapping area is greater than or equal to the provided mincnt parameter. Corrective factors will only be determined if all of the input images have at least one valid overlap.
percent | Percentage of the lines to consider when gathering overall cube statistics and overlap statistics |
mincnt | Minimum number of points in overlapping area required to be used in the solution |
wtopt | Indicates whether overlaps should be weighted |
methodType | An integer value corresponding to the enumerated value of the desired LeastSquares::SolveMethod to be used. |
IException::User | "There are input images that do not overlap with enough valid pixels." "See application log or Nonoverlaps keyword in output statistics file" |
IException::Unknown | "Calculation for equalization statistics failed. Gain = 0." |
IException::Unknown | "Unable to calculate the equalization statistics. You may " "want to try another LeastSquares::SolveMethod." |
Definition at line 130 of file Equalization.cpp.
References _FILEINFO_.
|
protected |
Frees image adjustments.
Definition at line 698 of file Equalization.cpp.
|
protected |
Frees overlap normalizations.
Definition at line 721 of file Equalization.cpp.
|
protected |
Frees overlap statistics.
Definition at line 732 of file Equalization.cpp.
|
protectedvirtual |
Checks that the input images have the same mapping groups and same number of bands.
IException::User | "Number of bands do not match between cubes" |
IException::User | "Mapping groups do not match between cubes" |
Reimplemented in Isis::HiEqualization.
Definition at line 615 of file Equalization.cpp.
References _FILEINFO_, Isis::Cube::bandCount(), Isis::Cube::open(), Isis::Cube::projection(), and Isis::toString().
|
protected |
Loads a previous Equalization state from an input pvl object.
This method will unserialize Equalization data from an input pvl, obtaining any previously calculated overlap statistics and corrective factors (if solved).
const | PvlObject& Input pvl object containing previous Equalization state |
Definition at line 768 of file Equalization.cpp.
References Isis::OverlapStatistics::Bands(), Isis::PvlObject::beginObject(), Isis::PvlObject::endObject(), Isis::OverlapStatistics::FileNameX(), Isis::OverlapStatistics::FileNameY(), Isis::PvlObject::findGroup(), Isis::PvlObject::findObject(), Isis::OverlapStatistics::GetMStats(), Isis::MultivariateStatistics::ValidPixels(), Isis::MultivariateStatistics::X(), and Isis::MultivariateStatistics::Y().
|
protected |
Generates the names of the equalized cubes if no output list is provided.
Definition at line 649 of file Equalization.cpp.
References Isis::FileName::baseName(), Isis::FileName::extension(), and Isis::FileName::path().
PvlGroup Isis::Equalization::getResults | ( | ) |
Returns general information about the equalization.
This method returns general information about the equalization, including number of valid and invalid overlaps, any non-overlapping images, the LeastSquares solution type, the type of equalization adjustmnet, and corrective factors (if solved).
Definition at line 514 of file Equalization.cpp.
References Isis::toString().
void Isis::Equalization::importStatistics | ( | QString | instatsFileName | ) |
Imports statistics for applying correction.
This method obtains corrective factors from an input statistics pvl file so that input images can be equalized. These corrective factors are obtained from Normalization groups within the EqualizationInformation object in the input pvl.
instatsFileName | Name of the input statistics pvl file |
Definition at line 412 of file Equalization.cpp.
References Isis::PvlObject::findGroup(), Isis::PvlObject::findObject(), Isis::PvlObject::group(), Isis::PvlContainer::hasKeyword(), Isis::PvlContainer::keywords(), and Isis::toDouble().
|
private |
Initializes member variables to default values.
Definition at line 882 of file Equalization.cpp.
|
protected |
Indicates if the corrective factors were solved.
Definition at line 874 of file Equalization.cpp.
|
protected |
Loads in the input images.
This method loads in the input images contained in the provided file name.
fromListName | Name of the file containing the input images |
IException::User | "The input file must contain at least 2 file names" |
Definition at line 567 of file Equalization.cpp.
References _FILEINFO_, Isis::Cube::bandCount(), Isis::Cube::open(), and Isis::toString().
|
protected |
Checks that the output image list is correct.
IException::User | "Each input file in the FROM LIST must have a corresponding output file in the TO LIST." |
IException::User | "The to list file has the same name as its corresponding from list fil." |
Definition at line 667 of file Equalization.cpp.
References _FILEINFO_, Isis::FileList::read(), and Isis::toString().
void Isis::Equalization::recalculateStatistics | ( | QString | instatsFileName | ) |
Recalculates statistics for any new input images.
This method loads a previous Equalization state from an input pvl file and calculates overlap statistics for any new input images. Corrective factors will also be calculated if there are no non-overlapping images and there are enough valid overlaps.
instatsFileName | Name of input pvl file containing previously calculated statistics |
Definition at line 393 of file Equalization.cpp.
|
protected |
Creates the results pvl containing statistics and corrective factors.
This method creates the results pvl containing what is essentially serialized Equalization data, which can be unserialized via the fromPvl() method. Note that the overlap statistics in the results pvl may not be ordered if recalculating statistics with a modified input image list.
Definition at line 318 of file Equalization.cpp.
References Isis::PvlObject::addGroup(), Isis::PvlObject::addObject(), and Isis::toString().
|
protected |
Sets solved state indicating if OverlapNormalizations (corrective factors) were solved.
bool | Indiciates if corrective factors were solved |
Definition at line 864 of file Equalization.cpp.
|
private |
Validates the input statistics pvl file.
This method determines if each input image has a corresponding set of corrective factors (i.e. a normalization group). Throws an exception if this condition is not met.
instatsFileName | Name of the input statistics pvl file |
IException::User | "Each input file in the FROM LIST must have a corresponding input file in the INPUT STATISTICS." |
IException::User | "The from list file does not have any corresponding file in the stats list." |
Definition at line 921 of file Equalization.cpp.
References _FILEINFO_, Isis::PvlObject::findObject(), Isis::PvlObject::group(), and Isis::PvlObject::groups().
void Isis::Equalization::write | ( | QString | outstatsFileName | ) |
Write the equalization information (results) to a file.
outstatsFileName | The name of the file to write the results to |
Definition at line 547 of file Equalization.cpp.
|
private |
Which images that have statistics already calculated.
Definition at line 329 of file Equalization.h.
|
private |
List of image names that don't overlap.
Definition at line 324 of file Equalization.h.
|
private |
Which images have a valid overlap.
Definition at line 328 of file Equalization.h.
|
private |
Indices of images being held.
Definition at line 327 of file Equalization.h.
|
private |
Number of invalid overlaps.
Definition at line 318 of file Equalization.h.
|
private |
Least squares method for solving normalization correcitve factors.
Definition at line 336 of file Equalization.h.
|
private |
Number of bands in each input image.
Definition at line 322 of file Equalization.h.
|
private |
Number of input images.
Definition at line 321 of file Equalization.h.
|
private |
Minimum number of pixels for an overlap to be considered valid.
Definition at line 319 of file Equalization.h.
|
private |
Indicates if corrective factors were solved.
Definition at line 308 of file Equalization.h.
|
private |
Normalization data for input images.
Definition at line 330 of file Equalization.h.
|
private |
Calculated overlap statistics.
Definition at line 331 of file Equalization.h.
|
private |
Indicates if recalculating with loaded statistics.
Definition at line 309 of file Equalization.h.
|
private |
Calculation results and normalization corrective factors (if solved)
Definition at line 338 of file Equalization.h.
|
private |
Percentage of the lines to consider when gathering cube and overlap statistics (process-by-line)
Definition at line 314 of file Equalization.h.
|
private |
The normalization solution type for solving normalizations (offsets, gains, or both)
Definition at line 334 of file Equalization.h.
|
private |
Number of valid overlaps.
Definition at line 317 of file Equalization.h.
|
private |
Whether or not overlaps should be weighted.
Definition at line 310 of file Equalization.h.