From d37734bb98e0be913b419986c3f787e7b7d1d366 Mon Sep 17 00:00:00 2001 From: B1ueber2y Date: Mon, 6 Jan 2025 22:38:08 +0100 Subject: [PATCH] cosmetics --- limap/base/camera_view.cc | 2 +- limap/base/line_dists.h | 1 - limap/base/line_linker.cc | 53 +++++++++++++++++-- limap/base/line_linker.h | 42 +++------------ limap/base/linetrack.cc | 10 ++-- limap/base/pointtrack.cc | 8 +-- limap/base/pointtrack.h | 6 ++- limap/ceresbase/ceres_extensions.h | 20 +++---- limap/ceresbase/interpolation.h | 6 +-- .../global_pl_association/global_associator.h | 28 +++++----- limap/structures/pl_bipartite.cc | 8 +-- limap/structures/pl_bipartite.h | 6 +-- limap/structures/pl_bipartite_base.cc | 8 +-- limap/structures/vpline_bipartite.cc | 8 +-- limap/triangulation/base_line_triangulator.cc | 19 +++++++ limap/triangulation/base_line_triangulator.h | 18 +------ .../triangulation/global_line_triangulator.cc | 15 ++++++ .../triangulation/global_line_triangulator.h | 15 +----- limap/vplib/base_vp_detector.h | 11 ++-- limap/vplib/global_vptrack_constructor.h | 6 +-- limap/vplib/vpbase.h | 6 ++- limap/vplib/vptrack.cc | 5 +- 22 files changed, 166 insertions(+), 135 deletions(-) diff --git a/limap/base/camera_view.cc b/limap/base/camera_view.cc index af050557..934aa2a7 100644 --- a/limap/base/camera_view.cc +++ b/limap/base/camera_view.cc @@ -4,7 +4,7 @@ namespace limap { CameraImage::CameraImage(py::dict dict) { - ASSIGN_PYDICT_ITEM(dict, cam_id, int) + ASSIGN_PYDICT_ITEM(dict, cam_id, int); pose = CameraPose(dict["pose"]); // load image name diff --git a/limap/base/line_dists.h b/limap/base/line_dists.h index b04d4d2f..168fe5af 100644 --- a/limap/base/line_dists.h +++ b/limap/base/line_dists.h @@ -183,7 +183,6 @@ double dist_innerseg(const LineType &l1, const LineType &l2) { return MAX_DIST; if (!get_innerseg(l1, l2, l2_innerseg)) return MAX_DIST; - // return dist_minpoint(l1_innerseg, l2_innerseg); return dist_endpoints_perpendicular(l1_innerseg, l2_innerseg); } diff --git a/limap/base/line_linker.cc b/limap/base/line_linker.cc index a150f828..d265ce3b 100644 --- a/limap/base/line_linker.cc +++ b/limap/base/line_linker.cc @@ -1,16 +1,40 @@ #include "limap/base/line_linker.h" #include "limap/base/line_dists.h" +#include "limap/_limap/helpers.h" #include namespace limap { +namespace { +double get_multiplier(const double &score_th) { + // exp(- (val / sigma)^2 / 2.0) >= 0.5 <--> val <= 1.1774100 sigma + return 1.0 / sqrt(-log(score_th) * 2.0); +} +} + double expscore(const double &val, const double &sigma) { return exp(-pow(val / sigma, 2) / 2.0); } -double get_multiplier(const double &score_th) { - // exp(- (val / sigma)^2 / 2.0) >= 0.5 <--> val <= 1.1774100 sigma - return 1.0 / sqrt(-log(score_th) * 2.0); +LineLinker2dConfig::LineLinker2dConfig() {} + +LineLinker2dConfig::LineLinker2dConfig(py::dict dict) { + ASSIGN_PYDICT_ITEM(dict, score_th, double); + ASSIGN_PYDICT_ITEM(dict, th_angle, double); + ASSIGN_PYDICT_ITEM(dict, th_overlap, double); + ASSIGN_PYDICT_ITEM(dict, th_smartoverlap, double); + ASSIGN_PYDICT_ITEM(dict, th_smartangle, double); + ASSIGN_PYDICT_ITEM(dict, th_perp, double); + ASSIGN_PYDICT_ITEM(dict, th_innerseg, double); + ASSIGN_PYDICT_ITEM(dict, use_angle, bool); + ASSIGN_PYDICT_ITEM(dict, use_overlap, bool); + ASSIGN_PYDICT_ITEM(dict, use_smartangle, bool); + ASSIGN_PYDICT_ITEM(dict, use_perp, bool); + ASSIGN_PYDICT_ITEM(dict, use_innerseg, bool); +} + +LineLinker2dConfig::multipler() const { + return get_multiplier(score_th); } double LineLinker2d::compute_score_angle(const Line2d &l1, @@ -135,6 +159,29 @@ double LineLinker2d::compute_score(const Line2d &l1, const Line2d &l2) const { return score; } +LineLinker3dConfig::LineLinker3dConfig() {} + +LineLinker3dConfig::LineLinker3dConfig(py::dict dict) { + ASSIGN_PYDICT_ITEM(dict, score_th, double); + ASSIGN_PYDICT_ITEM(dict, th_angle, double); + ASSIGN_PYDICT_ITEM(dict, th_overlap, double); + ASSIGN_PYDICT_ITEM(dict, th_smartoverlap, double); + ASSIGN_PYDICT_ITEM(dict, th_smartangle, double); + ASSIGN_PYDICT_ITEM(dict, th_perp, double); + ASSIGN_PYDICT_ITEM(dict, th_innerseg, double); + ASSIGN_PYDICT_ITEM(dict, th_scaleinv, double); + ASSIGN_PYDICT_ITEM(dict, use_angle, bool); + ASSIGN_PYDICT_ITEM(dict, use_overlap, bool); + ASSIGN_PYDICT_ITEM(dict, use_smartangle, bool); + ASSIGN_PYDICT_ITEM(dict, use_perp, bool); + ASSIGN_PYDICT_ITEM(dict, use_innerseg, bool); + ASSIGN_PYDICT_ITEM(dict, use_scaleinv, bool); +} + +LineLinker3dConfig::multiplier() const { + return get_multiplier(score_th); +} + double LineLinker3d::compute_score_angle(const Line3d &l1, const Line3d &l2) const { double angle = compute_angle(l1, l2); diff --git a/limap/base/line_linker.h b/limap/base/line_linker.h index 4be0b345..481e8d71 100644 --- a/limap/base/line_linker.h +++ b/limap/base/line_linker.h @@ -1,6 +1,5 @@ #pragma once -#include "limap/_limap/helpers.h" #include #include @@ -14,29 +13,15 @@ namespace py = pybind11; namespace limap { double expscore(const double &val, const double &sigma); -double get_multiplier(const double &score_th); class LineLinker2dConfig { public: - LineLinker2dConfig() {} - LineLinker2dConfig(py::dict dict) { - ASSIGN_PYDICT_ITEM(dict, score_th, double) - ASSIGN_PYDICT_ITEM(dict, th_angle, double) - ASSIGN_PYDICT_ITEM(dict, th_overlap, double) - ASSIGN_PYDICT_ITEM(dict, th_smartoverlap, double) - ASSIGN_PYDICT_ITEM(dict, th_smartangle, double) - ASSIGN_PYDICT_ITEM(dict, th_perp, double) - ASSIGN_PYDICT_ITEM(dict, th_innerseg, double) - ASSIGN_PYDICT_ITEM(dict, use_angle, bool) - ASSIGN_PYDICT_ITEM(dict, use_overlap, bool) - ASSIGN_PYDICT_ITEM(dict, use_smartangle, bool) - ASSIGN_PYDICT_ITEM(dict, use_perp, bool) - ASSIGN_PYDICT_ITEM(dict, use_innerseg, bool) - } + LineLinker2dConfig(); + LineLinker2dConfig(py::dict dict); // for scoring double score_th = 0.5; // only score that is higher than 0.5 survives the test - double multiplier() const { return get_multiplier(score_th); } + double multiplier() const; // angle double th_angle = 8.0; @@ -93,27 +78,12 @@ class LineLinker2d { class LineLinker3dConfig { public: - LineLinker3dConfig() {} - LineLinker3dConfig(py::dict dict) { - ASSIGN_PYDICT_ITEM(dict, score_th, double) - ASSIGN_PYDICT_ITEM(dict, th_angle, double) - ASSIGN_PYDICT_ITEM(dict, th_overlap, double) - ASSIGN_PYDICT_ITEM(dict, th_smartoverlap, double) - ASSIGN_PYDICT_ITEM(dict, th_smartangle, double) - ASSIGN_PYDICT_ITEM(dict, th_perp, double) - ASSIGN_PYDICT_ITEM(dict, th_innerseg, double) - ASSIGN_PYDICT_ITEM(dict, th_scaleinv, double) - ASSIGN_PYDICT_ITEM(dict, use_angle, bool) - ASSIGN_PYDICT_ITEM(dict, use_overlap, bool) - ASSIGN_PYDICT_ITEM(dict, use_smartangle, bool) - ASSIGN_PYDICT_ITEM(dict, use_perp, bool) - ASSIGN_PYDICT_ITEM(dict, use_innerseg, bool) - ASSIGN_PYDICT_ITEM(dict, use_scaleinv, bool) - } + LineLinker3dConfig(); + LineLinker3dConfig(py::dict dict); // for scoring double score_th = 0.5; // only score that is higher than 0.5 survives the test - double multiplier() const { return get_multiplier(score_th); } + double multiplier() const; // angle double th_angle = 10.0; diff --git a/limap/base/linetrack.cc b/limap/base/linetrack.cc index 41f94de9..46a9a238 100644 --- a/limap/base/linetrack.cc +++ b/limap/base/linetrack.cc @@ -53,10 +53,10 @@ LineTrack::LineTrack(py::dict dict) { else throw std::runtime_error("Error! Key \"line\" does not exist!"); line = Line3d(py_line); - ASSIGN_PYDICT_ITEM(dict, image_id_list, std::vector) - ASSIGN_PYDICT_ITEM(dict, line_id_list, std::vector) - ASSIGN_PYDICT_ITEM(dict, node_id_list, std::vector) - ASSIGN_PYDICT_ITEM(dict, score_list, std::vector) + ASSIGN_PYDICT_ITEM(dict, image_id_list, std::vector); + ASSIGN_PYDICT_ITEM(dict, line_id_list, std::vector); + ASSIGN_PYDICT_ITEM(dict, node_id_list, std::vector); + ASSIGN_PYDICT_ITEM(dict, score_list, std::vector); std::vector py_line2d_list, py_line3d_list; if (dict.contains("line2d_list")) { py_line2d_list = dict["line2d_list"].cast>(); @@ -68,7 +68,7 @@ LineTrack::LineTrack(py::dict dict) { for (auto it = py_line3d_list.begin(); it != py_line3d_list.end(); ++it) line3d_list.push_back(Line3d(*it)); } - ASSIGN_PYDICT_ITEM(dict, active, bool) + ASSIGN_PYDICT_ITEM(dict, active, bool); } std::vector LineTrack::GetSortedImageIds() const { diff --git a/limap/base/pointtrack.cc b/limap/base/pointtrack.cc index 95bced44..557c8b45 100644 --- a/limap/base/pointtrack.cc +++ b/limap/base/pointtrack.cc @@ -28,10 +28,10 @@ py::dict PointTrack::as_dict() const { } PointTrack::PointTrack(py::dict dict) { - ASSIGN_PYDICT_ITEM(dict, p, V3D) - ASSIGN_PYDICT_ITEM(dict, image_id_list, std::vector) - ASSIGN_PYDICT_ITEM(dict, p2d_id_list, std::vector) - ASSIGN_PYDICT_ITEM(dict, p2d_list, std::vector) + ASSIGN_PYDICT_ITEM(dict, p, V3D); + ASSIGN_PYDICT_ITEM(dict, image_id_list, std::vector); + ASSIGN_PYDICT_ITEM(dict, p2d_id_list, std::vector); + ASSIGN_PYDICT_ITEM(dict, p2d_list, std::vector); } } // namespace limap diff --git a/limap/base/pointtrack.h b/limap/base/pointtrack.h index 568b4517..a4406ac5 100644 --- a/limap/base/pointtrack.h +++ b/limap/base/pointtrack.h @@ -19,8 +19,10 @@ template struct Feature2dWith3dIndex { Feature2dWith3dIndex(PTYPE p_, int point3D_id_ = -1) : p(p_), point3D_id(point3D_id_) {} Feature2dWith3dIndex(py::dict dict){ - ASSIGN_PYDICT_ITEM(dict, p, PTYPE) - ASSIGN_PYDICT_ITEM(dict, point3D_id, int)} py::dict as_dict() const { + ASSIGN_PYDICT_ITEM(dict, p, PTYPE); + ASSIGN_PYDICT_ITEM(dict, point3D_id, int); + } + py::dict as_dict() const { py::dict output; output["p"] = p; output["point3D_id"] = point3D_id; diff --git a/limap/ceresbase/ceres_extensions.h b/limap/ceresbase/ceres_extensions.h index 81a69d67..895f9b07 100644 --- a/limap/ceresbase/ceres_extensions.h +++ b/limap/ceresbase/ceres_extensions.h @@ -31,20 +31,20 @@ class PyLossFunction : public ceres::LossFunction { inline void AssignSolverOptionsFromDict(ceres::Solver::Options &solver_options, py::dict dict) { - ASSIGN_PYDICT_ITEM_TO_MEMBER(solver_options, dict, function_tolerance, double) - ASSIGN_PYDICT_ITEM_TO_MEMBER(solver_options, dict, gradient_tolerance, double) + ASSIGN_PYDICT_ITEM_TO_MEMBER(solver_options, dict, function_tolerance, double); + ASSIGN_PYDICT_ITEM_TO_MEMBER(solver_options, dict, gradient_tolerance, double); ASSIGN_PYDICT_ITEM_TO_MEMBER(solver_options, dict, parameter_tolerance, - double) + double); ASSIGN_PYDICT_ITEM_TO_MEMBER(solver_options, dict, - minimizer_progress_to_stdout, bool) + minimizer_progress_to_stdout, bool); ASSIGN_PYDICT_ITEM_TO_MEMBER(solver_options, dict, - max_linear_solver_iterations, int) - ASSIGN_PYDICT_ITEM_TO_MEMBER(solver_options, dict, max_num_iterations, int) + max_linear_solver_iterations, int); + ASSIGN_PYDICT_ITEM_TO_MEMBER(solver_options, dict, max_num_iterations, int); ASSIGN_PYDICT_ITEM_TO_MEMBER(solver_options, dict, - max_num_consecutive_invalid_steps, int) + max_num_consecutive_invalid_steps, int); ASSIGN_PYDICT_ITEM_TO_MEMBER(solver_options, dict, - max_consecutive_nonmonotonic_steps, int) - ASSIGN_PYDICT_ITEM_TO_MEMBER(solver_options, dict, use_inner_iterations, bool) + max_consecutive_nonmonotonic_steps, int); + ASSIGN_PYDICT_ITEM_TO_MEMBER(solver_options, dict, use_inner_iterations, bool); ASSIGN_PYDICT_ITEM_TO_MEMBER(solver_options, dict, inner_iteration_tolerance, - double) + double); } diff --git a/limap/ceresbase/interpolation.h b/limap/ceresbase/interpolation.h index 441f7162..ba4f92fb 100644 --- a/limap/ceresbase/interpolation.h +++ b/limap/ceresbase/interpolation.h @@ -40,9 +40,9 @@ enum class InterpolatorType { struct InterpolationConfig { InterpolationConfig() {} InterpolationConfig(py::dict dict) { - ASSIGN_PYDICT_ITEM(dict, l2_normalize, bool) - ASSIGN_PYDICT_ITEM(dict, ncc_normalize, bool) - ASSIGN_PYDICT_ITEM(dict, fill_channel_differences, bool) + ASSIGN_PYDICT_ITEM(dict, l2_normalize, bool); + ASSIGN_PYDICT_ITEM(dict, ncc_normalize, bool); + ASSIGN_PYDICT_ITEM(dict, fill_channel_differences, bool); ASSIGN_PYDICT_ITEM(dict, nodes, SINGLE_ARG(std::vector>)); if (dict.contains("type")) { diff --git a/limap/optimize/global_pl_association/global_associator.h b/limap/optimize/global_pl_association/global_associator.h index d6c7f9c1..6aee96bb 100644 --- a/limap/optimize/global_pl_association/global_associator.h +++ b/limap/optimize/global_pl_association/global_associator.h @@ -24,20 +24,20 @@ class GlobalAssociatorConfig : public hybrid_bundle_adjustment::HybridBAConfig { GlobalAssociatorConfig(py::dict dict) : hybrid_bundle_adjustment::HybridBAConfig(dict) { InitConfig(); - ASSIGN_PYDICT_ITEM(dict, constant_vp, bool) - ASSIGN_PYDICT_ITEM(dict, th_angle_lineline, double) - ASSIGN_PYDICT_ITEM(dict, th_count_lineline, int) - ASSIGN_PYDICT_ITEM(dict, lw_pointline_association, double) - ASSIGN_PYDICT_ITEM(dict, th_pixel, double) - ASSIGN_PYDICT_ITEM(dict, th_weight_pointline, double) - ASSIGN_PYDICT_ITEM(dict, lw_vpline_association, double) - ASSIGN_PYDICT_ITEM(dict, th_count_vpline, int) - ASSIGN_PYDICT_ITEM(dict, lw_vp_orthogonality, double) - ASSIGN_PYDICT_ITEM(dict, th_angle_orthogonality, double) - ASSIGN_PYDICT_ITEM(dict, lw_vp_collinearity, double) - ASSIGN_PYDICT_ITEM(dict, th_angle_collinearity, double) - ASSIGN_PYDICT_ITEM(dict, th_hard_pl_dist3d, double) - ASSIGN_PYDICT_ITEM(dict, th_hard_vpline_angle3d, double) + ASSIGN_PYDICT_ITEM(dict, constant_vp, bool); + ASSIGN_PYDICT_ITEM(dict, th_angle_lineline, double); + ASSIGN_PYDICT_ITEM(dict, th_count_lineline, int); + ASSIGN_PYDICT_ITEM(dict, lw_pointline_association, double); + ASSIGN_PYDICT_ITEM(dict, th_pixel, double); + ASSIGN_PYDICT_ITEM(dict, th_weight_pointline, double); + ASSIGN_PYDICT_ITEM(dict, lw_vpline_association, double); + ASSIGN_PYDICT_ITEM(dict, th_count_vpline, int); + ASSIGN_PYDICT_ITEM(dict, lw_vp_orthogonality, double); + ASSIGN_PYDICT_ITEM(dict, th_angle_orthogonality, double); + ASSIGN_PYDICT_ITEM(dict, lw_vp_collinearity, double); + ASSIGN_PYDICT_ITEM(dict, th_angle_collinearity, double); + ASSIGN_PYDICT_ITEM(dict, th_hard_pl_dist3d, double); + ASSIGN_PYDICT_ITEM(dict, th_hard_vpline_angle3d, double); } // association config diff --git a/limap/structures/pl_bipartite.cc b/limap/structures/pl_bipartite.cc index c1a203b5..1a3a3d3f 100644 --- a/limap/structures/pl_bipartite.cc +++ b/limap/structures/pl_bipartite.cc @@ -48,8 +48,8 @@ PL_Bipartite2d::PL_Bipartite2d(py::dict dict) { // load connections #define TMPMAPTYPE std::map> - ASSIGN_PYDICT_ITEM(dict, np2l_, TMPMAPTYPE) - ASSIGN_PYDICT_ITEM(dict, nl2p_, TMPMAPTYPE) + ASSIGN_PYDICT_ITEM(dict, np2l_, TMPMAPTYPE); + ASSIGN_PYDICT_ITEM(dict, nl2p_, TMPMAPTYPE); #undef TMPMAPTYPE } @@ -262,8 +262,8 @@ PL_Bipartite3d::PL_Bipartite3d(py::dict dict) { // load connections #define TMPMAPTYPE std::map> - ASSIGN_PYDICT_ITEM(dict, np2l_, TMPMAPTYPE) - ASSIGN_PYDICT_ITEM(dict, nl2p_, TMPMAPTYPE) + ASSIGN_PYDICT_ITEM(dict, np2l_, TMPMAPTYPE); + ASSIGN_PYDICT_ITEM(dict, nl2p_, TMPMAPTYPE); #undef TMPMAPTYPE } diff --git a/limap/structures/pl_bipartite.h b/limap/structures/pl_bipartite.h index 34758d51..3a1901d3 100644 --- a/limap/structures/pl_bipartite.h +++ b/limap/structures/pl_bipartite.h @@ -22,9 +22,9 @@ typedef Junction Junction3d; struct PL_Bipartite2dConfig { PL_Bipartite2dConfig() {} PL_Bipartite2dConfig(py::dict dict) { - ASSIGN_PYDICT_ITEM(dict, threshold_intersection, double) - ASSIGN_PYDICT_ITEM(dict, threshold_merge_junctions, double) - ASSIGN_PYDICT_ITEM(dict, threshold_keypoints, double) + ASSIGN_PYDICT_ITEM(dict, threshold_intersection, double); + ASSIGN_PYDICT_ITEM(dict, threshold_merge_junctions, double); + ASSIGN_PYDICT_ITEM(dict, threshold_keypoints, double); } double threshold_keypoints = 2.0; // in pixels diff --git a/limap/structures/pl_bipartite_base.cc b/limap/structures/pl_bipartite_base.cc index 5acd3495..cb96bd8c 100644 --- a/limap/structures/pl_bipartite_base.cc +++ b/limap/structures/pl_bipartite_base.cc @@ -23,14 +23,14 @@ py::dict PL_Bipartite::as_dict() const { template PL_Bipartite::PL_Bipartite(py::dict dict) { #define TMPMAPTYPE std::map - ASSIGN_PYDICT_ITEM(dict, points_, TMPMAPTYPE) + ASSIGN_PYDICT_ITEM(dict, points_, TMPMAPTYPE); #undef TMPMAPTYPE #define TMPMAPTYPE std::map - ASSIGN_PYDICT_ITEM(dict, lines_, TMPMAPTYPE) + ASSIGN_PYDICT_ITEM(dict, lines_, TMPMAPTYPE); #undef TMPMAPTYPE #define TMPMAPTYPE std::map> - ASSIGN_PYDICT_ITEM(dict, np2l_, TMPMAPTYPE) - ASSIGN_PYDICT_ITEM(dict, nl2p_, TMPMAPTYPE) + ASSIGN_PYDICT_ITEM(dict, np2l_, TMPMAPTYPE); + ASSIGN_PYDICT_ITEM(dict, nl2p_, TMPMAPTYPE); #undef TMPMAPTYPE } diff --git a/limap/structures/vpline_bipartite.cc b/limap/structures/vpline_bipartite.cc index df51c7a6..480d7f11 100644 --- a/limap/structures/vpline_bipartite.cc +++ b/limap/structures/vpline_bipartite.cc @@ -44,8 +44,8 @@ VPLine_Bipartite2d::VPLine_Bipartite2d(py::dict dict) { // load connections #define TMPMAPTYPE std::map> - ASSIGN_PYDICT_ITEM(dict, np2l_, TMPMAPTYPE) - ASSIGN_PYDICT_ITEM(dict, nl2p_, TMPMAPTYPE) + ASSIGN_PYDICT_ITEM(dict, np2l_, TMPMAPTYPE); + ASSIGN_PYDICT_ITEM(dict, nl2p_, TMPMAPTYPE); #undef TMPMAPTYPE } @@ -89,8 +89,8 @@ VPLine_Bipartite3d::VPLine_Bipartite3d(py::dict dict) { // load connections #define TMPMAPTYPE std::map> - ASSIGN_PYDICT_ITEM(dict, np2l_, TMPMAPTYPE) - ASSIGN_PYDICT_ITEM(dict, nl2p_, TMPMAPTYPE) + ASSIGN_PYDICT_ITEM(dict, np2l_, TMPMAPTYPE); + ASSIGN_PYDICT_ITEM(dict, nl2p_, TMPMAPTYPE); #undef TMPMAPTYPE } diff --git a/limap/triangulation/base_line_triangulator.cc b/limap/triangulation/base_line_triangulator.cc index d4d72e1e..c5ea090d 100644 --- a/limap/triangulation/base_line_triangulator.cc +++ b/limap/triangulation/base_line_triangulator.cc @@ -1,5 +1,6 @@ #include "limap/triangulation/base_line_triangulator.h" #include "limap/triangulation/functions.h" +#include "limap/_limap/helpers.h" #include #include @@ -10,6 +11,24 @@ namespace limap { namespace triangulation { +BaseLineTriangulationConfig::BaseLineTriangulationConfig() {} + +BaseLineTriangulationConfig::BaseLineTriangulationConfig(py::dict dict) { + ASSIGN_PYDICT_ITEM(dict, add_halfpix, bool); + ASSIGN_PYDICT_ITEM(dict, use_vp, bool); + ASSIGN_PYDICT_ITEM(dict, use_endpoints_triangulation, bool); + ASSIGN_PYDICT_ITEM(dict, disable_many_points_triangulation, bool); + ASSIGN_PYDICT_ITEM(dict, disable_one_point_triangulation, bool); + ASSIGN_PYDICT_ITEM(dict, disable_algebraic_triangulation, bool); + ASSIGN_PYDICT_ITEM(dict, disable_vp_triangulation, bool); + ASSIGN_PYDICT_ITEM(dict, min_length_2d, double); + ASSIGN_PYDICT_ITEM(dict, line_tri_angle_threshold, double); + ASSIGN_PYDICT_ITEM(dict, IoU_threshold, double); + ASSIGN_PYDICT_ITEM(dict, debug_mode, bool); + ASSIGN_PYDICT_ITEM(dict, sensitivity_threshold, double); + ASSIGN_PYDICT_ITEM(dict, var2d, double);; +} + void BaseLineTriangulator::offsetHalfPixel() { std::vector image_ids = imagecols_->get_img_ids(); for (auto it = image_ids.begin(); it != image_ids.end(); ++it) { diff --git a/limap/triangulation/base_line_triangulator.h b/limap/triangulation/base_line_triangulator.h index 7fb3e7a6..eb2b1b1f 100644 --- a/limap/triangulation/base_line_triangulator.h +++ b/limap/triangulation/base_line_triangulator.h @@ -19,22 +19,8 @@ typedef std::tuple class BaseLineTriangulatorConfig { public: - BaseLineTriangulatorConfig() {} - BaseLineTriangulatorConfig(py::dict dict) { - ASSIGN_PYDICT_ITEM(dict, add_halfpix, bool) - ASSIGN_PYDICT_ITEM(dict, use_vp, bool) - ASSIGN_PYDICT_ITEM(dict, use_endpoints_triangulation, bool) - ASSIGN_PYDICT_ITEM(dict, disable_many_points_triangulation, bool) - ASSIGN_PYDICT_ITEM(dict, disable_one_point_triangulation, bool) - ASSIGN_PYDICT_ITEM(dict, disable_algebraic_triangulation, bool) - ASSIGN_PYDICT_ITEM(dict, disable_vp_triangulation, bool) - ASSIGN_PYDICT_ITEM(dict, min_length_2d, double) - ASSIGN_PYDICT_ITEM(dict, line_tri_angle_threshold, double) - ASSIGN_PYDICT_ITEM(dict, IoU_threshold, double) - ASSIGN_PYDICT_ITEM(dict, debug_mode, bool) - ASSIGN_PYDICT_ITEM(dict, sensitivity_threshold, double) - ASSIGN_PYDICT_ITEM(dict, var2d, double); - } + BaseLineTriangulatorConfig(); + BaseLineTriangulatorConfig(py::dict dict); // general options bool debug_mode = false; diff --git a/limap/triangulation/global_line_triangulator.cc b/limap/triangulation/global_line_triangulator.cc index 60ecf5b8..bd7cd7f1 100644 --- a/limap/triangulation/global_line_triangulator.cc +++ b/limap/triangulation/global_line_triangulator.cc @@ -1,6 +1,7 @@ #include "limap/triangulation/global_line_triangulator.h" #include "limap/merging/aggregator.h" #include "limap/merging/merging.h" +#include "limap/_limap/helpers.h" #include #include @@ -11,6 +12,20 @@ namespace limap { namespace triangulation { +GlobalLineTriangulatorConfig::GlobalLineTriangulatorConfig(): BaseLineTriangulatorConfig() {} + +GlobalLineTriangulatorConfig::GlobalLineTriangulatorConfig(py::dict dict): BaseLineTriangulatorConfig(dict) { + ASSIGN_PYDICT_ITEM(dict, fullscore_th, double); + ASSIGN_PYDICT_ITEM(dict, max_valid_conns, int); + ASSIGN_PYDICT_ITEM(dict, min_num_outer_edges, int); + ASSIGN_PYDICT_ITEM(dict, merging_strategy, std::string); + ASSIGN_PYDICT_ITEM(dict, num_outliers_aggregator, int); + if (dict.contains("linker2d_config")) + linker2d_config = LineLinker2dConfig(dict["linker2d_config"]); + if (dict.contains("linker3d_config")) + linker3d_config = LineLinker3dConfig(dict["linker3d_config"]); +} + void GlobalLineTriangulator::Init( const std::map> &all_2d_segs, const ImageCollection &imagecols) { diff --git a/limap/triangulation/global_line_triangulator.h b/limap/triangulation/global_line_triangulator.h index 88d64d5c..f5a5d8bc 100644 --- a/limap/triangulation/global_line_triangulator.h +++ b/limap/triangulation/global_line_triangulator.h @@ -10,19 +10,8 @@ namespace triangulation { class GlobalLineTriangulatorConfig : public BaseLineTriangulatorConfig { public: - GlobalLineTriangulatorConfig() : BaseLineTriangulatorConfig() {} - GlobalLineTriangulatorConfig(py::dict dict) - : BaseLineTriangulatorConfig(dict) { - ASSIGN_PYDICT_ITEM(dict, fullscore_th, double) - ASSIGN_PYDICT_ITEM(dict, max_valid_conns, int) - ASSIGN_PYDICT_ITEM(dict, min_num_outer_edges, int) - ASSIGN_PYDICT_ITEM(dict, merging_strategy, std::string) - ASSIGN_PYDICT_ITEM(dict, num_outliers_aggregator, int) - if (dict.contains("linker2d_config")) - linker2d_config = LineLinker2dConfig(dict["linker2d_config"]); - if (dict.contains("linker3d_config")) - linker3d_config = LineLinker3dConfig(dict["linker3d_config"]); - } + GlobalLineTriangulatorConfig(); + GlobalLineTriangulatorConfig(py::dict dict); double fullscore_th = 1.0; int max_valid_conns = 1000; // maximum valid connections for each node diff --git a/limap/vplib/base_vp_detector.h b/limap/vplib/base_vp_detector.h index 1b38d681..d6515b42 100644 --- a/limap/vplib/base_vp_detector.h +++ b/limap/vplib/base_vp_detector.h @@ -21,11 +21,12 @@ class BaseVPDetectorConfig { public: BaseVPDetectorConfig() {} BaseVPDetectorConfig(py::dict dict){ - ASSIGN_PYDICT_ITEM(dict, min_length, double) - ASSIGN_PYDICT_ITEM(dict, inlier_threshold, double) - ASSIGN_PYDICT_ITEM(dict, min_num_supports, int) - ASSIGN_PYDICT_ITEM(dict, th_perp_supports, double)} py::dict - as_dict() const; + ASSIGN_PYDICT_ITEM(dict, min_length, double); + ASSIGN_PYDICT_ITEM(dict, inlier_threshold, double); + ASSIGN_PYDICT_ITEM(dict, min_num_supports, int); + ASSIGN_PYDICT_ITEM(dict, th_perp_supports, double); + } + py::dict as_dict() const; double min_length = 40; // in pixel double inlier_threshold = 1.0; // in pixel diff --git a/limap/vplib/global_vptrack_constructor.h b/limap/vplib/global_vptrack_constructor.h index 6f20fc60..8d24998d 100644 --- a/limap/vplib/global_vptrack_constructor.h +++ b/limap/vplib/global_vptrack_constructor.h @@ -20,9 +20,9 @@ class GlobalVPTrackConstructorConfig { public: GlobalVPTrackConstructorConfig() {} GlobalVPTrackConstructorConfig(py::dict dict) { - ASSIGN_PYDICT_ITEM(dict, min_common_lines, int) - ASSIGN_PYDICT_ITEM(dict, th_angle_verify, double) - ASSIGN_PYDICT_ITEM(dict, min_track_length, int) + ASSIGN_PYDICT_ITEM(dict, min_common_lines, int); + ASSIGN_PYDICT_ITEM(dict, th_angle_verify, double); + ASSIGN_PYDICT_ITEM(dict, min_track_length, int); } int min_common_lines = 3; double th_angle_verify = 10.0; // in degree, verify edge with poses diff --git a/limap/vplib/vpbase.h b/limap/vplib/vpbase.h index fac48538..9a09df6d 100644 --- a/limap/vplib/vpbase.h +++ b/limap/vplib/vpbase.h @@ -27,8 +27,10 @@ class VPResult { output["vps"] = vps; return output; } - VPResult(py::dict dict){ASSIGN_PYDICT_ITEM(dict, labels, std::vector) - ASSIGN_PYDICT_ITEM(dict, vps, std::vector)} + VPResult(py::dict dict){ + ASSIGN_PYDICT_ITEM(dict, labels, std::vector); + ASSIGN_PYDICT_ITEM(dict, vps, std::vector); + } std::vector labels; // -1 denotes the unassociated lines std::vector vps; diff --git a/limap/vplib/vptrack.cc b/limap/vplib/vptrack.cc index 9b3bd944..91934c45 100644 --- a/limap/vplib/vptrack.cc +++ b/limap/vplib/vptrack.cc @@ -13,8 +13,9 @@ py::dict VPTrack::as_dict() const { } VPTrack::VPTrack(py::dict dict){ - ASSIGN_PYDICT_ITEM(dict, direction, V3D) - ASSIGN_PYDICT_ITEM(dict, supports, std::vector)} + ASSIGN_PYDICT_ITEM(dict, direction, V3D); + ASSIGN_PYDICT_ITEM(dict, supports, std::vector); +} std::vector MergeVPTracksByDirection( const std::vector &tracks, const double th_angle_merge) {