ReUseX  0.0.5
3D Point Cloud Processing for Building Reuse
Loading...
Searching...
No Matches
LoopClosure.hpp File Reference
#include <Eigen/Core>
#include <Eigen/Geometry>
#include <array>
#include <random>
#include <string>
#include <vector>
Include dependency graph for LoopClosure.hpp:

Go to the source code of this file.

Classes

struct  reusex::geometry::LoopEdge
 A metric relative-pose constraint between two frames, ready to become a gtsam::BetweenFactor<Pose3>. More...
struct  reusex::geometry::LoopClosureOptions
 Parameters for wide-baseline loop-edge detection. More...
struct  reusex::geometry::LoopClosureResult
 Summary statistics from loop-edge detection. More...

Namespaces

namespace  reusex
namespace  reusex::geometry
namespace  reusex::geometry::detail
 Internals of detect_loop_edges, exposed ONLY so the geometry stages of the pipeline can be regression-tested without a database and without RGB-D fixtures (docs/STANDARDS.md ยง7; same rationale as plane_factor_consistent_residual() in PlaneGraphOptimizer.cpp).

Enumerations

enum class  reusex::geometry::LoopProposal { reusex::geometry::automatic , reusex::geometry::spatial , reusex::geometry::appearance , reusex::geometry::exhaustive }
 How loop-candidate frame pairs are proposed before geometric verification. More...

Functions

double reusex::geometry::trajectory_extent (const std::vector< Eigen::Matrix4d > &poses)
 Spatial extent of a trajectory: the diagonal of the axis-aligned bounding box of the camera centres, in metres.
double reusex::geometry::seed_disagreement_gate (double extent, double fraction, double floor_m)
 Effective seed-disagreement gate in metres, combining a scale-relative term with an absolute floor: max(fraction * extent, floor), with negative inputs treated as 0.
std::vector< LoopEdgereusex::geometry::detect_loop_edges (ProjectDB &db, const std::vector< int > &node_ids, const std::vector< Eigen::Matrix4d > &seed_poses, const LoopClosureOptions &options, LoopClosureResult *out_result=nullptr)
 Detect wide-baseline loop edges among the given frames.
std::vector< LoopEdgereusex::geometry::load_loop_edges (const std::string &path, const std::vector< int > &node_ids, LoopClosureResult *out_result=nullptr)
 Load externally-computed loop edges from a JSON file and map them onto the optimizer's frame indices.
std::vector< LoopEdgereusex::geometry::filter_consistent_loop_edges (std::vector< LoopEdge > edges, const std::vector< Eigen::Matrix4d > &seed, const LoopClosureOptions &options)
 Keep only the largest mutually consistent subset of edges (Pairwise Consistency Maximization, Mangelson et al.
std::vector< int > reusex::geometry::detail::ransac_rigid (const Eigen::Matrix3Xd &src, const Eigen::Matrix3Xd &dst, const LoopClosureOptions &opt, std::mt19937 &rng, Eigen::Matrix4d &best_T)
 RANSAC 3D-3D rigid fit: estimate best_T with dst ~= best_T * src from putative correspondences (both 3xN, column k of src matching column k of dst).
std::vector< LoopEdgereusex::geometry::detail::pcm_filter (std::vector< LoopEdge > edges, const std::vector< Eigen::Matrix4d > &seed, const LoopClosureOptions &opt)
 Pairwise Consistency Maximization (Mangelson et al.