1 #ifndef tde4_ldp_radial_decentered_deg_4_cylindric_sdv 2 #define tde4_ldp_radial_decentered_deg_4_cylindric_sdv 4 #include <ldpk/ldpk_ldp_builtin.h> 6 #include <ldpk/ldpk_cylindric_extender.h> 15 template <
class VEC2,
class MAT2>
19 typedef VEC2 vec2_type;
20 typedef MAT2 mat2_type;
26 static const char* _para[8];
28 bool decypher(
const char* name,
int& i)
35 if(0 == strcmp(name,_para[i]))
42 bool initializeParameters()
45 bt::check_builtin_parameters();
48 bool getNumParameters(
int& n)
53 bool getParameterName(
int i,
char* identifier)
55 strcpy(identifier,_para[i]);
58 bool setParameterValue(
const char *identifier,
double v)
63 if(bt::set_builtin_parameter_value(identifier,v))
67 if(!decypher(identifier,i))
74 { bt::no_longer_uptodate_lut(); }
79 if(_cylindric.get_phi() != v)
80 { bt::no_longer_uptodate_lut(); }
85 if(_cylindric.get_b() != v)
86 { bt::no_longer_uptodate_lut(); }
91 virtual bool undistort(
double x0,
double y0,
double &x1,
double &y1)
94 vec2_type q = bt::map_dn_to_unit(
97 bt::map_unit_to_dn(vec2_type(x0,y0)))));
102 virtual bool distort(
double x0,
double y0,
double &x1,
double &y1)
104 typedef base_type bt;
111 if(!bt::is_uptodate_lut())
114 if(!bt::is_uptodate_lut())
122 vec2_type qs = bt::get_lut().get_initial_value(vec2_type(x0,y0));
124 vec2_type q = bt::map_dn_to_unit(
127 bt::map_unit_to_dn(vec2_type(x0,y0))),
129 bt::map_unit_to_dn(qs))));
134 virtual bool distort(
double x0,
double y0,
double x1_start,
double y1_start,
double &x1,
double &y1)
136 typedef base_type bt;
137 vec2_type q = bt::map_dn_to_unit(
140 bt::map_unit_to_dn(vec2_type(x0,y0))),
142 bt::map_unit_to_dn(vec2_type(x1_start,y1_start)))));
155 #ifdef LDPK_COMPILE_AS_PLUGIN_SDV 156 strcpy(name,
"3DE4 Radial - Standard, Degree 4 [Plugin]");
158 strcpy(name,
"3DE4 Radial - Standard, Degree 4");
164 typedef base_type bt;
166 if(bt::get_builtin_parameter_type(identifier,ptype))
return true;
167 if(!decypher(identifier,i))
return false;
168 ptype = TDE4_LDP_ADJUSTABLE_DOUBLE;
173 typedef base_type bt;
175 if(!decypher(identifier,i))
return false;
181 typedef base_type bt;
183 if(!decypher(identifier,i))
return false;
184 if((i == 0) || (i == 3))
189 else if((i == 1) || (i == 2) || (i == 4) || (i == 5))
208 typedef base_type bt;
209 mat2_type m = _cylindric.
get_mat()
211 bt::map_unit_to_dn(vec2_type(x0,y0)));
213 mat2_type u2d(bt::w_fb_cm() / bt::r_fb_cm(),0.0,0.0,bt::h_fb_cm() / bt::r_fb_cm());
214 mat2_type d2u(bt::r_fb_cm() / bt::w_fb_cm(),0.0,0.0,bt::r_fb_cm() / bt::h_fb_cm());
216 m00 = m[0][0];m01 = m[0][1];m10 = m[1][0];m11 = m[1][1];
221 template <
class VEC2,
class MAT2>
223 "Distortion - Degree 2",
226 "Quartic Distortion - Degree 4",
229 "Phi - Cylindric Direction",
230 "B - Cylindric Bending" bool getJacobianMatrix(double x0, double y0, double &m00, double &m01, double &m10, double &m11)
calculate the Jacobian matrix of the undistort()-Method. Overwrite this, if you know the Jacobian for...
Definition: tde4_ldp_radial_decentered_deg_4_cylindric.h:206
virtual vec2_type eval_inv(const vec2_type &q) const
eval_inv() is applying lens distortion (distort)
Definition: ldpk_cylindric_extender.h:102
vec2_type eval(const vec2_type &p) const
Same as method instead of operator.
Definition: ldpk_generic_distortion_base.h:104
void set_b(double b)
This parameter expresses the strength of the cylindric deformation ("bending").
Definition: ldpk_cylindric_extender.h:94
mat2_type jacobi(const vec2_type &p_dn) const
Analytic version of the Jacobi-matrix, about two times faster than the base class version which uses ...
Definition: ldpk_radial_decentered_distortion.h:72
const mat2_type & get_mat() const
The matrix for this extender.
Definition: ldpk_cylindric_extender.h:108
A polynomial radially symmetric model of degree 4 with decentering.
Plugin class for radial distortion with decentering and optional compensation for beam-splitter artef...
Definition: tde4_ldp_radial_decentered_deg_4_cylindric.h:16
bool getModelName(char *name)
returns a name for the model as to show up in the GUI (maximum length of "name": 100 bytes)...
Definition: tde4_ldp_radial_decentered_deg_4_cylindric.h:153
bool getParameterRange(const char *identifier, double &a, double &b)
returns range for adjustable double parameters...
Definition: tde4_ldp_radial_decentered_deg_4_cylindric.h:179
This class handles the built-in parameter and the lookup table. You may find it useful for your own d...
Definition: ldpk_ldp_builtin.h:31
virtual vec2_type map_inverse(const vec2_type &q) const
Inverse mapping by solving the fixed point equation without providing initial values. Virtual, because the derived class might use some smart data structure for calculating an initial value.
Definition: ldpk_generic_distortion_base.h:122
void set_coeff(int i, double q)
Set coefficient c[i], 0 <= i < 6.
Definition: ldpk_radial_decentered_distortion.h:45
double get_coeff(int i) const
Get coefficient c[i], 0 <= i < 6.
Definition: ldpk_radial_decentered_distortion.h:39
vec2_type eval(const vec2_type &p) const
eval() is per definition removal of lens distortion (undistort).
Definition: ldpk_cylindric_extender.h:99
void set_phi(double phi)
The cylindric extender has a parameter called phi.
Definition: ldpk_cylindric_extender.h:89
bool getParameterType(const char *identifier, tde4_ldp_ptype &ptype)
returns type of given parameter... The method should return false, if the parameter addressed by iden...
Definition: tde4_ldp_radial_decentered_deg_4_cylindric.h:162
bool getParameterDefaultValue(const char *identifier, double &v)
returns default value for given parameter (maximum length of "char *v": 1000 bytes)......
Definition: tde4_ldp_radial_decentered_deg_4_cylindric.h:171