|
Isis 3.0 Object Programmers' Reference |
Home |
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