Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024 #ifndef OPTIMIZATION_H
00025 #define OPTIMIZATION_H
00026
00027 #include "Alvar.h"
00028 #include <cxcore.h>
00029
00030
00031
00038 namespace alvar {
00039
00044 class ALVAR_EXPORT Optimization
00045 {
00046
00047 private:
00048
00049 void *estimate_param;
00050 CvMat *J;
00051 CvMat *JtJ;
00052 CvMat *W;
00053 CvMat *diag;
00054 CvMat *tmp;
00055 CvMat *err;
00056 CvMat *delta;
00057 CvMat *x_plus;
00058 CvMat *x_minus;
00059 CvMat *x_tmp1;
00060 CvMat *x_tmp2;
00061 CvMat *tmp_par;
00062
00063 double CalcTukeyWeight(double residual, double c);
00064 double CalcTukeyWeightSimple(double residual, double c);
00065
00066 double lambda;
00067
00068 public:
00069
00074 enum OptimizeMethod
00075 {
00076 GAUSSNEWTON,
00077 LEVENBERGMARQUARDT,
00078 TUKEY_LM
00079 };
00080
00086 Optimization(int n_params, int n_meas);
00087 ~Optimization();
00088
00093 CvMat *GetErr() { return err; }
00094
00101 typedef void (*EstimateCallback)(CvMat* state, CvMat *projection, void *param);
00102
00109 void CalcJacobian(CvMat* x, CvMat* J, EstimateCallback Estimate);
00110
00123 double Optimize(CvMat* parameters,
00124 CvMat* measurements,
00125 double stop,
00126 int max_iter,
00127 EstimateCallback Estimate,
00128 void *param = 0,
00129 OptimizeMethod method = LEVENBERGMARQUARDT,
00130 CvMat* parameters_mask = 0,
00131 CvMat* J_mat = 0,
00132 CvMat* weights = 0);
00133
00134 };
00135
00136 }
00137
00138 #endif