Expand description
Local Radon-peak subpixel refiner.
This is a per-candidate adaptation of the localized Radon transform introduced in Duda & Frese 2018, “Accurate Detection and Localization of Checkerboard Corners for Calibration”. The original paper proposes a whole-image detector in which the response is evaluated on every pixel of a 2× supersampled image, post-blurred with a small box filter, and the subpixel corner is recovered by a Gaussian peak fit. The refiner implemented here performs the same three steps, but only inside a small region of interest around an existing ChESS candidate.
§Algorithm
For each seed (cx, cy):
- Evaluate the localized Radon response
(max − min)²over four discrete ray anglesα ∈ {0, π/4, π/2, 3π/4}on a dense grid of samples around the seed. Ray integration and response-grid sampling both use step1 / image_upsamplephysical pixels, equivalent to operating on a 2×-supersampled image (paper §3.1 step 2). - Smooth the response map with a
(2·response_blur_radius+1)²box filter (paper §3.1 step 7, default 3×3). - Locate the discrete argmax. Reject border hits.
- Fit a parabola in
xandythrough the argmax and its two neighbours along each axis. By default the fit is performed onlog(response)(“Gaussian peak fit”, paper §3.1 step 8), which is robust to mild plateauing of the raw response.
The returned offset is in the seed’s pixel frame; callers do not need to know about the response-grid density.
§Status
The refiner is expected to recover sub-0.1 px accuracy on clean chessboard patches with the default configuration. Noise-tolerance follows the paper’s empirical behaviour — smoothing of the response map is what makes the peak fit stable rather than the ray integration alone.
Re-exports§
pub use crate::detect::radon::primitives::PeakFitMode;
Structs§
- Radon
Peak Config - Configuration for
RadonPeakRefiner. - Radon
Peak Refiner - Subpixel refiner built on a local Duda-Frese-style Radon response.