Skip to main content

projective_grid/
lib.rs

1//! Image-free recovery of regular projective grids from 2D point evidence.
2//!
3//! The ordinary workflow has one entry point and production defaults:
4//!
5//! ```rust
6//! use nalgebra::Point2;
7//! use projective_grid::{
8//!     detect_grid, DetectionRequest, Evidence, LatticeKind, LocalAxis,
9//!     OrientedFeature, PointFeature,
10//! };
11//!
12//! let features = vec![
13//!     OrientedFeature::new(
14//!         PointFeature::new(0, Point2::new(0.0, 0.0)),
15//!         [LocalAxis::new(0.0, None), LocalAxis::new(1.57, None)],
16//!     ),
17//!     OrientedFeature::new(
18//!         PointFeature::new(1, Point2::new(10.0, 0.0)),
19//!         [LocalAxis::new(0.0, None), LocalAxis::new(1.57, None)],
20//!     ),
21//!     OrientedFeature::new(
22//!         PointFeature::new(2, Point2::new(10.0, 10.0)),
23//!         [LocalAxis::new(0.0, None), LocalAxis::new(1.57, None)],
24//!     ),
25//!     OrientedFeature::new(
26//!         PointFeature::new(3, Point2::new(0.0, 10.0)),
27//!         [LocalAxis::new(0.0, None), LocalAxis::new(1.57, None)],
28//!     ),
29//! ];
30//! let request = DetectionRequest::new(
31//!     LatticeKind::Square,
32//!     Evidence::Oriented2(&features),
33//! );
34//! let detection = detect_grid(request)?;
35//! # assert_eq!(detection.grid().entries().len(), 4);
36//! # Ok::<(), projective_grid::GridError>(())
37//! ```
38//!
39//! Pattern-specific detector builders use the curated [`expert`] namespace.
40//! Exact intermediate evidence is available through the opt-in `diagnostics`
41//! feature.
42
43#![deny(missing_docs)]
44
45mod check;
46mod cluster;
47mod detect;
48#[cfg(feature = "diagnostics")]
49pub mod diagnostics;
50mod error;
51pub mod expert;
52mod feature;
53mod float;
54mod geometry;
55mod lattice;
56mod orient;
57mod result;
58mod shared;
59mod topological;
60
61pub use crate::check::{check_consistency, ConsistencyParams, ConsistencyRequest};
62pub use crate::detect::{
63    detect_grid, detect_grid_all, DetectionParams, DetectionRequest, Evidence,
64};
65pub use crate::error::{EvidenceKind, GridError, GridTask};
66pub use crate::feature::{CoordinateHypothesis, LocalAxis, OrientedFeature, PointFeature};
67pub use crate::lattice::{Coord, GridDimensions, LatticeKind};
68pub use crate::result::{
69    ConsistencyReport, GridDetection, GridEntry, LabelledGrid, LatticeFit, ResidualSummary,
70};