#[non_exhaustive]pub struct CornerDescriptor {
pub x: f32,
pub y: f32,
pub response: f32,
pub contrast: f32,
pub fit_rms: f32,
pub axes: [AxisEstimate; 2],
}Expand description
Describes a detected chessboard corner in full-resolution image coordinates.
§Axis polarity convention
Local chessboard corner intensity patterns have exact 180° symmetry,
so assigning an absolute [0, 2π) direction to any single axis ray
is not possible from ring-local data. Instead the two axes are
reported jointly:
axes[0].anglelies in[0, π)— the “line direction” of axis 1.axes[1].anglelies in(axes[0].angle, axes[0].angle + π) ⊂ [0, 2π).
Together they satisfy: rotating CCW (in the usual atan2(dy, dx)
sense — note: in image pixel coordinates with y-axis pointing down,
this is a clockwise visual rotation) from axes[0].angle toward
axes[1].angle traverses a dark sector of the corner. The
second half-turn (axes[0].angle + π → axes[1].angle + π) crosses
the second dark sector; the two remaining sectors are bright.
Each axis direction is signed as a f32 in [0, 2π); the axes are
not assumed orthogonal (holds up under projective warp).
All crate::orientation::OrientationMethod variants emit axes
under this same convention, so consumers may compare axes[0]
(e.g. for slot-parity matching between cardinal grid neighbours)
across methods without method-aware translation.
Fields (Non-exhaustive)§
This struct is marked as non-exhaustive
Struct { .. } syntax; cannot be matched against without a wildcard ..; and struct update syntax will not work.x: f32Subpixel position in full-resolution image pixels.
y: f32Subpixel y position in full-resolution image pixels.
response: f32Raw, unnormalized detector response at the detected peak. For
the ChESS path this is R = SR − DR − 16·MR
(see chess::response::chess_response_u8). Units are 8-bit
pixel sums; data-dependent. Do not interpret it as a probability,
a contrast, or a normalized strength.
contrast: f32Bright/dark amplitude (|A|, ≥ 0) recovered by the two-axis
orientation fit (see crate::orientation). Units are gray
levels. Larger means a stronger bright/dark separation at the
ring radius. This is an independent quantity from
Self::response — they are computed by different estimators
and must not be compared against each other or against the same
threshold.
fit_rms: f32RMS fit residual of the two-axis intensity model (gray levels). Smaller = tighter match to an ideal chessboard corner.
axes: [AxisEstimate; 2]The two local grid axis directions with per-axis 1σ precision.
Implementations§
Source§impl CornerDescriptor
impl CornerDescriptor
Sourcepub fn new(
x: f32,
y: f32,
response: f32,
contrast: f32,
fit_rms: f32,
axes: [AxisEstimate; 2],
) -> Self
pub fn new( x: f32, y: f32, response: f32, contrast: f32, fit_rms: f32, axes: [AxisEstimate; 2], ) -> Self
Construct a CornerDescriptor.
Trait Implementations§
Source§impl Clone for CornerDescriptor
impl Clone for CornerDescriptor
Source§fn clone(&self) -> CornerDescriptor
fn clone(&self) -> CornerDescriptor
1.0.0 (const: unstable) · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read moreSource§impl Debug for CornerDescriptor
impl Debug for CornerDescriptor
impl Copy for CornerDescriptor
Auto Trait Implementations§
impl Freeze for CornerDescriptor
impl RefUnwindSafe for CornerDescriptor
impl Send for CornerDescriptor
impl Sync for CornerDescriptor
impl Unpin for CornerDescriptor
impl UnsafeUnpin for CornerDescriptor
impl UnwindSafe for CornerDescriptor
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
§impl<T> Instrument for T
impl<T> Instrument for T
§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read more