Skip to main content

SquareGridHomographyMesh

Struct SquareGridHomographyMesh 

Source
pub struct SquareGridHomographyMesh<F: Float = f32> {
    pub min_i: i32,
    pub min_j: i32,
    pub cells_x: usize,
    pub cells_y: usize,
    pub px_per_cell: F,
    pub valid_cells: usize,
    pub rect_width: usize,
    pub rect_height: usize,
    /* private fields */
}
Expand description

Per-cell homography mesh over a 2D grid.

Maps between a rectified coordinate system (uniform grid spacing) and the original image coordinates, using one homography per grid cell.

Fields§

§min_i: i32

Minimum grid index (corner space).

§min_j: i32

Minimum grid index (corner space).

§cells_x: usize

Number of cells (squares) horizontally.

§cells_y: usize

Number of cells (squares) vertically.

§px_per_cell: F

Rectified pixels per grid cell.

§valid_cells: usize

Number of cells that have all 4 corners and a valid homography.

§rect_width: usize

Width of the rectified image in pixels.

§rect_height: usize

Height of the rectified image in pixels.

Implementations§

Source§

impl<F: Float> SquareGridHomographyMesh<F>

Source

pub fn from_corners( corners: &HashMap<GridCoords, Point2<F>>, px_per_cell: F, ) -> Result<Self, GridMeshError>

Build per-cell homographies from a grid corner map.

  • corners: map from grid index to image position.
  • px_per_cell: rectified pixels per grid cell.

Equivalent to Self::from_corners_with_min_singular_value with F::zero() — every cell whose four corners are present and whose homography solves successfully is accepted, regardless of conditioning.

Source

pub fn from_corners_with_min_singular_value( corners: &HashMap<GridCoords, Point2<F>>, px_per_cell: F, min_singular_value: F, ) -> Result<Self, GridMeshError>

Variant of Self::from_corners that skips cells whose homography is ill-conditioned.

A cell is treated as invalid (a “hole”) when the smallest singular value of its 3×3 homography matrix falls below min_singular_value. The threshold is in the same units as the matrix entries; for the standard (grid_corner_space → image_pixels) fit, a threshold around 1e-3 × px_per_cell rejects cells where three of the four corners are nearly collinear in pixel space.

Cells skipped this way are silently ignored, exactly like cells missing one or more corners. The error variant GridMeshError::HomographyFailed is still returned only when the underlying solver fails — a strictly different failure mode from “the solver succeeded but the result is degenerate”.

Source

pub fn rect_to_img(&self, p_rect: Point2<F>) -> Option<Point2<F>>

Map a point in global rectified pixel coordinates to image coordinates.

Returns None if the point lies outside the mesh or the cell is invalid.

Source

pub fn cell_quality(&self, ci: usize, cj: usize) -> Option<HomographyQuality<F>>

Per-cell homography quality, or None when the cell is missing or outside the mesh. Returns the quality even for cells marked invalid by the conditioning gate so callers can introspect why a cell was rejected.

Source

pub fn cell_rect_to_img( &self, ci: usize, cj: usize, p_cell: Point2<F>, ) -> Option<Point2<F>>

Map a point in cell-local rectified coordinates to image coordinates.

  • ci, cj: cell indices in 0..cells_x × 0..cells_y
  • p_cell: point in [0..px_per_cell]²
Source

pub fn cell_corners_img(&self, ci: usize, cj: usize) -> Option<[Point2<F>; 4]>

Get the 4 image-space corners of a cell (TL, TR, BR, BL order).

Trait Implementations§

Source§

impl<F: Clone + Float> Clone for SquareGridHomographyMesh<F>

Source§

fn clone(&self) -> SquareGridHomographyMesh<F>

Returns a duplicate of the value. Read more
1.0.0 (const: unstable) · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl<F: Debug + Float> Debug for SquareGridHomographyMesh<F>

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Az for T

Source§

fn az<Dst>(self) -> Dst
where T: Cast<Dst>,

Casts the value.
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<Src, Dst> CastFrom<Src> for Dst
where Src: Cast<Dst>,

Source§

fn cast_from(src: Src) -> Dst

Casts the value.
Source§

impl<T> CheckedAs for T

Source§

fn checked_as<Dst>(self) -> Option<Dst>
where T: CheckedCast<Dst>,

Casts the value.
Source§

impl<Src, Dst> CheckedCastFrom<Src> for Dst
where Src: CheckedCast<Dst>,

Source§

fn checked_cast_from(src: Src) -> Option<Dst>

Casts the value.
Source§

impl<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T> Instrument for T

Source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an Instrumented wrapper. Read more
Source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<Src, Dst> LosslessTryInto<Dst> for Src
where Dst: LosslessTryFrom<Src>,

Source§

fn lossless_try_into(self) -> Option<Dst>

Performs the conversion.
Source§

impl<Src, Dst> LossyInto<Dst> for Src
where Dst: LossyFrom<Src>,

Source§

fn lossy_into(self) -> Dst

Performs the conversion.
Source§

impl<T> OverflowingAs for T

Source§

fn overflowing_as<Dst>(self) -> (Dst, bool)
where T: OverflowingCast<Dst>,

Casts the value.
Source§

impl<Src, Dst> OverflowingCastFrom<Src> for Dst
where Src: OverflowingCast<Dst>,

Source§

fn overflowing_cast_from(src: Src) -> (Dst, bool)

Casts the value.
Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<T> SaturatingAs for T

Source§

fn saturating_as<Dst>(self) -> Dst
where T: SaturatingCast<Dst>,

Casts the value.
Source§

impl<Src, Dst> SaturatingCastFrom<Src> for Dst
where Src: SaturatingCast<Dst>,

Source§

fn saturating_cast_from(src: Src) -> Dst

Casts the value.
Source§

impl<T> StrictAs for T

Source§

fn strict_as<Dst>(self) -> Dst
where T: StrictCast<Dst>,

Casts the value.
Source§

impl<Src, Dst> StrictCastFrom<Src> for Dst
where Src: StrictCast<Dst>,

Source§

fn strict_cast_from(src: Src) -> Dst

Casts the value.
Source§

impl<SS, SP> SupersetOf<SS> for SP
where SS: SubsetOf<SP>,

Source§

fn to_subset(&self) -> Option<SS>

The inverse inclusion map: attempts to construct self from the equivalent element of its superset. Read more
Source§

fn is_in_subset(&self) -> bool

Checks if self is actually part of its subset T (and can be converted to it).
Source§

fn to_subset_unchecked(&self) -> SS

Use with care! Same as self.to_subset but without any property checks. Always succeeds.
Source§

fn from_subset(element: &SS) -> SP

The inclusion map: converts self to the equivalent element of its superset.
Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
Source§

impl<T> UnwrappedAs for T

Source§

fn unwrapped_as<Dst>(self) -> Dst
where T: UnwrappedCast<Dst>,

Casts the value.
Source§

impl<Src, Dst> UnwrappedCastFrom<Src> for Dst
where Src: UnwrappedCast<Dst>,

Source§

fn unwrapped_cast_from(src: Src) -> Dst

Casts the value.
Source§

impl<T> WithSubscriber for T

Source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

impl<T> WrappingAs for T

Source§

fn wrapping_as<Dst>(self) -> Dst
where T: WrappingCast<Dst>,

Casts the value.
Source§

impl<Src, Dst> WrappingCastFrom<Src> for Dst
where Src: WrappingCast<Dst>,

Source§

fn wrapping_cast_from(src: Src) -> Dst

Casts the value.