descriptor op• Datenarten: pairs → matrix
• Aufruf: import fullseye as fs; fs.ledger.contour_fourier_complex(points, n_harmonics=None, parametrisation='index') (die Implementierung direkt: import fourierdesc; fourierdesc.contour_fourier_complex(points, n_harmonics=None, parametrisation='index'); aus dem Register: opsshape2d.get("contour_fourier_complex"))
Wandelt eine geschlossene Kontur in die Koeffizienten einer komplexen Fourier-Reihe um — z(t) = Σ c_k exp(2πi k t).
Argumente:
points: (N,2) Eckpunkte der geschlossenen Kontur. (row, col)-Reihenfolge (wie fourierdesc).
n_harmonics: beizubehaltende Ordnung K (|k| <= K). Bei None bis zur darstellbaren Grenze.
parametrisation: "index" = Punktindex als gleichabständigen Parameter verwenden /
"arclength" = erst auf gleiche Bogenlänge neu abtasten, dann transformieren.
Rückgabewert: reelles Array (2K+1, 3) (matrix). Zeilen sind [k, Re c_k, Im c_k], wobei k 0, 1, -1, 2, -2, … ist (von niedriger Frequenz an).
★Die Parametrisierung nicht stillschweigend per Standard festzulegen ist der Kern dieses op. Liest man eine ungleichmäßig abgetastete Kontur mit "index", wird dichten Stellen zusätzliche Zeit zugeteilt, und das Bild sieht ähnlich aus, aber die Koeffizienten sind etwas anderes (gemessen: der Koeffizient bei k=3 wich um den Faktor 47 ab). Standard ist "index" (die schlichte Bedeutung der FFT), aber für eine Formbeschreibung "arclength" wählen.
★★Mit "arclength" wird die Kontur innerhalb des op neu abgetastet, daher beschreiben die zurückgegebenen Koeffizienten die neu abgetastete Kontur, nicht das übergebene Array. Deshalb ist die Vorhersage von contour_fourier_truncation_energy "für die neu abgetastete Kontur" exakt, und misst der Aufrufer den Fehler am eigenen Array, passt es nicht (gemessen: Abweichung 1.15 bei 512 Punkten). Wer eine exakte Vorhersage für das eigene Array will, tastet zuerst nach Bogenlänge neu ab und ruft dann mit "index" auf.
★Neuabtastung nach Bogenlänge ist nicht idempotent: Die Abtastpunkte werden durch Sehnen verbunden, daher verschiebt nochmals 1-mal angewendet auf eine bereits gleichbogige Kontur die Punkte um bis zu 3.73 px (Mittel 0.84 px), und die Länge schrumpft um weitere 3.25 %. Nicht zweimal anwenden.
• Leitfaden zur Familie shape_description_2d
• Katalog der Beispieldaten (Download-URLs / Lizenzen) — 2-D nutzt skimage.data (BSD/Public Domain) plus synthetische Bilder, 3-D nennt Download-URLs echter Datenquellen (Stanford, PDS, …).
• Herkunft und Literatur der Operatoren — die Quellen der Forschung/Verfahren, auf denen diese Operatorfamilie beruht.
• Der kanonische Algorithmus (Autor, Jahr) und seine Anwendungen stehen im Familienleitfaden oben.
• poc_one_stroke_epicycles — py -3.11 examples/poc_one_stroke_epicycles.py
matrix als Eingabe)contour_epicycle_chain · contour_fourier_truncation_energy
descriptor)elliptic_fourier · reconstruct · invariants · normalize · descriptor_distance · fourier_smooth · from_xld · contour_epicycle_chain
*Provenance: fourierdesc.py — SHAPE2D Operator-Registry. Diese Notiz wird von tools/opdocs.py md erzeugt (nicht von Hand bearbeiten).*
© 2026 Kazufumi Furuse — Fullseye operator documentation. Licensed under Apache-2.0.