calib_targets_charuco/detector/
params.rs1use crate::board::CharucoBoardSpec;
2use calib_targets_aruco::ScanDecodeConfig;
3use calib_targets_chessboard::{ChessboardParams, GridGraphParams};
4use serde::{Deserialize, Serialize};
5
6#[derive(Clone, Debug, Serialize, Deserialize)]
8pub struct CharucoDetectorParams {
9 pub px_per_square: f32,
11 pub chessboard: ChessboardParams,
13 pub charuco: CharucoBoardSpec,
15 pub graph: GridGraphParams,
17 pub scan: ScanDecodeConfig,
23 pub max_hamming: u8,
25 pub min_marker_inliers: usize,
27}
28
29impl CharucoDetectorParams {
30 pub fn for_board(charuco: &CharucoBoardSpec) -> Self {
32 let chessboard = ChessboardParams {
33 min_corner_strength: 0.5,
34 min_corners: 32,
35 expected_rows: Some(charuco.rows - 1),
36 expected_cols: Some(charuco.cols - 1),
37 completeness_threshold: 0.05,
38 ..ChessboardParams::default()
39 };
40
41 let graph = GridGraphParams::default();
42
43 let scan = ScanDecodeConfig {
44 marker_size_rel: charuco.marker_size_rel,
45 inset_frac: 0.06,
46 ..ScanDecodeConfig::default()
47 };
48
49 let max_hamming = charuco.dictionary.max_correction_bits.min(2);
50
51 Self {
52 px_per_square: 60.0,
53 chessboard,
54 charuco: *charuco,
55 graph,
56 scan,
57 max_hamming,
58 min_marker_inliers: 8,
59 }
60 }
61}