projective-grid 0.14.0

Image-free, target-agnostic projective grid recovery: label 2D feature points with (i, j) lattice coordinates under perspective
Documentation
use projective_grid::{
    detect_grid, DetectionParams, DetectionRequest, Evidence, LatticeKind, LocalAxis,
    OrientedFeature, PointFeature,
};

fn generate_features() -> Vec<OrientedFeature<2>> {
    let mut features = Vec::new();
    for v in 0..5 {
        for u in 0..5 {
            let x = 40.0 + u as f32 * 20.0 + v as f32 * 1.5;
            let y = 30.0 + v as f32 * 20.0;
            let source_index = features.len();
            features.push(OrientedFeature::new(
                PointFeature::new(source_index, nalgebra::Point2::new(x, y)),
                [
                    LocalAxis::new(0.0, Some(0.02)),
                    LocalAxis::new(std::f32::consts::FRAC_PI_2, Some(0.02)),
                ],
            ));
        }
    }
    features
}

fn main() -> Result<(), Box<dyn std::error::Error>> {
    let features = generate_features();
    let params = DetectionParams::default();
    let request = DetectionRequest::new(LatticeKind::Square, Evidence::Oriented2(&features))
        .with_params(params);
    let solution = detect_grid(request)?;
    println!("labelled corners: {}", solution.grid().entries().len());
    Ok(())
}