From ca4c449ba9f3a40f8ac2c79a48f3d31144a1fafe Mon Sep 17 00:00:00 2001 From: Johannes Hofmann Date: Sat, 16 Dec 2006 17:22:03 +0100 Subject: add command line option to specify distortion parameters --- src/GipfelWidget.H | 2 ++ src/GipfelWidget.cxx | 6 ++++++ src/Panorama.H | 2 ++ src/Panorama.cxx | 7 +++++++ src/ProjectionTangentialLSQ.cxx | 28 ++-------------------------- src/gipfel.cxx | 13 ++++++++++++- 6 files changed, 31 insertions(+), 27 deletions(-) diff --git a/src/GipfelWidget.H b/src/GipfelWidget.H index cba4513..0389896 100644 --- a/src/GipfelWidget.H +++ b/src/GipfelWidget.H @@ -108,6 +108,8 @@ class GipfelWidget : public Fl_Widget { void set_projection(Projection::Projection_t p); + void set_distortion_params(double k0, double k1); + Hills *get_mountains(); int comp_params(); diff --git a/src/GipfelWidget.cxx b/src/GipfelWidget.cxx index e1dad77..0d92095 100644 --- a/src/GipfelWidget.cxx +++ b/src/GipfelWidget.cxx @@ -472,6 +472,12 @@ GipfelWidget::set_projection(Projection::Projection_t p) { redraw(); } +void +GipfelWidget::set_distortion_params(double k0, double k1) { + pan->set_distortion_params(k0, k1); + redraw(); +} + Projection::Projection_t GipfelWidget::get_projection() { return pan->get_projection(); diff --git a/src/Panorama.H b/src/Panorama.H index bfb39b8..4db046e 100644 --- a/src/Panorama.H +++ b/src/Panorama.H @@ -131,6 +131,8 @@ class Panorama { void set_projection(Projection::Projection_t p); + void set_distortion_params(double k0, double k1); + int get_coordinates(double a_view, double a_nick, double *x, double *y); }; #endif diff --git a/src/Panorama.cxx b/src/Panorama.cxx index 503f373..8b21fda 100644 --- a/src/Panorama.cxx +++ b/src/Panorama.cxx @@ -256,6 +256,13 @@ Panorama::set_scale(double s) { update_coordinates(); } +void +Panorama::set_distortion_params(double k0, double k1) { + parms.k0 = k0; + parms.k1 = k1; + update_coordinates(); +} + void Panorama::set_height_dist_ratio(double r) { height_dist_ratio = r; diff --git a/src/ProjectionTangentialLSQ.cxx b/src/ProjectionTangentialLSQ.cxx index 9bbf81c..73a4bad 100644 --- a/src/ProjectionTangentialLSQ.cxx +++ b/src/ProjectionTangentialLSQ.cxx @@ -37,7 +37,7 @@ ProjectionTangentialLSQ::comp_params(const Hills *h, ViewParams *parms) { double a_center_tmp, scale_tmp, a_nick_tmp; if (h->get_num() < 2) { - fprintf(stderr, "Please position at least 3 hills\n"); + fprintf(stderr, "Please position at least 2 hills\n"); return 1; } else if (h->get_num() > 3) { fprintf(stderr, "Performing calibration\n"); @@ -244,31 +244,7 @@ ProjectionTangentialLSQ::lsq(const Hills *h, ViewParams *parms) { gsl_multifit_fdfsolver_free (s); - double t_x, t_y; - get_coordinates(h->get(0)->a_view, h->get(0)->a_nick, parms, &t_x, &t_y); - fprintf(stderr, "center %f, view %f, nick %f, x %f (%f), dx %f, y %f (%f), dy %f\n", - parms->a_center / deg2rad, - h->get(0)->a_view, h->get(0)->a_nick, - h->get(0)->x, - t_x, - h->get(0)->x - mac_x(parms->a_center, - parms->a_nick, - parms->a_tilt, - parms->scale, - parms->k0, - parms->k1, - h->get(0)->a_view, h->get(0)->a_nick), - h->get(0)->y, - t_y, - h->get(0)->y - mac_y(parms->a_center, - parms->a_nick, - parms->a_tilt, - parms->scale, - parms->k0, - parms->k1, - h->get(0)->a_view, h->get(0)->a_nick)); - - + fprintf(stderr, "k0 %f, k1 %f\n", parms->k0, parms->k1); return 0; } diff --git a/src/gipfel.cxx b/src/gipfel.cxx index a746a2e..3f6bb08 100644 --- a/src/gipfel.cxx +++ b/src/gipfel.cxx @@ -204,6 +204,7 @@ void usage() { " This must be a string that unambiguously \n" " matches the name of an entry in the data file.\n" " -d Use for GPS data.\n" + " -u , Use distortion correction values k0,k1.\n" " -s Stitch mode.\n" " -w Width of result image.\n" " -h Height of result image.\n" @@ -325,12 +326,13 @@ int main(int argc, char** argv) { int stitch_flag = 0, stitch_w = 2000, stitch_h = 500; int jpeg_flag = 0, tiff_flag = 0; double stitch_from = 0.0, stitch_to = 380.0; + double dist_k0 = 0.0, dist_k1 = 0.0; char *outpath; Fl_Scroll *scroll; err = 0; - while ((c = getopt(argc, argv, ":?d:v:s:w:h:j:t:")) != EOF) { + while ((c = getopt(argc, argv, ":?d:v:s:w:h:j:t:u:")) != EOF) { switch (c) { case '?': usage(); @@ -351,6 +353,14 @@ int main(int argc, char** argv) { } } break; + case 'u': + if (optarg && strcmp(optarg, ":")) { + dist_k0 = atof(optarg); + if (strchr(optarg, ',')) { + dist_k1 = atof(strchr(optarg, ',') + 1); + } + } + break; case 'j': jpeg_flag++; outpath = optarg; @@ -419,6 +429,7 @@ int main(int argc, char** argv) { control_win->label(img_file); } + gipf->set_distortion_params(dist_k0, dist_k1); view_win->size(gipf->w(), gipf->h()); scroll->size(gipf->w(), gipf->h()); -- cgit v1.2.3