Skip to main content

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, CharucoParams, MarkerLayout};
15//! use calib_targets_chessboard::ChessCorner;
16//! use calib_targets_core::GrayImageView;
17//!
18//! # fn main() -> Result<(), Box<dyn std::error::Error>> {
19//! let board = CharucoBoardSpec {
20//!     rows: 5,
21//!     cols: 7,
22//!     cell_size: 1.0,
23//!     marker_size_rel: 0.7,
24//!     dictionary: builtins::DICT_4X4_50,
25//!     marker_layout: MarkerLayout::OpenCvCharuco,
26//! };
27//!
28//! let params = CharucoParams::for_board(&board);
29//! let detector = CharucoDetector::new(params)?;
30//!
31//! let pixels = vec![0u8; 32 * 32];
32//! let view = GrayImageView {
33//!     width: 32,
34//!     height: 32,
35//!     data: &pixels,
36//! };
37//! let corners: Vec<ChessCorner> = Vec::new();
38//!
39//! let _ = detector.detect(&view, &corners)?;
40//! # Ok(())
41//! # }
42//! ```
43#![deny(missing_docs)]
44
45mod alignment;
46mod board;
47mod detector;
48mod io;
49mod validation;
50
51pub mod diagnostics;
52
53pub use alignment::CharucoAlignment;
54pub use board::{CharucoBoard, CharucoBoardError, CharucoBoardSpec, MarkerLayout};
55pub use detector::{
56    CharucoCorner, CharucoDetectError, CharucoDetectionResult, CharucoDetector, CharucoParams,
57};
58pub use io::{
59    load_board_spec_any, resolve_dictionary, BoardSpecLoadError, CharucoConfigError,
60    CharucoDetectConfig, CharucoDetectReport, CharucoIoError,
61};
62pub use validation::{
63    validate_marker_corner_links, CharucoMarkerCornerLinks, LinkCheckMode, LinkViolation,
64    LinkViolationKind, MarkerCornerLink,
65};
66
67pub use calib_targets_core::{GridAlignment, GridTransform, GRID_TRANSFORMS_D4};