normalize — SHAPE2D descriptor op

• Data kinds: efdmodel → matrix

• Call: import fullseye as fs; fs.ledger.normalize(model, size_invariant=True) (to call the implementation directly, import fourierdesc; fourierdesc.normalize(model, size_invariant=True); from the registry, opsshape2d.get("normalize"))

Usage

Converts EFD coefficients into the coefficients of the "canonical pose" (aligned with respect to the 1st harmonic).

Kuhl–Giardina canonicalisation: (1) remove the arbitrariness of the start point using the phase of the 1st harmonic, (2) rotate the long axis of the 1st ellipse onto the reference axis to align the orientation, (3) divide by the long-axis length of the 1st harmonic to align the size. Intended for "canonical-pose reconstruction", such as overlaying or averaging several shapes.

Caution (honest): for shapes whose 1st harmonic is nearly circular (long axis ≈ short axis), the phase (theta/psi) is ill-conditioned and unstable. For invariant matching, do not use this function; use invariants / descriptor_distance (based on singular values).

Detailed usage guide

• shape_description_2d family guide

References (sample data, literature)

• Sample-data catalog (download URLs / licences) — 2-D uses skimage.data (BSD/public domain) plus synthetic images; 3-D lists download URLs for real data sources (Stanford, PDS, …).

• Operator provenance and references — the sources of the research/methods this op family came from.

• The canonical algorithm (author, year) and its uses are named in the family usage guide above.

Runnable examples (verified samples that actually call this op)

• piv_flow_from_particles — py -3.11 examples/piv_flow_from_particles.py

• poc_exoplanet_transit — py -3.11 examples/poc_exoplanet_transit.py

Ops the type connects to (they accept matrix as input)

contour_epicycle_chain · contour_fourier_truncation_energy

Same category (descriptor)

elliptic_fourier · reconstruct · invariants · descriptor_distance · fourier_smooth · from_xld · contour_fourier_complex · contour_epicycle_chain


*Provenance: fourierdesc.py — SHAPE2D operator registry. This per-op note is generated by tools/opdocs.py md (do not hand-edit).*

© 2026 Kazufumi Furuse — Fullseye operator documentation. Licensed under Apache-2.0.