Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

Pipelines

This section documents each target’s complete, end-to-end detection pipeline — one page per target type. Where the Algorithms section describes each building block in isolation, a pipeline page shows how a particular target composes those blocks from a grayscale image (or a pre-detected corner cloud) to a labelled, ID-carrying detection.

Each pipeline page narrates and links the canonical stage map that lives next to the code. The crate-level docs/PIPELINE.md files are the source of truth; these pages mirror them and must not diverge.

The shared front-end

Every detector shares the same first three steps:

┌───────────┐    ┌───────────┐    ┌───────────┐    ┌───────────┐
│  Image    │ -> │  ChESS    │ -> │ Target-   │ -> │ Labelled  │
│ (u8 gray) │    │ corners   │    │ specific  │    │ grid out  │
└───────────┘    │ (front-   │    │ detector  │    │           │
                 │  end)     │    │           │    │           │
                 └───────────┘    └───────────┘    └───────────┘
  1. Input imageimage::GrayImage or a GrayImageView. The facade helpers in calib_targets::detect accept either.
  2. Corner front-end — the ChESS X-junction detector via the chess-corners crate produces a raw corner cloud (sub-pixel position + two undirected axes + strength / contrast / fit_rms). The workspace default is calib_targets::detect::default_chess_config().
  3. Grid recovery — every target then runs the same grid stack: axis clustering → the topological grid finderrecovery & validation. This is the chessboard pipeline, and it is the shared spine of all the others.
  4. Target-specific decode + IDs — self-identifying targets add their own decoder (ArUco bits, PuzzleBoard edge codes) and ID assignment on top of the recovered grid.
  5. Output — every detector produces a TargetDetection wrapping a Vec<LabeledCorner>; higher-level detectors wrap that in their own result struct with extra metadata (marker decodes, alignment, IDs). See Understanding Results.

The pages

PipelineComposesSource of truth
Regular gridclustering + topological grid + validationdocs/algorithms/topological-grid-detection.md
Chessboardthe full grid stack, precision-anchoredcrates/calib-targets-chessboard/docs/PIPELINE.md
PuzzleBoardchessboard grid + edge-code decodecrates/calib-targets-puzzleboard/docs/PIPELINE.md
ChArUcochessboard grid + ArUco decode + alignmentcrates/calib-targets-charuco/docs/PIPELINE.md
Marker boardchessboard grid + 3-circle anchoringcrates/calib-targets-marker/docs/PIPELINE.md

One builder, everywhere

There is no grid-builder choice to make. GraphBuildAlgorithm is a single-variant, #[non_exhaustive] enum (Topological) retained only as a reserved config seam; the topological grid finder is the sole builder for every target, including ChArUco. A config that carries a legacy value is re-pinned to Topological on load.

Output types

Output types are standardised in calib-targets-core as TargetDetection with LabeledCorner values. The chessboard layer’s labelling carries the precision contract every target inherits: wrong (i, j) labels are unrecoverable for downstream calibration, so the grid stage may fail to detect a corner but must never deliver a wrong label. Higher-level crates enrich that output with additional metadata (marker detections, rectified views, per-corner IDs).