55#include "reusex/slam/LoopClosure.hpp"
182 const std::vector<Eigen::Matrix4d> &seed_poses,
214 const std::vector<Eigen::Matrix4d> &seed_poses,
Internals of detect_loop_edges, exposed ONLY so the geometry stages of the pipeline can be regression...
std::vector< LoopEdge > edges_from_resections(std::vector< PanoResection > resections, const std::vector< Eigen::Matrix4d > &seed_poses, const PanoramaLoopOptions &opt, const LoopClosureOptions &gates, PanoramaLoopResult *stats=nullptr)
Turn one panorama's per-frame resections into gated loop edges.
std::vector< LoopEdge > detect_panorama_loop_edges(ProjectDB &db, const std::vector< int > &node_ids, const std::vector< Eigen::Matrix4d > &seed_poses, const PanoramaLoopOptions &options, const LoopClosureOptions &gates, PanoramaLoopResult *out_result=nullptr)
Detect panorama-derived wide-baseline loop edges.
Parameters for wide-baseline loop-edge detection.
Parameters for panorama-derived loop-edge detection.
double fov_deg
per-slice horizontal FOV (overlapping)
double max_pano_distance
Reject a resection whose panorama centre sits further than this from the frame (m).
int refine_iterations
bearing-space Gauss-Newton steps
int max_edges_per_panorama
Cap the edges contributed per panorama (highest joint inlier support first).
int max_features
ORB features per image.
float min_sigma_trans
floor on the translational std (m)
int max_frames
Panorama alignment matches a temporal window around the timestamp-seed frame (PanoramaAlignmentOption...
float ransac_reproj_px
solvePnPRansac reprojection threshold
float min_sigma_rot
floor on the rotational std (rad)
float base_sigma_trans
Base sigmas at min_frame_inliers support, shrinking as sqrt(min_frame_inliers / inliers) down to the ...
int n_yaw
perspective slices around the equator
int min_slice_correspondences
A single (slice, frame) pair needs this many correspondences to seed the resection with solvePnPRansa...
bool enable
Off by default; opt in with rux optimize --loop-closure --use-panoramas.
float min_depth
ignore frame keypoints outside [min,max] (m)
int min_frame_inliers
Accept a frame's independent resection above this many gated inliers.
float ratio_test
Lowe ratio threshold.
int min_frame_correspondences
A frame needs this many slice correspondences before resection is attempted.
unsigned seed
RANSAC determinism (docs/STANDARDS.md §6).
int slice
slice size (px, square)
int min_candidate_frames
Skip frames whose colour/depth cannot be read rather than failing; a scan with fewer than this many u...
Statistics from panorama loop-edge detection.
int proposed
candidate frame pairs before gating
int dropped_seed_gate
rejected: min/max seed-disagreement
int frames_resected
accepted independent per-frame resections
int dropped_gap
rejected: closer than min_frame_gap
int total_inliers
summed supporting inliers
int dropped_cap
rejected: max_edges_per_panorama
int panoramas_matched
panoramas that resected >= 2 frames
int panoramas
panoramas in the project
One panorama's independent resection against one frame.
Eigen::Matrix4d T_pano_frame
pano-from-frame: maps a point in the frame's optical coordinates into the panorama's coordinates.
int frame
index into the optimizer's frame vector
int inliers
gated bearing inliers supporting this resection