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

Improve naming of localization and triangulation utilities #97

Merged
merged 6 commits into from
Nov 21, 2024
Merged
Changes from 1 commit
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
Prev Previous commit
Next Next commit
format
B1ueber2y committed Nov 20, 2024
commit 9391c75f16190d4901adf8a0c7c2344add283e0a
2 changes: 1 addition & 1 deletion limap/triangulation/__init__.py
Original file line number Diff line number Diff line change
@@ -7,11 +7,11 @@
compute_fundamental_matrix,
get_direction_from_VP,
get_normal_direction,
triangulate_point,
triangulate_line,
triangulate_line_by_endpoints,
triangulate_line_with_direction,
triangulate_line_with_one_point,
triangulate_point,
)

__all__ = [n for n in _triangulation.__dict__ if not n.startswith("_")] + [
11 changes: 7 additions & 4 deletions limap/triangulation/base_line_triangulator.cc
Original file line number Diff line number Diff line change
@@ -184,7 +184,7 @@ void BaseLineTriangulator::triangulateOneNode(const int img_id,
for (auto it = points_info.begin(); it != points_info.end(); ++it) {
if (sfm_points_.empty()) {
auto res = triangulate_point(it->second.first, view1,
it->second.second, view2);
it->second.second, view2);
if (res.second)
points.push_back(res.first);
} else
@@ -221,7 +221,8 @@ void BaseLineTriangulator::triangulateOneNode(const int img_id,
// Step 1.2 one point triangulation
if (!config_.disable_one_point_triangulation && !points.empty()) {
for (const V3D &p : points) {
Line3d line = triangulate_line_with_one_point(l1, view1, l2, view2, p);
Line3d line =
triangulate_line_with_one_point(l1, view1, l2, view2, p);
if (line.score > 0) {
double u1 = line.computeUncertainty(view1, config_.var2d);
double u2 = line.computeUncertainty(view2, config_.var2d);
@@ -239,7 +240,8 @@ void BaseLineTriangulator::triangulateOneNode(const int img_id,
if (vpresults_[img_id].HasVP(line_id)) {
V3D direc =
getDirectionFromVP(vpresults_[img_id].GetVP(line_id), view1);
Line3d line = triangulate_line_with_direction(l1, view1, l2, view2, direc);
Line3d line =
triangulate_line_with_direction(l1, view1, l2, view2, direc);
if (line.score > 0) {
double u1 = line.computeUncertainty(view1, config_.var2d);
double u2 = line.computeUncertainty(view2, config_.var2d);
@@ -252,7 +254,8 @@ void BaseLineTriangulator::triangulateOneNode(const int img_id,
if (vpresults_[ng_img_id].HasVP(ng_line_id)) {
V3D direc =
getDirectionFromVP(vpresults_[ng_img_id].GetVP(ng_line_id), view1);
Line3d line = triangulate_line_with_direction(l1, view1, l2, view2, direc);
Line3d line =
triangulate_line_with_direction(l1, view1, l2, view2, direc);
if (line.score > 0) {
double u1 = line.computeUncertainty(view1, config_.var2d);
double u2 = line.computeUncertainty(view2, config_.var2d);
31 changes: 18 additions & 13 deletions limap/triangulation/functions.cc
Original file line number Diff line number Diff line change
@@ -98,8 +98,7 @@ double compute_epipolar_IoU(const Line2d &l1, const CameraView &view1,
}

std::pair<V3D, bool> triangulate_point(const V2D &p1, const CameraView &view1,
const V2D &p2,
const CameraView &view2) {
const V2D &p2, const CameraView &view2) {
V3D C1 = view1.pose.center();
V3D C2 = view2.pose.center();
V3D n1e = view1.ray_direction(p1);
@@ -171,7 +170,8 @@ M3D point_triangulation_covariance(const V2D &p1, const CameraView &view1,

// Triangulating endpoints for triangulation
Line3d triangulate_line_by_endpoints(const Line2d &l1, const CameraView &view1,
const Line2d &l2, const CameraView &view2) {
const Line2d &l2,
const CameraView &view2) {
// start point
auto res_start = triangulate_point(l1.start, view1, l2.start, view2);
if (!res_start.second)
@@ -292,8 +292,8 @@ M6D line_triangulation_covariance(const Line2d &l1, const CameraView &view1,
}

// Algebraic line triangulation
Line3d triangulate_line(const Line2d &l1, const CameraView &view1, const Line2d &l2,
const CameraView &view2) {
Line3d triangulate_line(const Line2d &l1, const CameraView &view1,
const Line2d &l2, const CameraView &view2) {
// triangulate line
auto res = line_triangulation(l1, view1, l2, view2);
if (!res.second)
@@ -303,8 +303,9 @@ Line3d triangulate_line(const Line2d &l1, const CameraView &view1, const Line2d
}

// unproject endpoints with known infinite line
Line3d triangulate_line_with_infinite_line(const Line2d &l1, const CameraView &view1,
const InfiniteLine3d &inf_line) {
Line3d triangulate_line_with_infinite_line(const Line2d &l1,
const CameraView &view1,
const InfiniteLine3d &inf_line) {
InfiniteLine3d ray1_start =
InfiniteLine3d(view1.pose.center(), view1.ray_direction(l1.start));
V3D pstart = inf_line.project_to_infinite_line(ray1_start);
@@ -321,9 +322,11 @@ Line3d triangulate_line_with_infinite_line(const Line2d &l1, const CameraView &v

// Asymmetric perspective to (view1, l1)
// Triangulation with a known point
Line3d triangulate_line_with_one_point(const Line2d &l1, const CameraView &view1,
const Line2d &l2, const CameraView &view2,
const V3D &point) {
Line3d triangulate_line_with_one_point(const Line2d &l1,
const CameraView &view1,
const Line2d &l2,
const CameraView &view2,
const V3D &point) {
// project point onto plane 1
V3D n1 = getNormalDirection(l1, view1);
V3D C1 = view1.pose.center();
@@ -383,9 +386,11 @@ Line3d triangulate_line_with_one_point(const Line2d &l1, const CameraView &view1

// Asymmetric perspective to (view1, l1)
// Triangulation with known direction
Line3d triangulate_line_with_direction(const Line2d &l1, const CameraView &view1,
const Line2d &l2, const CameraView &view2,
const V3D &direction) {
Line3d triangulate_line_with_direction(const Line2d &l1,
const CameraView &view1,
const Line2d &l2,
const CameraView &view2,
const V3D &direction) {
// Step 1: project direction onto plane 1
V3D n1 = getNormalDirection(l1, view1);
V3D direc = direction - (n1.dot(direction)) * n1;
30 changes: 17 additions & 13 deletions limap/triangulation/functions.h
Original file line number Diff line number Diff line change
@@ -29,8 +29,7 @@ double compute_epipolar_IoU(const Line2d &l1, const CameraView &view1,

// point triangulation
std::pair<V3D, bool> triangulate_point(const V2D &p1, const CameraView &view1,
const V2D &p2,
const CameraView &view2);
const V2D &p2, const CameraView &view2);

Eigen::Matrix3d
point_triangulation_covariance(const V2D &p1, const CameraView &view1,
@@ -39,7 +38,7 @@ point_triangulation_covariance(const V2D &p1, const CameraView &view1,

// Triangulating endpoints for triangulation
Line3d triangulate_line_by_endpoints(const Line2d &l1, const CameraView &view1,
const Line2d &l2, const CameraView &view2);
const Line2d &l2, const CameraView &view2);

// Asymmetric perspective to (view1, l1)
// Triangulation by plane intersection
@@ -54,24 +53,29 @@ M6D line_triangulation_covariance(const Line2d &l1, const CameraView &view1,

// Asymmetric perspective to (view1, l1)
// Algebraic line triangulation
Line3d triangulate_line(const Line2d &l1, const CameraView &view1, const Line2d &l2,
const CameraView &view2);
Line3d triangulate_line(const Line2d &l1, const CameraView &view1,
const Line2d &l2, const CameraView &view2);

// unproject endpoints with known infinite line
Line3d triangulate_line_with_infinite_line(const Line2d &l1, const CameraView &view1,
const InfiniteLine3d &inf_line);
Line3d triangulate_line_with_infinite_line(const Line2d &l1,
const CameraView &view1,
const InfiniteLine3d &inf_line);

// Asymmetric perspective to (view1, l1)
// Triangulation with a known point
Line3d triangulate_line_with_one_point(const Line2d &l1, const CameraView &view1,
const Line2d &l2, const CameraView &view2,
const V3D &point);
Line3d triangulate_line_with_one_point(const Line2d &l1,
const CameraView &view1,
const Line2d &l2,
const CameraView &view2,
const V3D &point);

// Asymmetric perspective to (view1, l1)
// Triangulation with known direction
Line3d triangulate_line_with_direction(const Line2d &l1, const CameraView &view1,
const Line2d &l2, const CameraView &view2,
const V3D &direction);
Line3d triangulate_line_with_direction(const Line2d &l1,
const CameraView &view1,
const Line2d &l2,
const CameraView &view2,
const V3D &direction);

} // namespace triangulation