Skip to main content

chess_corners/
image.rs

1//! Optional `image::GrayImage` helpers for the unified corner detector.
2
3#[cfg(feature = "ml-refiner")]
4use crate::multiscale::find_chess_corners_with_ml;
5use crate::multiscale::{find_chess_corners, find_chess_corners_with_refiner};
6use crate::{ChessConfig, CornerDescriptor, RefinerKind};
7use chess_corners_core::ImageView;
8use image::GrayImage;
9
10/// Detect chessboard corners from a `GrayImage`.
11///
12/// This is a thin wrapper over the multiscale detector that builds an
13/// [`ImageView`] from `img` and dispatches to single- or multiscale
14/// mode based on `cfg.multiscale.pyramid.num_levels`, returning
15/// [`CornerDescriptor`] values in full-resolution pixel coordinates.
16#[must_use]
17pub fn find_chess_corners_image(img: &GrayImage, cfg: &ChessConfig) -> Vec<CornerDescriptor> {
18    let view = ImageView::from_u8_slice(img.width() as usize, img.height() as usize, img.as_raw())
19        .expect("valid view");
20    find_chess_corners(view, cfg)
21}
22
23/// Detect chessboard corners from a `GrayImage` with an explicit refiner choice.
24#[must_use]
25pub fn find_chess_corners_image_with_refiner(
26    img: &GrayImage,
27    cfg: &ChessConfig,
28    refiner: &RefinerKind,
29) -> Vec<CornerDescriptor> {
30    let view = ImageView::from_u8_slice(img.width() as usize, img.height() as usize, img.as_raw())
31        .expect("valid view");
32    find_chess_corners_with_refiner(view, cfg, refiner)
33}
34
35/// Detect chessboard corners from a `GrayImage` using the ML refiner pipeline.
36#[must_use]
37#[cfg(feature = "ml-refiner")]
38pub fn find_chess_corners_image_with_ml(
39    img: &GrayImage,
40    cfg: &ChessConfig,
41) -> Vec<CornerDescriptor> {
42    let view = ImageView::from_u8_slice(img.width() as usize, img.height() as usize, img.as_raw())
43        .expect("valid view");
44    find_chess_corners_with_ml(view, cfg)
45}