ReUseX  0.0.5
3D Point Cloud Processing for Building Reuse
Loading...
Searching...
No Matches
reusex::geometry::PanoramaLoopOptions Struct Reference

Parameters for panorama-derived loop-edge detection. More...

#include <PanoramaLoopEdges.hpp>

Public Attributes

bool enable = false
 Off by default; opt in with rux optimize --loop-closure --use-panoramas.
int max_frames = 240
 Panorama alignment matches a temporal window around the timestamp-seed frame (PanoramaAlignmentOptions::candidate_window), every pair of which is closer than min_frame_gap — so it could never yield a loop edge.
int min_candidate_frames = 8
 Skip frames whose colour/depth cannot be read rather than failing; a scan with fewer than this many usable candidates cannot support loop edges.
int n_yaw = 8
 perspective slices around the equator
double fov_deg = 90.0
 per-slice horizontal FOV (overlapping)
int slice = 1008
 slice size (px, square)
int max_features = 3000
 ORB features per image.
float ratio_test = 0.85f
 Lowe ratio threshold.
float min_depth = 0.3f
 ignore frame keypoints outside [min,max] (m)
float max_depth = 6.0f
int min_frame_correspondences = 10
 A frame needs this many slice correspondences before resection is attempted.
int min_slice_correspondences = 6
 A single (slice, frame) pair needs this many correspondences to seed the resection with solvePnPRansac (which needs >= 4 for EPnP; 6 gives it margin).
int min_frame_inliers = 20
 Accept a frame's independent resection above this many gated inliers.
float ransac_reproj_px = 5.0f
 solvePnPRansac reprojection threshold
int ransac_iterations = 500
int refine_iterations = 10
 bearing-space Gauss-Newton steps
double max_pano_distance = 8.0
 Reject a resection whose panorama centre sits further than this from the frame (m).
int max_edges_per_panorama = 24
 Cap the edges contributed per panorama (highest joint inlier support first).
float base_sigma_trans = 0.15f
 Base sigmas at min_frame_inliers support, shrinking as sqrt(min_frame_inliers / inliers) down to the floors — the same inlier-scaling law LoopClosureOptions uses.
float base_sigma_rot = 0.06f
 rad
float min_sigma_trans = 0.05f
 floor on the translational std (m)
float min_sigma_rot = 0.025f
 floor on the rotational std (rad)
unsigned seed = 42
 RANSAC determinism (docs/STANDARDS.md §6).

Detailed Description

Parameters for panorama-derived loop-edge detection.

The ORB / slicing defaults deliberately mirror PanoramaAlignmentOptions so the two front-ends see the same features; the frame-selection and edge-emission knobs are specific to loop closure.

Definition at line 72 of file PanoramaLoopEdges.hpp.

Member Data Documentation

◆ base_sigma_rot

float reusex::geometry::PanoramaLoopOptions::base_sigma_rot = 0.06f

rad

Definition at line 136 of file PanoramaLoopEdges.hpp.

◆ base_sigma_trans

float reusex::geometry::PanoramaLoopOptions::base_sigma_trans = 0.15f

Base sigmas at min_frame_inliers support, shrinking as sqrt(min_frame_inliers / inliers) down to the floors — the same inlier-scaling law LoopClosureOptions uses.

Deliberately looser than the ORB pair front-end: a panorama edge chains TWO independent resections, so its error is the composition of both. m

Definition at line 135 of file PanoramaLoopEdges.hpp.

◆ enable

bool reusex::geometry::PanoramaLoopOptions::enable = false

Off by default; opt in with rux optimize --loop-closure --use-panoramas.

Definition at line 74 of file PanoramaLoopEdges.hpp.

◆ fov_deg

double reusex::geometry::PanoramaLoopOptions::fov_deg = 90.0

per-slice horizontal FOV (overlapping)

Definition at line 91 of file PanoramaLoopEdges.hpp.

◆ max_depth

float reusex::geometry::PanoramaLoopOptions::max_depth = 6.0f

Definition at line 98 of file PanoramaLoopEdges.hpp.

◆ max_edges_per_panorama

int reusex::geometry::PanoramaLoopOptions::max_edges_per_panorama = 24

Cap the edges contributed per panorama (highest joint inlier support first).

One panorama matching many frames would otherwise dominate the graph with O(F^2) mutually-derived edges that share the same resection errors and are therefore NOT independent measurements.

Definition at line 129 of file PanoramaLoopEdges.hpp.

◆ max_features

int reusex::geometry::PanoramaLoopOptions::max_features = 3000

ORB features per image.

Definition at line 95 of file PanoramaLoopEdges.hpp.

◆ max_frames

int reusex::geometry::PanoramaLoopOptions::max_frames = 240

Panorama alignment matches a temporal window around the timestamp-seed frame (PanoramaAlignmentOptions::candidate_window), every pair of which is closer than min_frame_gap — so it could never yield a loop edge.

Loop-edge detection instead sweeps the WHOLE trajectory, evenly subsampled to this many frames. That global sweep is what lets one panorama tie temporally-distant revisits together; it is also the dominant cost (slices x frames descriptor matches), hence the budget.

Definition at line 84 of file PanoramaLoopEdges.hpp.

◆ max_pano_distance

double reusex::geometry::PanoramaLoopOptions::max_pano_distance = 8.0

Reject a resection whose panorama centre sits further than this from the frame (m).

Bearing resection from a narrow match cone is weakly constrained in translation and can slide the centre far away at a still small angular residual; the panorama was physically captured within a room of the frames it matches. Mirrors PanoramaAlignmentOptions:: max_correction_m. <= 0 disables.

Definition at line 122 of file PanoramaLoopEdges.hpp.

◆ min_candidate_frames

int reusex::geometry::PanoramaLoopOptions::min_candidate_frames = 8

Skip frames whose colour/depth cannot be read rather than failing; a scan with fewer than this many usable candidates cannot support loop edges.

Definition at line 87 of file PanoramaLoopEdges.hpp.

◆ min_depth

float reusex::geometry::PanoramaLoopOptions::min_depth = 0.3f

ignore frame keypoints outside [min,max] (m)

Definition at line 97 of file PanoramaLoopEdges.hpp.

◆ min_frame_correspondences

int reusex::geometry::PanoramaLoopOptions::min_frame_correspondences = 10

A frame needs this many slice correspondences before resection is attempted.

Lower than the alignment path's pooled requirement because the pool here is ONE frame, not all candidates.

Definition at line 104 of file PanoramaLoopEdges.hpp.

◆ min_frame_inliers

int reusex::geometry::PanoramaLoopOptions::min_frame_inliers = 20

Accept a frame's independent resection above this many gated inliers.

The binding quality gate: a weak resection makes a wrong edge, and unlike the alignment path there is no second chance from other frames' points.

Definition at line 112 of file PanoramaLoopEdges.hpp.

◆ min_sigma_rot

float reusex::geometry::PanoramaLoopOptions::min_sigma_rot = 0.025f

floor on the rotational std (rad)

Definition at line 138 of file PanoramaLoopEdges.hpp.

◆ min_sigma_trans

float reusex::geometry::PanoramaLoopOptions::min_sigma_trans = 0.05f

floor on the translational std (m)

Definition at line 137 of file PanoramaLoopEdges.hpp.

◆ min_slice_correspondences

int reusex::geometry::PanoramaLoopOptions::min_slice_correspondences = 6

A single (slice, frame) pair needs this many correspondences to seed the resection with solvePnPRansac (which needs >= 4 for EPnP; 6 gives it margin).

Mirrors PanoramaAlignmentOptions::min_slice_correspondences.

Definition at line 108 of file PanoramaLoopEdges.hpp.

◆ n_yaw

int reusex::geometry::PanoramaLoopOptions::n_yaw = 8

perspective slices around the equator

Definition at line 90 of file PanoramaLoopEdges.hpp.

◆ ransac_iterations

int reusex::geometry::PanoramaLoopOptions::ransac_iterations = 500

Definition at line 114 of file PanoramaLoopEdges.hpp.

◆ ransac_reproj_px

float reusex::geometry::PanoramaLoopOptions::ransac_reproj_px = 5.0f

solvePnPRansac reprojection threshold

Definition at line 113 of file PanoramaLoopEdges.hpp.

◆ ratio_test

float reusex::geometry::PanoramaLoopOptions::ratio_test = 0.85f

Lowe ratio threshold.

Definition at line 96 of file PanoramaLoopEdges.hpp.

◆ refine_iterations

int reusex::geometry::PanoramaLoopOptions::refine_iterations = 10

bearing-space Gauss-Newton steps

Definition at line 115 of file PanoramaLoopEdges.hpp.

◆ seed

unsigned reusex::geometry::PanoramaLoopOptions::seed = 42

RANSAC determinism (docs/STANDARDS.md §6).

Definition at line 140 of file PanoramaLoopEdges.hpp.

◆ slice

int reusex::geometry::PanoramaLoopOptions::slice = 1008

slice size (px, square)

Definition at line 92 of file PanoramaLoopEdges.hpp.


The documentation for this struct was generated from the following file: