USGS

Isis 3.0 Object Programmers' Reference

Home

AutoReg.h

Go to the documentation of this file.
00001 #if !defined(AutoReg_h)
00002 #define AutoReg_h
00003 
00027 #include <string>
00028 #include <vector>
00029 
00030 #include "Statistics.h"
00031 #include "Chip.h"
00032 //#include "AutoRegItem.h"
00033 
00034 namespace Isis {
00117   class Pvl;
00118   class AutoRegItem;
00119 
00120   class AutoReg {
00121     public:
00122       AutoReg (Pvl &pvl);
00123 
00124       virtual ~AutoReg();
00125 
00126       enum RegisterStatus{
00127         Success, 
00128         PatternChipNotEnoughValidData, 
00129         FitChipNoData, 
00130         FitChipToleranceNotMet, 
00131         SurfaceModelNotEnoughValidData, 
00132         SurfaceModelSolutionInvalid, 
00133         SurfaceModelDistanceInvalid, 
00134         PatternZScoreNotMet, 
00135         SurfaceModelEccentricityRatioNotMet, 
00136         AdaptiveAlgorithmFailed  
00137       };
00138 
00140       inline Chip *PatternChip () { return &p_patternChip; };
00141 
00143       inline Chip *SearchChip() { return &p_searchChip; };
00144 
00146       inline Chip *FitChip() { return &p_fitChip; };
00147 
00149       inline Chip *ReducedPatternChip() { return &p_reducedPatternChip; };
00150 
00152       inline Chip *ReducedSearchChip() { return &p_reducedSearchChip; };
00153 
00155       inline Chip *ReducedFitChip() { return &p_reducedFitChip; };
00156 
00157       void SetSubPixelAccuracy(bool on);
00158       void SetPatternValidPercent(const double percent);
00159       void SetTolerance(double tolerance);
00160       void SetSurfaceModelWindowSize (int size);
00161       void SetSurfaceModelDistanceTolerance (double distance);
00162       void SetReductionFactor (int reductionFactor);
00163       void SetPatternZScoreMinimum(double minimum);
00164       void SetSurfaceModelEccentricityRatio(double ratioTolerance);
00165 
00167       double PatternValidPercent() const { return p_patternValidPercent; };
00168 
00170       inline double Tolerance () const { return p_tolerance; };
00171 
00172       AutoReg::RegisterStatus Register();
00173 
00175       inline double GoodnessOfFit () const { return p_goodnessOfFit; };
00176 
00177       inline bool IsIdeal(double fit);
00178 
00180       inline double ChipSample() const { return p_chipSample; };
00181 
00183       inline double ChipLine() const { return p_chipLine; };
00184 
00186       inline double CubeSample() const { return p_cubeSample; };
00187 
00189       inline double CubeLine() const { return p_cubeLine; };
00190 
00197       void ZScores(double &score1, double &score2) const {
00198         score1=p_ZScore1;
00199         score2=p_ZScore2;
00200       }
00201 
00202       Pvl RegistrationStatistics();
00203 
00208       virtual bool IsAdaptive() { return false; }
00209 
00216       virtual std::string AlgorithmName() const = 0;
00217 
00218       PvlGroup RegTemplate();
00219 
00220     protected:
00228       inline void SetChipSample(double sample){ p_chipSample = sample; };
00229 
00237       inline void SetChipLine(double line){ p_chipLine = line; };
00238 
00244       inline void SetGoodnessOfFit(double fit){ p_bestFit = fit; };
00245 
00246       virtual AutoReg::RegisterStatus AdaptiveRegistration(Chip &sChip, 
00247                                                            Chip &pChip, 
00248                                                            Chip &fChip,
00249                                                            int startSamp,
00250                                                            int startLine,
00251                                                            int endSamp,
00252                                                            int endLine,
00253                                                            int bestSamp,
00254                                                            int bestLine);
00255       void Parse(Pvl &pvl);
00256       virtual bool CompareFits(double fit1, double fit2);
00257       bool ModelSurface(std::vector<double> &x, std::vector<double> &y,
00258                        std::vector<double> &z);
00259       Chip Reduce(Chip &chip, int reductionFactor);
00260 
00268       virtual double IdealFit() const = 0;
00269 
00282       virtual double MatchAlgorithm (Chip &pattern, Chip &subsearch) = 0;
00283 
00284       PvlObject p_template; 
00285 
00296       virtual Pvl AlgorithmStatistics(Pvl &pvl) { return (pvl); }
00297 
00298     private:
00299       AutoReg (const AutoReg &original){};
00300       void Match(Chip &sChip, Chip &pChip, Chip &fChip, int ss, int es, int sl, int el);
00301       bool ComputeChipZScore(Chip &chip);
00302       void Init();
00303 
00304       Chip p_patternChip;
00305       Chip p_searchChip;
00306       Chip p_fitChip;
00307       Chip p_reducedPatternChip;
00308       Chip p_reducedSearchChip;
00309       Chip p_reducedFitChip;
00310 
00311       bool p_subpixelAccuracy;
00312 
00313       //TODO: remove these after control points are refactored.
00314       int p_Total;
00315       int p_Success;
00316       int p_PatternChipNotEnoughValidData;
00317       int p_PatternZScoreNotMet;
00318       int p_FitChipNoData;
00319       int p_FitChipToleranceNotMet;
00320       int p_SurfaceModelNotEnoughValidData;
00321       int p_SurfaceModelSolutionInvalid;
00322       int p_SurfaceModelDistanceInvalid;
00323       int p_SurfaceModelEccentricityRatioNotMet;
00324 
00325       double p_ZScore1;
00326       double p_ZScore2;
00327 
00328       double p_minimumPatternZScore;
00329       double p_patternValidPercent;
00330 
00331       double p_chipSample, p_chipLine;
00332       double p_cubeSample, p_cubeLine;
00333       double p_goodnessOfFit;
00334       double p_tolerance;
00335 
00336       int p_windowSize;
00337       double p_distanceTolerance;
00338 
00339       double p_surfaceModelEccentricityTolerance;
00340       double p_surfaceModelEccentricity;
00341       double p_bestFit;
00342       int p_bestSamp;
00343       int p_bestLine;
00344       int p_reduceFactor;
00345       Isis::AutoReg::RegisterStatus p_status;
00346 
00347   };
00348 };
00349 
00350 #endif