MTF
SSMEstimator.h
1 #ifndef MTF_SSM_ESTIMATOR_H
2 #define MTF_SSM_ESTIMATOR_H
3 
4 #include "mtf/Macros/common.h"
5 
6 #include <boost/random/mersenne_twister.hpp>
7 
8 _MTF_BEGIN_NAMESPACE
9 
13 
15 public:
16  SSMEstimator(int _modelPoints, CvSize _modelSize,
17  int _maxBasicSolutions, bool _use_boost_rng);
18  virtual ~SSMEstimator();
19 
20  virtual int runKernel(const CvMat* m1, const CvMat* m2, CvMat* model) = 0;
21  virtual bool runLMeDS(const CvMat* m1, const CvMat* m2, CvMat* model,
22  CvMat* mask, double confidence = 0.99, int maxIters = 2000, int maxAttempts = 300);
23  virtual bool runRANSAC(const CvMat* m1, const CvMat* m2, CvMat* model,
24  CvMat* mask, double threshold, double confidence = 0.99, int maxIters = 2000,
25  int maxAttempts=300);
26  virtual bool refine(const CvMat*, const CvMat*, CvMat*, int) { return true; }
27  virtual void setSeed(int64 seed);
28 
29 protected:
30  virtual void computeReprojError(const CvMat* m1, const CvMat* m2,
31  const CvMat* model, CvMat* error) = 0;
32  virtual int findInliers(const CvMat* m1, const CvMat* m2,
33  const CvMat* model, CvMat* error,
34  CvMat* mask, double threshold);
35  virtual bool getSubset(const CvMat* m1, const CvMat* m2,
36  CvMat* ms1, CvMat* ms2, int maxAttempts = 1000);
37  virtual bool checkSubset(const CvMat* ms1, int count);
38 
39  typedef boost::mt19937 BoostRNG;
40 
41  CvRNG cv_rng;
42  BoostRNG boost_rng;
43 
44  int modelPoints;
45  CvSize modelSize;
46  int maxBasicSolutions;
47  bool checkPartialSubsets;
48  const bool use_boost_rng;
49 };
50 
51 
54 class LevMarq{
55 public:
56  LevMarq();
57  LevMarq(int nparams, int nerrs, CvTermCriteria criteria =
58  cvTermCriteria(CV_TERMCRIT_EPS + CV_TERMCRIT_ITER, 30, DBL_EPSILON),
59  bool completeSymmFlag = false);
60  ~LevMarq();
61  void init(int nparams, int nerrs, CvTermCriteria criteria =
62  cvTermCriteria(CV_TERMCRIT_EPS + CV_TERMCRIT_ITER, 30, DBL_EPSILON),
63  bool completeSymmFlag = false);
64  bool update(const CvMat*& param, CvMat*& J, CvMat*& err);
65  bool updateAlt(const CvMat*& param, CvMat*& JtJ, CvMat*& JtErr, double*& errNorm);
66 
67  void clear();
68  void step();
69  enum { DONE = 0, STARTED = 1, CALC_J = 2, CHECK_ERR = 3 };
70 
71  cv::Ptr<CvMat> mask;
72  cv::Ptr<CvMat> prevParam;
73  cv::Ptr<CvMat> param;
74  cv::Ptr<CvMat> J;
75  cv::Ptr<CvMat> err;
76  cv::Ptr<CvMat> JtJ;
77  cv::Ptr<CvMat> JtJN;
78  cv::Ptr<CvMat> JtErr;
79  cv::Ptr<CvMat> JtJV;
80  cv::Ptr<CvMat> JtJW;
81  double prevErrNorm, errNorm;
82  int lambdaLg10;
83  CvTermCriteria criteria;
84  int state;
85  int iters;
86  bool completeSymmFlag;
87 };
88 
89 _MTF_END_NAMESPACE
90 #endif
Levenberg Marquardt Solver for refining estimated SSM paarameters copied from CvLevMarq in calib3d mo...
Definition: SSMEstimator.h:54
Base class for robust estimators for different SSMs adapted from CvModelEstimator2 defined in _modelt...
Definition: SSMEstimator.h:14