1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
//! Checkerboard marker target detector (checkerboard + 3 circles in the middle).
//!
//! Pipeline overview:
//! - Detect a chessboard grid from ChESS corners (partial boards are allowed).
//! - Score circular markers per-cell in image space.
//! - Match circle candidates to the known layout and estimate the grid offset.
//! - Return typed marker-board corners with optional board alignment.
//!
//! ## Quickstart
//!
//! ```
//! use calib_targets_chessboard::ChessCorner;
//! use calib_targets_core::GrayImageView;
//! use calib_targets_marker::{
//! CellCoords, CirclePolarity, MarkerBoardDetector, MarkerBoardSpec, MarkerBoardParams,
//! MarkerCircleSpec,
//! };
//!
//! let layout = MarkerBoardSpec {
//! rows: 6,
//! cols: 8,
//! cell_size: Some(1.0),
//! circles: [
//! MarkerCircleSpec {
//! cell: CellCoords { i: 2, j: 2 },
//! polarity: CirclePolarity::White,
//! },
//! MarkerCircleSpec {
//! cell: CellCoords { i: 3, j: 2 },
//! polarity: CirclePolarity::Black,
//! },
//! MarkerCircleSpec {
//! cell: CellCoords { i: 2, j: 3 },
//! polarity: CirclePolarity::White,
//! },
//! ],
//! };
//!
//! let params = MarkerBoardParams::new(layout);
//! let detector = MarkerBoardDetector::new(params);
//!
//! let pixels = vec![0u8; 32 * 32];
//! let view = GrayImageView {
//! width: 32,
//! height: 32,
//! data: &pixels,
//! };
//! let corners: Vec<ChessCorner> = Vec::new();
//!
//! let _ = detector.detect_from_image_and_corners(&view, &corners);
//! ```
pub use ;
pub use ;
pub use MarkerBoardDetector;
pub use MarkerBoardDiagnostics;
pub use ;
pub use ;