Isis 3 Programmer Reference
AutoReg.h
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
16class QString;
17
18namespace 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
191
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
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 {
282 };
283
285 double SubsearchValidPercent() const {
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 {
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 {
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
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
491
493
494 //TODO: remove these after control points are refactored.
505
506 double p_zScoreMin;
507 double p_zScoreMax;
508
512
514 double p_chipLine;
516 double p_cubeLine;
518 double p_tolerance;
519
522
523 double p_bestFit;
531 };
532};
533
534#endif
Auto Registration class.
Definition AutoReg.h:167
void ZScores(double &score1, double &score2) const
Return the ZScores of the pattern chip.
Definition AutoReg.h:360
Isis::AutoReg::RegisterStatus p_registrationStatus
Registration status to be returned by Register().
Definition AutoReg.h:529
double p_bestFit
Goodness of fit for adaptive algorithms.
Definition AutoReg.h:523
double CubeLine() const
Return the search chip cube line that best matched.
Definition AutoReg.h:345
RegisterStatus
Enumeration of the Register() method's return status.
Definition AutoReg.h:179
@ PatternChipNotEnoughValidData
Not enough valid data in pattern chip.
Definition AutoReg.h:182
@ SuccessPixel
Success registering to whole pixel.
Definition AutoReg.h:180
@ PatternZScoreNotMet
Pattern data max or min does not pass the z-score test.
Definition AutoReg.h:188
@ SurfaceModelSolutionInvalid
Could not model surface for sub-pixel accuracy.
Definition AutoReg.h:186
@ SuccessSubPixel
Success registering to sub-pixel accuracy.
Definition AutoReg.h:181
@ AdaptiveAlgorithmFailed
Error occured in Adaptive algorithm.
Definition AutoReg.h:189
@ FitChipToleranceNotMet
Goodness of fit tolerance not satisfied.
Definition AutoReg.h:184
@ FitChipNoData
Fit chip did not have any valid data.
Definition AutoReg.h:183
@ SurfaceModelDistanceInvalid
Surface model moves registration more than one pixel.
Definition AutoReg.h:187
@ SurfaceModelNotEnoughValidData
Not enough points to fit a surface model for sub-pixel accuracy.
Definition AutoReg.h:185
double WindowSize() const
Return window size.
Definition AutoReg.h:295
GradientFilterType
Enumeration of the different types of gradient filters that can be applied to the pattern and search ...
Definition AutoReg.h:196
@ Sobel
Sobel gradient filter.
Definition AutoReg.h:198
@ None
default, no gradient filter
Definition AutoReg.h:197
int p_totalRegistrations
Registration Statistics Total keyword.
Definition AutoReg.h:495
bool p_subpixelAccuracy
Indicates whether sub-pixel accuracy is enabled. Default is true.
Definition AutoReg.h:492
double p_zScoreMax
Second Z-Score of pattern chip.
Definition AutoReg.h:507
double p_lineMovement
The number of lines the point moved.
Definition AutoReg.h:527
PvlGroup UpdatedTemplate()
Returns a PvlGroup containing the PvlKeywords of the parameters this object was most recently run wit...
Definition AutoReg.cpp:1289
void Init()
Initialize AutoReg object private variables.
Definition AutoReg.cpp:114
double GoodnessOfFit() const
Return the goodness of fit of the match algorithm.
Definition AutoReg.h:323
void Match(Chip &sChip, Chip &pChip, Chip &fChip, int startSamp, int endSamp, int startLine, int endLine)
Empty copy constructor.
Definition AutoReg.cpp:1031
Chip * RegistrationPatternChip()
Return pointer to pattern chip used in registration.
Definition AutoReg.h:217
void SetChipLine(double line)
Sets the search chip subpixel line that matches the pattern tack line.
Definition AutoReg.h:404
int p_fitChipNoDataCount
Registration statistics FitChipNoData keyword.
Definition AutoReg.h:500
PvlObject p_template
AutoRegistration object that created this projection.
Definition AutoReg.h:449
int p_patternChipNotEnoughValidDataCount
Registration statistics PatternNotEnoughValidData keyword.
Definition AutoReg.h:498
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
Chip p_searchChip
Chip to be searched for best registration.
Definition AutoReg.h:484
AutoReg(Pvl &pvl)
Create AutoReg object.
Definition AutoReg.cpp:66
Chip * ReducedPatternChip()
Return pointer to reduced pattern chip.
Definition AutoReg.h:237
void Parse(Pvl &pvl)
Initialize parameters in the AutoReg class using a PVL specification.
Definition AutoReg.cpp:194
bool IsIdeal(double fit)
Returns true if the fit parameter is arbitrarily close to the ideal fit value.
Definition AutoReg.cpp:1162
void ApplyGradientFilter(Chip &chip)
Run a gradient filter over the chip.
Definition AutoReg.cpp:927
int p_pixelSuccesses
Registration statistics Success keyword.
Definition AutoReg.h:496
Chip p_reducedFitChip
Fit Chip with reduction factor.
Definition AutoReg.h:490
int ReductionFactor()
Return the reduction factor.
Definition AutoReg.h:275
void SetSubsearchValidPercent(const double percent)
Set the amount of data in the search chip's subchip that must be valid.
Definition AutoReg.cpp:367
PvlGroup RegTemplate()
This function returns the keywords that this object was created from.
Definition AutoReg.cpp:1216
void SetChipInterpolator(const QString &interpolator)
Sets the Chip class interpolator type to be used to load pattern and search chips.
Definition AutoReg.cpp:440
double DistanceTolerance() const
Return distance tolerance.
Definition AutoReg.h:300
int p_surfaceModelDistanceInvalidCount
Registration statistics SurfaceModelDistanceInvalid keyword.
Definition AutoReg.h:504
double p_cubeSample
Cube sample.
Definition AutoReg.h:515
AutoReg::GradientFilterType p_gradientFilterType
Type of gradient filter to use before matching.
Definition AutoReg.h:530
Chip * RegistrationSearchChip()
Return pointer to search chip used in registration.
Definition AutoReg.h:227
double p_cubeLine
Cube line.
Definition AutoReg.h:516
int p_subpixelSuccesses
Registration statistics Success keyword.
Definition AutoReg.h:497
bool Success() const
Return whether the match algorithm succeeded or not.
Definition AutoReg.h:318
virtual double IdealFit() const =0
Returns the ideal (perfect) fit that could be returned by the MatchAlgorithm.
double PatternValidPercent() const
Return pattern chip valid percent. The default value is.
Definition AutoReg.h:280
double p_chipLine
Chip line.
Definition AutoReg.h:514
double p_zScoreMin
First Z-Score of pattern chip.
Definition AutoReg.h:506
double p_chipSample
Chip sample.
Definition AutoReg.h:513
Pvl RegistrationStatistics()
This returns the cumulative registration statistics.
Definition AutoReg.cpp:1177
int p_reduceFactor
Reduction factor.
Definition AutoReg.h:528
int p_fitChipToleranceNotMetCount
Registration statistics FitChipToleranceNotMet keyword.
Definition AutoReg.h:501
double p_tolerance
Tolerance for acceptable goodness of fit in match algorithm.
Definition AutoReg.h:518
void SetPatternValidPercent(const double percent)
Set the amount of data in the pattern chip that must be valid.
Definition AutoReg.cpp:339
int p_surfaceModelSolutionInvalidCount
Registration statistics SurfaceModelSolutionInvalid keyword.
Definition AutoReg.h:503
double SubsearchValidPercent() const
Return subsearch chip valid percent.
Definition AutoReg.h:285
Chip * SearchChip()
Return pointer to search chip.
Definition AutoReg.h:207
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
void SobelGradient(Buffer &in, double &v)
Compute a Sobel gradient based on an input buffer.
Definition AutoReg.cpp:1000
double ChipSample() const
Return the search chip sample that best matched.
Definition AutoReg.h:330
void SetReductionFactor(int reductionFactor)
Set the reduction factor used to speed up the pattern matching algorithm.
Definition AutoReg.cpp:521
double CubeSample() const
Return the search chip cube sample that best matched.
Definition AutoReg.h:340
int p_bestLine
Line value of best fit.
Definition AutoReg.h:525
bool SubPixelAccuracy()
Return whether this object will attempt to register to whole or sub-pixel accuracy.
Definition AutoReg.h:270
int p_windowSize
Surface model window size.
Definition AutoReg.h:520
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
double p_subsearchValidPercent
Percentage of data in subsearch chip that must be valid.
Definition AutoReg.h:511
virtual double MostLenientTolerance()
Minimum tolerance specific to algorithm.
Definition AutoReg.h:370
Chip p_reducedPatternChip
Pattern Chip with reduction factor.
Definition AutoReg.h:488
bool ComputeChipZScore(Chip &chip)
This method computes the given Chip's Z-Score.
Definition AutoReg.cpp:895
Chip Reduce(Chip &chip, int reductionFactor)
This method reduces the given chip by the given reduction factor.
Definition AutoReg.cpp:539
int p_bestSamp
Sample value of best fit.
Definition AutoReg.h:524
virtual ~AutoReg()
Destroy AutoReg object.
Definition AutoReg.cpp:153
bool SetSubpixelPosition(Chip &window)
Set the search chip sample and line to subpixel values if possible.
Definition AutoReg.cpp:1087
Chip * ReducedSearchChip()
Return pointer to reduced search chip.
Definition AutoReg.h:242
double MinimumZScore() const
Return minimumPatternZScore.
Definition AutoReg.h:350
void SetPatternZScoreMinimum(double minimum)
Set the minimum pattern zscore.
Definition AutoReg.cpp:394
virtual Pvl AlgorithmStatistics(Pvl &pvl)
Provide (adaptive) algorithms a chance to report results.
Definition AutoReg.h:461
int p_surfaceModelNotEnoughValidDataCount
Registration statistics SurfaceModelNotEnoughValidData keyword.
Definition AutoReg.h:502
void SetChipSample(double sample)
Sets the search chip subpixel sample that matches the pattern tack sample.
Definition AutoReg.h:393
Chip p_gradientPatternChip
Chip to be matched with gradient applied.
Definition AutoReg.h:487
double p_minimumPatternZScore
Minimum pattern Z-Score.
Definition AutoReg.h:509
Chip p_gradientSearchChip
Chip to be searched for best registration with gradient applied.
Definition AutoReg.h:486
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
void Distance(double &sampDistance, double &lineDistance)
Return the distance point moved.
Definition AutoReg.h:310
Chip * FitChip()
Return pointer to fit chip.
Definition AutoReg.h:212
Chip p_fitChip
Results from MatchAlgorithm() method.
Definition AutoReg.h:485
Chip p_patternChip
Chip to be matched.
Definition AutoReg.h:483
double ChipLine() const
Return the search chip line that best matched.
Definition AutoReg.h:335
void SetTolerance(double tolerance)
Set the tolerance for an acceptable goodness of fit.
Definition AutoReg.cpp:416
Chip * PatternChip()
Return pointer to pattern chip.
Definition AutoReg.h:202
void SetGoodnessOfFit(double fit)
Sets the goodness of fit for adaptive algorithms.
Definition AutoReg.h:413
int p_patternZScoreNotMetCount
Registration statistics PatternZScoreNotMet keyword.
Definition AutoReg.h:499
virtual double MatchAlgorithm(Chip &pattern, Chip &subsearch)=0
Given two identically sized chips return a double that indicates how well they match.
Chip p_reducedSearchChip
Search Chip with reduction factor.
Definition AutoReg.h:489
virtual QString AlgorithmName() const =0
Returns the name of the algorithm.
Chip * ReducedFitChip()
Return pointer to reduced fit chip.
Definition AutoReg.h:247
void SetSurfaceModelWindowSize(int size)
Set the surface model window size.
Definition AutoReg.cpp:480
double p_distanceTolerance
Maximum distance the surface model solution may be from the best whole pixel fit in the fit chip.
Definition AutoReg.h:521
void SetGradientFilterType(const QString &gradientFilterType)
Set the gradient filter type to be applied to the search and pattern chips.
Definition AutoReg.cpp:273
double p_goodnessOfFit
Goodness of fit of the match algorithm.
Definition AutoReg.h:517
AutoReg::RegisterStatus Register()
Walk the pattern chip through the search chip to find the best registration.
Definition AutoReg.cpp:587
double Tolerance() const
Return match algorithm tolerance.
Definition AutoReg.h:290
double p_patternValidPercent
Percentage of data in pattern chip that must be valid.
Definition AutoReg.h:510
double p_sampMovement
The number of samples the point moved.
Definition AutoReg.h:526
Buffer for reading and writing cube data.
Definition Buffer.h:53
A small chip of data used for pattern matching.
Definition Chip.h:86
Contains multiple PvlContainers.
Definition PvlGroup.h:41
Container for cube-like labels.
Definition Pvl.h:119
Contains Pvl Groups and Pvl Objects.
Definition PvlObject.h:61
This is free and unencumbered software released into the public domain.
Definition Apollo.h:16