descriptor op• Data kinds: pairs → matrix
• Call: import fullseye as fs; fs.ledger.contour_fourier_complex(points, n_harmonics=None, parametrisation='index') (to call the implementation directly, import fourierdesc; fourierdesc.contour_fourier_complex(points, n_harmonics=None, parametrisation='index'); from the registry, opsshape2d.get("contour_fourier_complex"))
• GPU: none (CPU reference implementation only)
Turns a closed contour into the coefficients of a complex Fourier series — z(t) = Σ c_k exp(2πi k t).
Arguments:
points: (N,2) closed contour vertices. (row, col) order (same as fourierdesc).
n_harmonics: Remaining order K(|k| <= K). None up to the maximum that can be represented.
parametrisation: "index" = Make the point index an equally spaced parameter /
"arclength" = arc length and retype at equal intervals before converting.
Return value: Normally (2K+1, 3), or a real array (matrix) of (2K, 3) to leave even points up to Nyquist degree. The line is [k, Re c_k, Im c_k] k is 0, 1, -1, 2, -2, …(from low frequency).
★The key to this op is not to silently decide how to take the parametric variables. unevenly sampled Reading the contour with "index" allocates extra time to areas with dense points, The pictures are similar, but the coefficients are different (Actually, the coefficient for k=3 was 47 times different). The default is "index" (the basic meaning of FFT), but if you use it as a shape description, Choose "arclength".
★★If you select arclength'', the contour will be redrawn inside op, so the returned coefficients will be Write the redrawn contour instead of the passed array. Therefore contour_fourier_truncation_energy predicts "for redrawn contours" It is strict, and when the caller measures the error using the array at hand, it does not match (Actual measurement: 512 points, deviation of 1.15). If you want a precise prediction for the array at hand, retype with the arc length first Call it with "index".
★Resetting the arc length is not idempotent: Since the specimens are tied together with a string, the contours of the arc length are already equal. One more time moves the point up to 3.73 px (average 0.84 px) and increases the length by an additional 3.25% Shrink. Do not call twice.
• shape_description_2d family guide
• 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.
• poc_one_stroke_epicycles — py -3.11 examples/poc_one_stroke_epicycles.py
matrix as input)contour_epicycle_chain · contour_fourier_truncation_energy
descriptor)elliptic_fourier · reconstruct · invariants · normalize · descriptor_distance · fourier_smooth · from_xld · fit_circle_xld
*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.