Isis Developer Reference
AutoReg.h
Go to the documentation of this file.
1 #ifndef AutoReg_h
2 #define AutoReg_h
3 
9 /* SPDX-License-Identifier: CC0-1.0 */
10 
11 #include <vector>
12 
13 #include "Chip.h"
14 #include "Statistics.h"
15 
16 class QString;
17 
18 namespace Isis {
19  class AutoRegItem;
20  class Buffer;
21  class Pvl;
22 
167  class AutoReg {
168  public:
169  AutoReg(Pvl &pvl);
170 
171  virtual ~AutoReg();
172 
190  };
191 
198  Sobel
199  };
200 
202  inline Chip *PatternChip() {
203  return &p_patternChip;
204  };
205 
207  inline Chip *SearchChip() {
208  return &p_searchChip;
209  };
210 
212  inline Chip *FitChip() {
213  return &p_fitChip;
214  };
215 
218  if (p_gradientFilterType == None) {
219  return &p_patternChip;
220  }
221  else {
222  return &p_gradientPatternChip;
223  }
224  };
225 
228  if (p_gradientFilterType == None) {
229  return &p_searchChip;
230  }
231  else {
232  return &p_gradientSearchChip;
233  }
234  };
235 
238  return &p_reducedPatternChip;
239  };
240 
243  return &p_reducedSearchChip;
244  };
245 
247  inline Chip *ReducedFitChip() {
248  return &p_reducedFitChip;
249  };
250 
251  void SetSubPixelAccuracy(bool on);
252  void SetPatternValidPercent(const double percent);
253  void SetSubsearchValidPercent(const double percent);
254  void SetTolerance(double tolerance);
255  void SetChipInterpolator(const QString &interpolator);
256  void SetSurfaceModelWindowSize(int size);
257  void SetSurfaceModelDistanceTolerance(double distance);
258  void SetReductionFactor(int reductionFactor);
259  void SetPatternZScoreMinimum(double minimum);
260  void SetGradientFilterType(const QString &gradientFilterType);
261 
262  QString GradientFilterString() const;
263 
271  return p_subpixelAccuracy;
272  }
273 
276  return p_reduceFactor;
277  }
278 
280  double PatternValidPercent() const {
281  return p_patternValidPercent;
282  };
283 
285  double SubsearchValidPercent() const {
286  return p_subsearchValidPercent;
287  };
288 
290  inline double Tolerance() const {
291  return p_tolerance;
292  };
293 
295  double WindowSize() const {
296  return p_windowSize;
297  };
298 
300  double DistanceTolerance() const {
301  return p_distanceTolerance;
302  };
303 
310  void Distance(double &sampDistance, double &lineDistance) {
311  sampDistance = p_sampMovement;
312  lineDistance = p_lineMovement;
313  }
314 
316 
318  inline bool Success() const {
319  return (p_registrationStatus == SuccessPixel || p_registrationStatus == SuccessSubPixel);
320  }
321 
323  inline double GoodnessOfFit() const {
324  return p_goodnessOfFit;
325  };
326 
327  inline bool IsIdeal(double fit);
328 
330  inline double ChipSample() const {
331  return p_chipSample;
332  };
333 
335  inline double ChipLine() const {
336  return p_chipLine;
337  };
338 
340  inline double CubeSample() const {
341  return p_cubeSample;
342  };
343 
345  inline double CubeLine() const {
346  return p_cubeLine;
347  };
348 
350  double MinimumZScore() const {
351  return p_minimumPatternZScore;
352  };
353 
360  void ZScores(double &score1, double &score2) const {
361  score1 = p_zScoreMin;
362  score2 = p_zScoreMax;
363  }
364 
366 
370  virtual double MostLenientTolerance() {
371  return DBL_MIN;
372  }
373 
380  virtual QString AlgorithmName() const = 0;
381 
383 
385 
386  protected:
393  inline void SetChipSample(double sample) {
394  p_chipSample = sample;
395  };
396 
404  inline void SetChipLine(double line) {
405  p_chipLine = line;
406  };
407 
413  inline void SetGoodnessOfFit(double fit) {
414  p_bestFit = fit;
415  };
416 
417  virtual AutoReg::RegisterStatus Registration(Chip &sChip, Chip &pChip,
418  Chip &fChip, int startSamp, int startLine, int endSamp, int endLine,
419  int bestSamp, int bestLine);
420 
421  void Parse(Pvl &pvl);
422  virtual bool CompareFits(double fit1, double fit2);
423  bool SetSubpixelPosition(Chip &window);
424  Chip Reduce(Chip &chip, int reductionFactor);
425 
433  virtual double IdealFit() const = 0;
434 
447  virtual double MatchAlgorithm(Chip &pattern, Chip &subsearch) = 0;
448 
450 
461  virtual Pvl AlgorithmStatistics(Pvl &pvl) {
462  return (pvl);
463  }
464 
465  private:
471  void Match(Chip &sChip,
472  Chip &pChip,
473  Chip &fChip,
474  int startSamp,
475  int endSamp,
476  int startLine,
477  int endLine);
478  bool ComputeChipZScore(Chip &chip);
479  void Init();
480  void ApplyGradientFilter(Chip &chip);
481  void SobelGradient(Buffer &in, double &v);
482 
483  Chip p_patternChip;
484  Chip p_searchChip;
485  Chip p_fitChip;
486  Chip p_gradientSearchChip;
487  Chip p_gradientPatternChip;
488  Chip p_reducedPatternChip;
489  Chip p_reducedSearchChip;
490  Chip p_reducedFitChip;
491 
492  bool p_subpixelAccuracy;
493 
494  //TODO: remove these after control points are refactored.
495  int p_totalRegistrations;
496  int p_pixelSuccesses;
497  int p_subpixelSuccesses;
498  int p_patternChipNotEnoughValidDataCount;
499  int p_patternZScoreNotMetCount;
500  int p_fitChipNoDataCount;
501  int p_fitChipToleranceNotMetCount;
502  int p_surfaceModelNotEnoughValidDataCount;
503  int p_surfaceModelSolutionInvalidCount;
504  int p_surfaceModelDistanceInvalidCount;
505 
506  double p_zScoreMin;
507  double p_zScoreMax;
508 
509  double p_minimumPatternZScore;
510  double p_patternValidPercent;
511  double p_subsearchValidPercent;
512 
513  double p_chipSample;
514  double p_chipLine;
515  double p_cubeSample;
516  double p_cubeLine;
517  double p_goodnessOfFit;
518  double p_tolerance;
519 
520  int p_windowSize;
521  double p_distanceTolerance;
522 
523  double p_bestFit;
524  int p_bestSamp;
525  int p_bestLine;
526  double p_sampMovement;
527  double p_lineMovement;
528  int p_reduceFactor;
529  Isis::AutoReg::RegisterStatus p_registrationStatus;
530  AutoReg::GradientFilterType p_gradientFilterType;
531  };
532 };
533 
534 #endif
Isis::ValidMaximum
const double ValidMaximum
The maximum valid double value for Isis pixels.
Definition: SpecialPixel.h:122
Isis::AutoReg::GoodnessOfFit
double GoodnessOfFit() const
Return the goodness of fit of the match algorithm.
Definition: AutoReg.h:323
Isis::AutoReg::SetChipSample
void SetChipSample(double sample)
Sets the search chip subpixel sample that matches the pattern tack sample.
Definition: AutoReg.h:393
Isis::AutoReg::~AutoReg
virtual ~AutoReg()
Destroy AutoReg object.
Definition: AutoReg.cpp:153
FileName.h
Isis::AutoReg::ReductionFactor
int ReductionFactor()
Return the reduction factor.
Definition: AutoReg.h:275
Isis::Interpolator::BiLinearType
@ BiLinearType
Definition: Interpolator.h:43
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
Isis::Statistics::AddData
void AddData(const double *data, const unsigned int count)
Add an array of doubles to the accumulators and counters.
Definition: Statistics.cpp:141
Isis::AutoReg::MinimumZScore
double MinimumZScore() const
Return minimumPatternZScore.
Definition: AutoReg.h:350
Isis::PvlObject
Contains Pvl Groups and Pvl Objects.
Definition: PvlObject.h:61
Isis::AutoReg::Sobel
@ Sobel
Sobel gradient filter.
Definition: AutoReg.h:198
Plugin.h
Isis::Centroid
Selection class derived from the Pure Virtual Parent Class for all Selection classes.
Definition: Centroid.h:31
Isis::PvlKeyword
A single keyword-value pair.
Definition: PvlKeyword.h:82
Isis::AutoReg::None
@ None
default, no gradient filter
Definition: AutoReg.h:197
Isis::Interpolator::CubicConvolutionType
@ CubicConvolutionType
Definition: Interpolator.h:44
Isis::AutoReg::SetSurfaceModelWindowSize
void SetSurfaceModelWindowSize(int size)
Set the surface model window size.
Definition: AutoReg.cpp:480
Isis::AutoReg::ZScores
void ZScores(double &score1, double &score2) const
Return the ZScores of the pattern chip.
Definition: AutoReg.h:360
Histogram.h
Isis::AutoReg::SetSubpixelPosition
bool SetSubpixelPosition(Chip &window)
Set the search chip sample and line to subpixel values if possible.
Definition: AutoReg.cpp:1087
Isis::AutoReg::PatternZScoreNotMet
@ PatternZScoreNotMet
Pattern data max or min does not pass the z-score test.
Definition: AutoReg.h:188
Isis::AutoReg::AdaptiveAlgorithmFailed
@ AdaptiveAlgorithmFailed
Error occured in Adaptive algorithm.
Definition: AutoReg.h:189
Isis::AutoReg::Parse
void Parse(Pvl &pvl)
Initialize parameters in the AutoReg class using a PVL specification.
Definition: AutoReg.cpp:194
Isis::AutoReg::SetReductionFactor
void SetReductionFactor(int reductionFactor)
Set the reduction factor used to speed up the pattern matching algorithm.
Definition: AutoReg.cpp:521
Isis::AutoReg::SetGoodnessOfFit
void SetGoodnessOfFit(double fit)
Sets the goodness of fit for adaptive algorithms.
Definition: AutoReg.h:413
Isis::AutoReg::RegistrationSearchChip
Chip * RegistrationSearchChip()
Return pointer to search chip used in registration.
Definition: AutoReg.h:227
Isis::Chip::GetValue
double GetValue(int sample, int line)
Loads a Chip with a value.
Definition: Chip.h:145
Isis::Statistics::Maximum
double Maximum() const
Returns the absolute maximum double found in all data passed through the AddData method.
Definition: Statistics.cpp:403
Isis::PvlObject::hasGroup
bool hasGroup(const QString &name) const
Returns a boolean value based on whether the object has the specified group or not.
Definition: PvlObject.h:210
Isis::Statistics::Reset
void Reset()
Reset all accumulators and counters to zero.
Definition: Statistics.cpp:113
Isis::Chip::ChipSample
double ChipSample() const
Definition: Chip.h:219
Isis::AutoReg::Register
AutoReg::RegisterStatus Register()
Walk the pattern chip through the search chip to find the best registration.
Definition: AutoReg.cpp:587
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::AutoReg::SetSubsearchValidPercent
void SetSubsearchValidPercent(const double percent)
Set the amount of data in the search chip's subchip that must be valid.
Definition: AutoReg.cpp:367
Isis::AutoReg::SearchChip
Chip * SearchChip()
Return pointer to search chip.
Definition: AutoReg.h:207
Isis::AutoReg::GradientFilterString
QString GradientFilterString() const
Definition: AutoReg.cpp:289
Isis::AutoReg::AutoReg
AutoReg(Pvl &pvl)
Create AutoReg object.
Definition: AutoReg.cpp:66
Isis::Chip::CubeSample
double CubeSample() const
Definition: Chip.h:203
Isis::Chip::Extract
Chip Extract(int samples, int lines, int samp, int line)
Extract a sub-chip from a chip.
Definition: Chip.cpp:727
Isis::AutoReg::AlgorithmName
virtual QString AlgorithmName() const =0
Returns the name of the algorithm.
Isis::Chip::SetValue
void SetValue(int sample, int line, const double &value)
Sets a value in the chip.
Definition: Chip.h:126
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::AutoReg::ChipSample
double ChipSample() const
Return the search chip sample that best matched.
Definition: AutoReg.h:330
Isis::AutoReg
Auto Registration class.
Definition: AutoReg.h:167
Isis::AutoReg::MatchAlgorithm
virtual double MatchAlgorithm(Chip &pattern, Chip &subsearch)=0
Given two identically sized chips return a double that indicates how well they match.
Isis::AutoReg::SetGradientFilterType
void SetGradientFilterType(const QString &gradientFilterType)
Set the gradient filter type to be applied to the search and pattern chips.
Definition: AutoReg.cpp:273
Isis::AutoReg::ReducedSearchChip
Chip * ReducedSearchChip()
Return pointer to reduced search chip.
Definition: AutoReg.h:242
Isis::Buffer
Buffer for reading and writing cube data.
Definition: Buffer.h:53
Isis::AutoReg::UpdatedTemplate
PvlGroup UpdatedTemplate()
Returns a PvlGroup containing the PvlKeywords of the parameters this object was most recently run wit...
Definition: AutoReg.cpp:1289
Isis::AutoReg::RegTemplate
PvlGroup RegTemplate()
This function returns the keywords that this object was created from.
Definition: AutoReg.cpp:1216
Isis::Chip::TackSample
int TackSample() const
This method returns a chip's fixed tack sample; the middle of the chip.
Definition: Chip.h:176
Isis::AutoReg::SetTolerance
void SetTolerance(double tolerance)
Set the tolerance for an acceptable goodness of fit.
Definition: AutoReg.cpp:416
Isis::AutoReg::SurfaceModelSolutionInvalid
@ SurfaceModelSolutionInvalid
Could not model surface for sub-pixel accuracy.
Definition: AutoReg.h:186
Isis::Chip::CubeLine
double CubeLine() const
Definition: Chip.h:210
Buffer.h
Isis::Chip::Lines
int Lines() const
Definition: Chip.h:106
Isis::AutoReg::SubPixelAccuracy
bool SubPixelAccuracy()
Return whether this object will attempt to register to whole or sub-pixel accuracy.
Definition: AutoReg.h:270
Isis::AutoReg::SuccessSubPixel
@ SuccessSubPixel
Success registering to sub-pixel accuracy.
Definition: AutoReg.h:181
PixelType.h
Isis::PvlGroup
Contains multiple PvlContainers.
Definition: PvlGroup.h:41
Isis::AutoReg::IdealFit
virtual double IdealFit() const =0
Returns the ideal (perfect) fit that could be returned by the MatchAlgorithm.
Pvl.h
Isis::AutoReg::PatternChipNotEnoughValidData
@ PatternChipNotEnoughValidData
Not enough valid data in pattern chip.
Definition: AutoReg.h:182
_FILEINFO_
#define _FILEINFO_
Macro for the filename and line number.
Definition: IException.h:24
Isis::AutoReg::MostLenientTolerance
virtual double MostLenientTolerance()
Minimum tolerance specific to algorithm.
Definition: AutoReg.h:370
Isis::Chip::TackLine
int TackLine() const
This method returns a chip's fixed tack line; the middle of the chip.
Definition: Chip.h:187
Isis::Interpolator::interpType
interpType
The interpolator type, including: None, Nearest Neighbor, BiLinear or Cubic Convultion.
Definition: Interpolator.h:40
Isis::Chip::ChipLine
double ChipLine() const
Definition: Chip.h:226
Isis::Statistics::Minimum
double Minimum() const
Returns the absolute minimum double found in all data passed through the AddData method.
Definition: Statistics.cpp:382
Isis::AutoReg::CubeSample
double CubeSample() const
Return the search chip cube sample that best matched.
Definition: AutoReg.h:340
Isis::AutoReg::WindowSize
double WindowSize() const
Return window size.
Definition: AutoReg.h:295
Isis::AutoReg::Reduce
Chip Reduce(Chip &chip, int reductionFactor)
This method reduces the given chip by the given reduction factor.
Definition: AutoReg.cpp:539
Isis::AutoReg::IsIdeal
bool IsIdeal(double fit)
Returns true if the fit parameter is arbitrarily close to the ideal fit value.
Definition: AutoReg.cpp:1162
Isis::AutoReg::PatternChip
Chip * PatternChip()
Return pointer to pattern chip.
Definition: AutoReg.h:202
Isis::Reduce
Reduce the pixel dimensions of an image.
Definition: Reduce.h:47
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
Isis::AutoReg::Registration
virtual AutoReg::RegisterStatus Registration(Chip &sChip, Chip &pChip, Chip &fChip, int startSamp, int startLine, int endSamp, int endLine, int bestSamp, int bestLine)
Performs matching between the pattern and search at both whole-pixel and subpixel levels.
Definition: AutoReg.cpp:811
LeastSquares.h
Isis::AutoReg::CompareFits
virtual bool CompareFits(double fit1, double fit2)
This virtual method must return if the 1st fit is equal to or better than the second fit.
Definition: AutoReg.cpp:1152
Isis::Statistics::ZScore
double ZScore(const double value) const
This method returns the better of the z-score of the given value.
Definition: Statistics.cpp:649
Isis::PvlContainer::fileName
QString fileName() const
Returns the filename used to initialise the Pvl object.
Definition: PvlContainer.h:232
Isis::AutoReg::SurfaceModelDistanceInvalid
@ SurfaceModelDistanceInvalid
Surface model moves registration more than one pixel.
Definition: AutoReg.h:187
Isis::AutoReg::ReducedFitChip
Chip * ReducedFitChip()
Return pointer to reduced fit chip.
Definition: AutoReg.h:247
Isis::AutoReg::PatternValidPercent
double PatternValidPercent() const
Return pattern chip valid percent. The default value is.
Definition: AutoReg.h:280
Isis::IException
Isis exception class.
Definition: IException.h:91
Isis::AutoReg::RegisterStatus
RegisterStatus
Enumeration of the Register() method's return status.
Definition: AutoReg.h:179
Isis::AutoReg::Tolerance
double Tolerance() const
Return match algorithm tolerance.
Definition: AutoReg.h:290
Isis::Null
const double Null
Value for an Isis Null pixel.
Definition: SpecialPixel.h:95
Isis::AutoReg::p_template
PvlObject p_template
AutoRegistration object that created this projection.
Definition: AutoReg.h:449
Isis::AutoReg::RegistrationStatistics
Pvl RegistrationStatistics()
This returns the cumulative registration statistics.
Definition: AutoReg.cpp:1177
Isis::PvlObject::addGroup
void addGroup(const Isis::PvlGroup &group)
Add a group to the object.
Definition: PvlObject.h:186
Isis::AutoReg::FitChipToleranceNotMet
@ FitChipToleranceNotMet
Goodness of fit tolerance not satisfied.
Definition: AutoReg.h:184
Isis::Statistics::Average
double Average() const
Computes and returns the average.
Definition: Statistics.cpp:300
Isis::AutoReg::ChipLine
double ChipLine() const
Return the search chip line that best matched.
Definition: AutoReg.h:335
Matrix.h
Isis::AutoReg::FitChip
Chip * FitChip()
Return pointer to fit chip.
Definition: AutoReg.h:212
Statistics.h
IException.h
Isis::ValidMinimum
const double ValidMinimum
The minimum valid double value for Isis pixels.
Definition: SpecialPixel.h:87
Isis::Chip::IsValid
bool IsValid(int sample, int line)
Definition: Chip.h:240
Centroid.h
std
Namespace for the standard library.
Isis::AutoReg::SurfaceModelNotEnoughValidData
@ SurfaceModelNotEnoughValidData
Not enough points to fit a surface model for sub-pixel accuracy.
Definition: AutoReg.h:185
Isis::Centroid::setDNRange
int setDNRange(double minimumDN, double maximumDN)
Set the range of the DNs.
Definition: Centroid.cpp:126
Isis::AutoReg::ReducedPatternChip
Chip * ReducedPatternChip()
Return pointer to reduced pattern chip.
Definition: AutoReg.h:237
Isis::AutoReg::SetSubPixelAccuracy
void SetSubPixelAccuracy(bool on)
If the sub-pixel accuracy is enabled, the Register() method will attempt to match the pattern chip to...
Definition: AutoReg.cpp:312
Isis::AutoReg::FitChipNoData
@ FitChipNoData
Fit chip did not have any valid data.
Definition: AutoReg.h:183
Isis::Chip
A small chip of data used for pattern matching.
Definition: Chip.h:86
Isis::Chip::Samples
int Samples() const
Definition: Chip.h:99
Isis::Centroid::select
int select(Chip *inputChip, Chip *selectionChip)
Given a range of DN this function creates a biniary chip for all continuous pixels that have the DN w...
Definition: Centroid.cpp:30
Isis::AutoReg::CubeLine
double CubeLine() const
Return the search chip cube line that best matched.
Definition: AutoReg.h:345
Isis::Selection::centerOfMassWeighted
int centerOfMassWeighted(Chip *inputChip, Chip *selectionChip, double *sample, double *line)
Definition: Selection.cpp:189
Isis::AutoReg::Distance
void Distance(double &sampDistance, double &lineDistance)
Return the distance point moved.
Definition: AutoReg.h:310
Isis::IString
Adds specific functionality to C++ strings.
Definition: IString.h:165
Isis::Chip::SetChipPosition
void SetChipPosition(const double sample, const double line)
Compute the position of the cube given a chip coordinate.
Definition: Chip.cpp:643
Isis::AutoReg::AlgorithmStatistics
virtual Pvl AlgorithmStatistics(Pvl &pvl)
Provide (adaptive) algorithms a chance to report results.
Definition: AutoReg.h:461
Isis::AutoReg::SetChipLine
void SetChipLine(double line)
Sets the search chip subpixel line that matches the pattern tack line.
Definition: AutoReg.h:404
Isis::AutoReg::SubsearchValidPercent
double SubsearchValidPercent() const
Return subsearch chip valid percent.
Definition: AutoReg.h:285
Interpolator.h
PolynomialBivariate.h
Isis::AutoReg::SetPatternZScoreMinimum
void SetPatternZScoreMinimum(double minimum)
Set the minimum pattern zscore.
Definition: AutoReg.cpp:394
Isis::AutoReg::Success
bool Success() const
Return whether the match algorithm succeeded or not.
Definition: AutoReg.h:318
Isis::Interpolator::NearestNeighborType
@ NearestNeighborType
Definition: Interpolator.h:42
Isis::AutoReg::SetChipInterpolator
void SetChipInterpolator(const QString &interpolator)
Sets the Chip class interpolator type to be used to load pattern and search chips.
Definition: AutoReg.cpp:440
AutoReg.h
Isis::AutoReg::SetPatternValidPercent
void SetPatternValidPercent(const double percent)
Set the amount of data in the pattern chip that must be valid.
Definition: AutoReg.cpp:339
Isis::AutoReg::SuccessPixel
@ SuccessPixel
Success registering to whole pixel.
Definition: AutoReg.h:180
Isis
This is free and unencumbered software released into the public domain.
Definition: Apollo.h:16
Isis::AutoReg::RegistrationPatternChip
Chip * RegistrationPatternChip()
Return pointer to pattern chip used in registration.
Definition: AutoReg.h:217
Chip.h
Isis::AutoReg::SetSurfaceModelDistanceTolerance
void SetSurfaceModelDistanceTolerance(double distance)
Set a distance the surface model solution is allowed to move away from the best whole pixel fit in th...
Definition: AutoReg.cpp:501
Isis::AutoReg::GradientFilterType
GradientFilterType
Enumeration of the different types of gradient filters that can be applied to the pattern and search ...
Definition: AutoReg.h:196
Isis::AutoReg::DistanceTolerance
double DistanceTolerance() const
Return distance tolerance.
Definition: AutoReg.h:300
Isis::None
@ None
Definition: PixelType.h:28