|
ReUseX
0.0.5
3D Point Cloud Processing for Building Reuse
|
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). More...
Classes | |
| struct | PanoResection |
| One panorama's independent resection against one frame. More... | |
Functions | |
| std::vector< int > | 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< LoopEdge > | pcm_filter (std::vector< LoopEdge > edges, const std::vector< Eigen::Matrix4d > &seed, const LoopClosureOptions &opt) |
| Pairwise Consistency Maximization (Mangelson et al. | |
| 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. | |
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).
Internals exposed ONLY so the geometry and gating stages can be regression- tested without a database and without RGB-D fixtures (docs/STANDARDS.md §7; same rationale as LoopClosure's detail namespace).
Not part of the stable API — do not call from application code.
Not a stable API.
| std::vector< LoopEdge > reusex::geometry::detail::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.
For each pair (A, B) with A < B by frame index: T_AB = T_pano_A^-1 · T_pano_B, i.e. pose(A)^-1 · pose(B).
Applies, in order: min_frame_gap, the seed-disagreement gates, and the per-panorama cap (highest joint support first, ties broken on (i, j) so the output is deterministic). Sigmas scale with joint inlier support.
stats is accumulated into when non-null (counters are added, not reset), so a caller can sum across panoramas.
| std::vector< LoopEdge > reusex::geometry::detail::pcm_filter | ( | std::vector< LoopEdge > | edges, |
| const std::vector< Eigen::Matrix4d > & | seed, | ||
| const LoopClosureOptions & | opt ) |
Pairwise Consistency Maximization (Mangelson et al.
2018): return the largest mutually consistent subset of edges, where two edges are consistent when chaining them through the seed odometry closes a cycle within opt.pcm_trans_threshold / opt.pcm_rot_threshold. Sets of two or fewer edges are returned unchanged (a pair cannot outvote itself).
| 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).
Uses opt.ransac_iterations hypotheses and opt.ransac_inlier_dist as the inlier distance, refits on the full inlier set, and returns the inlier column indices (empty when fewer than 3 correspondences are given or no hypothesis was finite).