Skip to content

Commit 1ee5c3b

Browse files
authored
Endpoints triangulation as an option (cvg#8)
* endpoints triangulation as an option. port output folder. * fix depth-based scoring for endpoints triangulation.
1 parent 355f84e commit 1ee5c3b

9 files changed

Lines changed: 19 additions & 6 deletions

File tree

cfgs/fitnmerge/default.yaml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ use_cuda: True
1212
visualize: True
1313
skip_exists: False
1414
output_dir: null
15+
output_folder: "fitnmerge_finaltracks"
1516
load_dir: null
1617

1718
##############################

cfgs/triangulation/default.yaml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ visualize: True
1414
max_image_dim: 1600
1515
skip_exists: False
1616
output_dir: null
17+
output_folder: "finaltracks"
1718
load_dir: null
1819
n_jobs: -1 # for undistortion
1920
undistortion_output_dir: "undistorted_images"
@@ -61,6 +62,7 @@ var2d: # in pixels
6162
# triangulation config
6263
triangulation:
6364
use_exhaustive_matcher: False
65+
use_endpoints_triangulation: False
6466
add_halfpix: false
6567
min_length_2d: 0.0 # in pixels
6668
var2d: -1.0 # depending on the detector

limap/runners/line_fitnmerge.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -107,7 +107,7 @@ def line_fitnmerge(cfg, imagecols, depths, neighbors=None, ranges=None):
107107
# [F] output and visualization
108108
##########################################################
109109
# save tracks
110-
limapio.save_folder_linetracks_with_info(os.path.join(cfg["dir_save"], "fitnmerge_finaltracks"), linetracks, config=cfg, imagecols=imagecols, all_2d_segs=all_2d_segs)
110+
limapio.save_folder_linetracks_with_info(os.path.join(cfg["dir_save"], cfg["output_folder"]), linetracks, config=cfg, imagecols=imagecols, all_2d_segs=all_2d_segs)
111111
limapio.save_txt_linetracks(os.path.join(cfg["dir_save"], "fitnmerge_alltracks.txt"), linetracks, n_visible_views=4)
112112
VisTrack = limapvis.Open3DTrackVisualizer(linetracks)
113113
VisTrack.report()

limap/runners/line_triangulation.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,7 @@ def line_triangulation(cfg, imagecols, neighbors=None, ranges=None):
3939
if neighbors is None:
4040
neighbors, ranges = _runners.compute_sfminfos(cfg, imagecols)
4141
else:
42+
limapio.save_txt_metainfos(os.path.join(cfg["dir_save"], "metainfos.txt"), neighbors, ranges)
4243
neighbors = imagecols.update_neighbors(neighbors)
4344
for img_id, neighbor in neighbors.items():
4445
neighbors[img_id] = neighbors[img_id][:cfg["n_neighbors"]]
@@ -103,7 +104,7 @@ def line_triangulation(cfg, imagecols, neighbors=None, ranges=None):
103104
##########################################################
104105
# save tracks
105106
limapio.save_txt_linetracks(os.path.join(cfg["dir_save"], "alltracks.txt"), linetracks, n_visible_views=4)
106-
limapio.save_folder_linetracks_with_info(os.path.join(cfg["dir_save"], "finaltracks"), linetracks, config=cfg, imagecols=imagecols, all_2d_segs=all_2d_segs)
107+
limapio.save_folder_linetracks_with_info(os.path.join(cfg["dir_save"], cfg["output_folder"]), linetracks, config=cfg, imagecols=imagecols, all_2d_segs=all_2d_segs)
107108
VisTrack = limapvis.Open3DTrackVisualizer(linetracks)
108109
VisTrack.report()
109110
limapio.save_obj(os.path.join(cfg["dir_save"], 'triangulated_lines_nv{0}.obj'.format(cfg["n_visible_views"])), VisTrack.get_lines_np(n_visible_views=cfg["n_visible_views"]))

limap/triangulation/bindings.cc

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@ void bind_triangulator(py::module &m) {
3535
.def(py::init<py::dict>())
3636
.def_readwrite("add_halfpix", &TriangulatorConfig::add_halfpix)
3737
.def_readwrite("use_vp", &TriangulatorConfig::use_vp)
38+
.def_readwrite("use_endpoints_triangulation", &TriangulatorConfig::use_endpoints_triangulation)
3839
.def_readwrite("min_length_2d", &TriangulatorConfig::min_length_2d)
3940
.def_readwrite("var2d", &TriangulatorConfig::var2d)
4041
.def_readwrite("plane_angle_threshold", &TriangulatorConfig::plane_angle_threshold)

limap/triangulation/functions.cc

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -96,11 +96,13 @@ V3D point_triangulation(const V2D& p1, const CameraView& view1,
9696

9797
// Triangulating endpoints for triangulation
9898
Line3d triangulate_endpoints(const Line2d& l1, const CameraView& view1,
99-
const Line2d& l2, const CameraView& view2)
99+
const Line2d& l2, const CameraView& view2)
100100
{
101101
V3D pstart = point_triangulation(l1.start, view1, l2.start, view2);
102+
double z_start = view1.pose.projdepth(pstart);
102103
V3D pend = point_triangulation(l1.end, view1, l2.end, view2);
103-
return Line3d(pstart, pend);
104+
double z_end = view1.pose.projdepth(pend);
105+
return Line3d(pstart, pend, 1.0, z_start, z_end);
104106
}
105107

106108
// Asymmetric perspective to (view1, l1)

limap/triangulation/functions.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ V3D point_triangulation(const V2D& p1, const CameraView& view1,
2727

2828
// Triangulating endpoints for triangulation
2929
Line3d triangulate_endpoints(const Line2d& l1, const CameraView& view1,
30-
const Line2d& l2, const CameraView& view2);
30+
const Line2d& l2, const CameraView& view2);
3131

3232
// Asymmetric perspective to (view1, l1)
3333
// Triangulation by plane intersection

limap/triangulation/triangulator.cc

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -259,7 +259,11 @@ void Triangulator::triangulateOneNode(const int img_id, const int line_id) {
259259
continue;
260260

261261
// triangulation with weak epipolar constraints test
262-
Line3d line = triangulate(l1, view1, l2, view2);
262+
Line3d line;
263+
if (!config_.use_endpoints_triangulation)
264+
line = triangulate(l1, view1, l2, view2);
265+
else
266+
line = triangulate_endpoints(l1, view1, l2, view2);
263267
if (line.sensitivity(view1) > config_.sensitivity_threshold && line.sensitivity(view2) > config_.sensitivity_threshold)
264268
line.score = -1;
265269
if (line.score > 0) {

limap/triangulation/triangulator.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@ class TriangulatorConfig {
2525
TriangulatorConfig(py::dict dict) {
2626
ASSIGN_PYDICT_ITEM(dict, add_halfpix, bool)
2727
ASSIGN_PYDICT_ITEM(dict, use_vp, bool)
28+
ASSIGN_PYDICT_ITEM(dict, use_endpoints_triangulation, bool)
2829
ASSIGN_PYDICT_ITEM(dict, min_length_2d, double)
2930
ASSIGN_PYDICT_ITEM(dict, var2d, double);
3031
ASSIGN_PYDICT_ITEM(dict, plane_angle_threshold, double)
@@ -46,6 +47,7 @@ class TriangulatorConfig {
4647

4748
bool add_halfpix = false; // offset half pixel for each line
4849
bool use_vp = true;
50+
bool use_endpoints_triangulation = false;
4951
vplib::JLinkageConfig vpdet_config;
5052

5153
double min_length_2d = 20.0;

0 commit comments

Comments
 (0)