Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Some minor cosmetics improvements #116

Merged
merged 5 commits into from
Jan 7, 2025
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions .github/CODEOWNERS
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
# These code reviewers should be added by default.
* @B1ueber2y @MarkYu98 @rpautrat
2 changes: 1 addition & 1 deletion limap/base/camera_view.cc
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
1 change: 0 additions & 1 deletion limap/base/line_dists.h
Original file line number Diff line number Diff line change
Expand Up @@ -183,7 +183,6 @@ double dist_innerseg(const LineType &l1, const LineType &l2) {
return MAX_DIST;
if (!get_innerseg<LineType>(l1, l2, l2_innerseg))
return MAX_DIST;
// return dist_minpoint<Line3d>(l1_innerseg, l2_innerseg);
return dist_endpoints_perpendicular<LineType>(l1_innerseg, l2_innerseg);
}

Expand Down
53 changes: 50 additions & 3 deletions limap/base/line_linker.cc
Original file line number Diff line number Diff line change
@@ -1,16 +1,40 @@
#include "limap/base/line_linker.h"
#include "limap/_limap/helpers.h"
#include "limap/base/line_dists.h"
#include <cmath>

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);
}
} // namespace

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);
}

double LineLinker2dConfig::multiplier() const {
return get_multiplier(score_th);
}

double LineLinker2d::compute_score_angle(const Line2d &l1,
Expand Down Expand Up @@ -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);
}

double LineLinker3dConfig::multiplier() const {
return get_multiplier(score_th);
}

double LineLinker3d::compute_score_angle(const Line3d &l1,
const Line3d &l2) const {
double angle = compute_angle<Line3d>(l1, l2);
Expand Down
42 changes: 6 additions & 36 deletions limap/base/line_linker.h
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
#pragma once

#include "limap/_limap/helpers.h"
#include <pybind11/numpy.h>
#include <pybind11/pybind11.h>

Expand All @@ -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;
Expand Down Expand Up @@ -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;
Expand Down
10 changes: 5 additions & 5 deletions limap/base/linetrack.cc
Original file line number Diff line number Diff line change
Expand Up @@ -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<int>)
ASSIGN_PYDICT_ITEM(dict, line_id_list, std::vector<int>)
ASSIGN_PYDICT_ITEM(dict, node_id_list, std::vector<int>)
ASSIGN_PYDICT_ITEM(dict, score_list, std::vector<double>)
ASSIGN_PYDICT_ITEM(dict, image_id_list, std::vector<int>);
ASSIGN_PYDICT_ITEM(dict, line_id_list, std::vector<int>);
ASSIGN_PYDICT_ITEM(dict, node_id_list, std::vector<int>);
ASSIGN_PYDICT_ITEM(dict, score_list, std::vector<double>);
std::vector<Eigen::MatrixXd> py_line2d_list, py_line3d_list;
if (dict.contains("line2d_list")) {
py_line2d_list = dict["line2d_list"].cast<std::vector<Eigen::MatrixXd>>();
Expand All @@ -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<int> LineTrack::GetSortedImageIds() const {
Expand Down
8 changes: 4 additions & 4 deletions limap/base/pointtrack.cc
Original file line number Diff line number Diff line change
Expand Up @@ -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<int>)
ASSIGN_PYDICT_ITEM(dict, p2d_id_list, std::vector<int>)
ASSIGN_PYDICT_ITEM(dict, p2d_list, std::vector<V2D>)
ASSIGN_PYDICT_ITEM(dict, p, V3D);
ASSIGN_PYDICT_ITEM(dict, image_id_list, std::vector<int>);
ASSIGN_PYDICT_ITEM(dict, p2d_id_list, std::vector<int>);
ASSIGN_PYDICT_ITEM(dict, p2d_list, std::vector<V2D>);
}

} // namespace limap
8 changes: 5 additions & 3 deletions limap/base/pointtrack.h
Original file line number Diff line number Diff line change
Expand Up @@ -18,9 +18,11 @@ template <typename PTYPE> struct Feature2dWith3dIndex {
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 {
Feature2dWith3dIndex(py::dict dict) {
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;
Expand Down
23 changes: 13 additions & 10 deletions limap/ceresbase/ceres_extensions.h
Original file line number Diff line number Diff line change
Expand Up @@ -31,20 +31,23 @@ 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);
}
6 changes: 3 additions & 3 deletions limap/ceresbase/interpolation.h
Original file line number Diff line number Diff line change
Expand Up @@ -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<std::array<double, 2>>));
if (dict.contains("type")) {
Expand Down
28 changes: 14 additions & 14 deletions limap/optimize/global_pl_association/global_associator.h
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
8 changes: 4 additions & 4 deletions limap/structures/pl_bipartite.cc
Original file line number Diff line number Diff line change
Expand Up @@ -48,8 +48,8 @@ PL_Bipartite2d::PL_Bipartite2d(py::dict dict) {

// load connections
#define TMPMAPTYPE std::map<int, std::set<int>>
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
}

Expand Down Expand Up @@ -262,8 +262,8 @@ PL_Bipartite3d::PL_Bipartite3d(py::dict dict) {

// load connections
#define TMPMAPTYPE std::map<int, std::set<int>>
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
}

Expand Down
6 changes: 3 additions & 3 deletions limap/structures/pl_bipartite.h
Original file line number Diff line number Diff line change
Expand Up @@ -22,9 +22,9 @@ typedef Junction<PointTrack> 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
Expand Down
8 changes: 4 additions & 4 deletions limap/structures/pl_bipartite_base.cc
Original file line number Diff line number Diff line change
Expand Up @@ -23,14 +23,14 @@ py::dict PL_Bipartite<PTYPE, LTYPE>::as_dict() const {
template <typename PTYPE, typename LTYPE>
PL_Bipartite<PTYPE, LTYPE>::PL_Bipartite(py::dict dict) {
#define TMPMAPTYPE std::map<int, PTYPE>
ASSIGN_PYDICT_ITEM(dict, points_, TMPMAPTYPE)
ASSIGN_PYDICT_ITEM(dict, points_, TMPMAPTYPE);
#undef TMPMAPTYPE
#define TMPMAPTYPE std::map<int, LTYPE>
ASSIGN_PYDICT_ITEM(dict, lines_, TMPMAPTYPE)
ASSIGN_PYDICT_ITEM(dict, lines_, TMPMAPTYPE);
#undef TMPMAPTYPE
#define TMPMAPTYPE std::map<int, std::set<int>>
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
}

Expand Down
8 changes: 4 additions & 4 deletions limap/structures/vpline_bipartite.cc
Original file line number Diff line number Diff line change
Expand Up @@ -44,8 +44,8 @@ VPLine_Bipartite2d::VPLine_Bipartite2d(py::dict dict) {

// load connections
#define TMPMAPTYPE std::map<int, std::set<int>>
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
}

Expand Down Expand Up @@ -89,8 +89,8 @@ VPLine_Bipartite3d::VPLine_Bipartite3d(py::dict dict) {

// load connections
#define TMPMAPTYPE std::map<int, std::set<int>>
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
}

Expand Down
Loading
Loading