calib_targets_charuco/lib.rs
1//! ChArUco-related utilities.
2//!
3//! Current focus:
4//! - chessboard detection from ChESS corners,
5//! - per-cell marker decoding (no full-image warp by default),
6//! - alignment to a known board definition and corner ID assignment.
7//!
8//! Marker dictionaries and decoding live in `calib-targets-aruco`.
9//!
10//! ## Quickstart
11//!
12//! ```no_run
13//! use calib_targets_aruco::builtins;
14//! use calib_targets_charuco::{CharucoBoardSpec, CharucoDetector, CharucoDetectorParams, MarkerLayout};
15//! use calib_targets_core::{Corner, GrayImageView};
16//!
17//! # fn main() -> Result<(), Box<dyn std::error::Error>> {
18//! let board = CharucoBoardSpec {
19//! rows: 5,
20//! cols: 7,
21//! cell_size: 1.0,
22//! marker_size_rel: 0.7,
23//! dictionary: builtins::DICT_4X4_50,
24//! marker_layout: MarkerLayout::OpenCvCharuco,
25//! };
26//!
27//! let params = CharucoDetectorParams::for_board(&board);
28//! let detector = CharucoDetector::new(params)?;
29//!
30//! let pixels = vec![0u8; 32 * 32];
31//! let view = GrayImageView {
32//! width: 32,
33//! height: 32,
34//! data: &pixels,
35//! };
36//! let corners: Vec<Corner> = Vec::new();
37//!
38//! let _ = detector.detect(&view, &corners)?;
39//! # Ok(())
40//! # }
41//! ```
42
43mod alignment;
44mod board;
45mod detector;
46mod io;
47mod validation;
48
49pub use alignment::CharucoAlignment;
50pub use board::{CharucoBoard, CharucoBoardError, CharucoBoardSpec, MarkerLayout};
51pub use detector::{
52 CharucoDetectError, CharucoDetectionResult, CharucoDetector, CharucoDetectorParams,
53};
54pub use io::{CharucoConfigError, CharucoDetectConfig, CharucoDetectReport, CharucoIoError};
55pub use validation::{
56 validate_marker_corner_links, CharucoMarkerCornerLinks, LinkCheckMode, LinkViolation,
57 LinkViolationKind, MarkerCornerLink,
58};
59
60pub use calib_targets_core::{GridAlignment, GridTransform, GRID_TRANSFORMS_D4};