-
Notifications
You must be signed in to change notification settings - Fork 0
/
gmmreg_base.h
69 lines (57 loc) · 1.89 KB
/
gmmreg_base.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
#ifndef gmmreg_base_h
#define gmmreg_base_h
#ifdef WIN32
#include <windows.h>
//#else
//#include "port_ini.h"
#endif
#include <vector>
#include <vnl/vnl_vector.h>
#include <vnl/vnl_matrix.h>
class gmmreg_base {
public:
gmmreg_base() {
}
int initialize();
int initializeTPS();
void denormalize_all();
void denormalize_transformed_model();
int m, n, s, d;
//int m_all, d_all;
double sigma, lambda;
/* m: # of points in model */
/* s: # of points in scene */
/* n: # of points in ctrl_pts */
/* d: dimensionality, e.g. 2 for 2D points, 3 for 3D points */
// each row is a sample point
vnl_matrix<double> model, scene, ctrl_pts, transformed_model;
//vnl_matrix<double> model_all, scene_all, transformed_model_all;
unsigned int level;//multi_scale_options()
bool b_fix_affine;
std::vector<double> v_lambda;
void run(int n_max_func_evals);
virtual void perform_transform(const vnl_vector<double>&) = 0;
virtual double bending_energy() = 0; //serving as a regularization term
virtual void compute_gradient(double lambda,
const vnl_matrix<double>& gradient, vnl_matrix<double>& grad_all) = 0;
virtual ~gmmreg_base() {}
protected:
//double sigma, lambda;
vnl_matrix<double> kernel;
vnl_vector<double> model_centroid, scene_centroid, ctrl_pts_centroid;
std::vector<double> v_scale;
std::vector<int> v_func_evals;
// get params from input
virtual void prepare_input();
//void denormalize_all();
//int initialize();
private:
double model_scale, scene_scale, ctrl_pts_scale;
void prepare_common_options();
virtual void prepare_own_options() = 0;
virtual void prepare_basis_kernel() = 0;
virtual void prepare_basis() = 0;
virtual void set_init_params() = 0;
virtual void start_registration(vnl_vector<double>& params, int n_max_func_evals) = 0;
};
#endif // #ifndef gmmreg_base_h