1 #ifndef tde4_ldp_anamorphic_deg_4_rotate_squeeze_xy_rescaled_sdv 2 #define tde4_ldp_anamorphic_deg_4_rotate_squeeze_xy_rescaled_sdv 4 #include <ldpk/ldpk_ldp_builtin.h> 5 #include <ldpk/ldpk_generic_anamorphic_distortion.h> 6 #include <ldpk/ldpk_rotation_extender.h> 7 #include <ldpk/ldpk_squeeze_extender.h> 8 #include <ldpk/ldpk_linear_extender.h> 11 #define M_PI 3.1415926535 18 template <
class VEC2,
class MAT2>
22 typedef VEC2 vec2_type;
23 typedef MAT2 mat2_type;
38 static const char* _para[14];
40 bool decypher(
const char* name,
int& i)
47 if(0 == strcmp(name,_para[i]))
54 bool initializeParameters()
57 bt::check_builtin_parameters();
61 _rot_sqx_sqy_rescale_pa.
set(_rotation,_squeeze_x,_squeeze_y,_rescale,_pa);
62 if(_squeeze_x.get_sq() == 0)
63 { std::cerr <<
"tde4_ldp_anamorphic_deg_4_rotate_squeeze_xy_rescaled::initializeParameters, error: Squeeze-X is 0." << std::endl; }
64 if(_squeeze_y.get_sq() == 0)
65 { std::cerr <<
"tde4_ldp_anamorphic_deg_4_rotate_squeeze_xy_rescaled::initializeParameters, error: Squeeze-Y is 0." << std::endl; }
66 _pa_rescale_rot.
set(_pa,_rescale,_rotation);
67 _anamorphic.prepare();
70 bool getNumParameters(
int& n)
75 bool getParameterName(
int i,
char* identifier)
77 strcpy(identifier,_para[i]);
80 bool setParameterValue(
const char *identifier,
double v)
85 if(bt::set_builtin_parameter_value(identifier,v))
89 if(!decypher(identifier,i))
96 { bt::no_longer_uptodate_lut(); }
101 if(_rotation.
get_phi() != v / 180.0 * M_PI)
102 { bt::no_longer_uptodate_lut(); }
103 _rotation.
set_phi(v / 180.0 * M_PI);
107 if(_squeeze_x.get_sq() != v)
108 { bt::no_longer_uptodate_lut(); }
109 _squeeze_x.set_sq(v);
113 if(_squeeze_y.get_sq() != v)
114 { bt::no_longer_uptodate_lut(); }
115 _squeeze_y.set_sq(v);
119 if(_rescale.get_sq() != v)
120 { bt::no_longer_uptodate_lut(); }
127 virtual bool undistort(
double x0,
double y0,
double &x1,
double &y1)
129 typedef base_type bt;
130 vec2_type q = bt::map_dn_to_unit(
131 _rot_sqx_sqy_rescale_pa.
eval(
134 bt::map_unit_to_dn(vec2_type(x0,y0))))));
157 virtual bool distort(
double x0,
double y0,
double &x1,
double &y1)
159 typedef base_type bt;
166 if(!bt::is_uptodate_lut())
169 if(!bt::is_uptodate_lut())
177 vec2_type qs = bt::get_lut().get_initial_value(vec2_type(x0,y0));
180 vec2_type q = bt::map_dn_to_unit(
181 _pa_rescale_rot.
eval(
184 bt::map_unit_to_dn(vec2_type(x0,y0))),
186 bt::map_unit_to_dn(qs)))));
235 virtual bool distort(
double x0,
double y0,
double x1_start,
double y1_start,
double &x1,
double &y1)
237 typedef base_type bt;
238 vec2_type q = bt::map_dn_to_unit(
239 _pa_rescale_rot.
eval(
242 bt::map_unit_to_dn(vec2_type(x0,y0))),
244 bt::map_unit_to_dn(vec2_type(x1_start,y1_start))))));
280 #ifdef LDPK_COMPILE_AS_PLUGIN_SDV 281 strcpy(name,
"3DE4 Anamorphic - Rescaled, Degree 4 [Plugin]");
283 strcpy(name,
"3DE4 Anamorphic - Rescaled, Degree 4");
289 typedef base_type bt;
291 if(bt::get_builtin_parameter_type(identifier,ptype))
return true;
292 if(!decypher(identifier,i))
return false;
293 ptype = TDE4_LDP_ADJUSTABLE_DOUBLE;
298 typedef base_type bt;
300 if(!decypher(identifier,i))
return false;
305 else if((i == 11) || (i == 12))
317 typedef base_type bt;
319 if(!decypher(identifier,i))
return false;
331 else if((i == 11) || (i == 12))
344 std::cerr <<
"getParameterRange: i out of range" << std::endl;
351 typedef base_type bt;
352 mat2_type m = _rot_sqx_sqy_rescale_pa.
get_mat()
355 bt::map_unit_to_dn(vec2_type(x0,y0))))
357 mat2_type u2d(bt::w_fb_cm() / bt::r_fb_cm(),0.0,0.0,bt::h_fb_cm() / bt::r_fb_cm());
358 mat2_type d2u(bt::r_fb_cm() / bt::w_fb_cm(),0.0,0.0,bt::r_fb_cm() / bt::h_fb_cm());
360 m00 = m[0][0];m01 = m[0][1];m10 = m[1][0];m11 = m[1][1];
365 template <
class VEC2,
class MAT2>
367 "Cx02 - Degree 2",
"Cy02 - Degree 2",
368 "Cx22 - Degree 2",
"Cy22 - Degree 2",
370 "Cx04 - Degree 4",
"Cy04 - Degree 4",
371 "Cx24 - Degree 4",
"Cy24 - Degree 4",
372 "Cx44 - Degree 4",
"Cy44 - Degree 4",
374 "Lens Rotation",
"Squeeze-X",
"Squeeze-Y",
bool getParameterRange(const char *identifier, double &a, double &b)
returns range for adjustable double parameters...
Definition: tde4_ldp_anamorphic_deg_4_rotate_squeeze_xy_rescaled.h:315
virtual mat2_type jacobi(const vec2_type &p_dn) const
Jacobi-Matrix. The result is a matrix g_{ij} = d/dp_j f(p)_i, where f represents the undistort-functi...
Definition: ldpk_generic_distortion_base.h:109
vec2_type eval(const vec2_type &p) const
eval() is per definition removal of lens distortion (undistort).
Definition: ldpk_linear_extender.h:65
vec2_type eval(const vec2_type &p) const
Same as method instead of operator.
Definition: ldpk_generic_distortion_base.h:104
void set_coeff(int i, double q)
Set coefficient as demanded by base class.
Definition: ldpk_generic_anamorphic_distortion.h:77
double get_phi() const
Getter.
Definition: ldpk_rotation_extender.h:36
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_anamorphic_deg_4_rotate_squeeze_xy_rescaled.h:278
const mat2_type & get_mat_inv() const
The inverse matrix for this extender.
Definition: ldpk_linear_extender.h:77
void set(const mat2_type &m)
Passing the matrix.
Definition: ldpk_linear_extender.h:24
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_anamorphic_deg_4_rotate_squeeze_xy_rescaled.h:287
Definition: tde4_ldp_anamorphic_deg_4_rotate_squeeze_xy_rescaled.h:19
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
const mat2_type & get_mat() const
The matrix for this extender.
Definition: ldpk_linear_extender.h:74
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
bool getJacobianMatrix(double x0, double y0, double &m00, double &m01, double &m10, double &m11)
Tested against difference quotients.
Definition: tde4_ldp_anamorphic_deg_4_rotate_squeeze_xy_rescaled.h:349
vec2_type eval_inv(const vec2_type &q) const
eval_inv() is applying lens distortion (distort)
Definition: ldpk_linear_extender.h:68
double get_coeff(int i) const
Get coefficient as demanded by base class.
Definition: ldpk_generic_anamorphic_distortion.h:71
bool getParameterDefaultValue(const char *identifier, double &v)
returns default value for given parameter (maximum length of "char *v": 1000 bytes)......
Definition: tde4_ldp_anamorphic_deg_4_rotate_squeeze_xy_rescaled.h:296
void set_phi(double phi)
The rotation extender has one parameter called phi (in radians).
Definition: ldpk_rotation_extender.h:29