freeform op• Datenarten: image2d × image2d × image2d → bspline_surface
• Aufruf: import fullseye as fs; fs.ledger.fit_bspline_surface(x, y, z, kx=3, ky=3, smooth=None) (die Implementierung direkt: import bspline_surf; bspline_surf.fit_bspline_surface(x, y, z, kx=3, ky=3, smooth=None); aus dem Register: ops3d.get("fit_bspline_surface"))
Passt per kleinster Quadrate eine (standardmäßig bikubische) B-Spline-Fläche an verstreute (x, y, z) an (bisplrep).
x, y, z : array_like
Gestreute Stichprobenkoordinaten und Höhen gleicher Anzahl. Beliebige Form ist erlaubt; intern wird auf 1-D abgeflacht.
kx, ky : int
B-Spline-Grad in x/y-Richtung (1=linear, 3=kubisch). Liegt die Punktzahl unter (kx+1)*(ky+1),
wird der Grad automatisch gesenkt (Vermeidung von Entartung).
smooth : float or None
Glättungsfaktor s. None ist ein automatischer Wert auf Basis der Punktzahl (_auto_surface_smooth).
0.0 geht durch alle Punkte (interpolationsnah = neigt zu Überanpassung), größer ist glatter.
tck : list
[tx, ty, c, kx, ky]. An eval_bspline_surface / surface_residual übergeben.
ValueError
Wenn die Punkte nicht einmal für eine lineare Fläche reichen (m<4), die Längen von x/y/z nicht übereinstimmen, nicht endliche Werte vorliegen
oder wegen FITPACK-Entartung durch kollineare oder doppelte Punkte keine Approximation erhalten wird.
Ergänzung (an der Implementierung geprüft):
• Das Koordinatensystem ist frei: x, y sind beliebige ebene Koordinaten (row/col oder physische Maße), z ist die Höhe. Die 3 Arrays werden mit ravel auf 1-D abgeflacht, Gittereingabe und gestreute Eingabe werden also gleich behandelt.
• Die automatische Gradabsenkung senkt, solange (kx+1)*(ky+1) > m gilt, den größeren Grad (bei Gleichstand kx) jeweils um 1 und stoppt, wenn beide 1 sind. Die Absenkung erfolgt stillschweigend statt als Ausnahme; die tatsächlichen Grade stehen im Rückgabewert tck[3], tck[4].
• Der automatische Wert für smooth=None ist max(0, m - sqrt(2m)) (FITPACK-Empfehlung). Die Formel setzt eine Rauschvarianz von z von etwa 1 voraus, daher werden Daten mit kleiner z-Einheit und kleiner Residuenquadratsumme leicht übergeglättet. In diesem Fall explizit ein kleines smooth übergeben.
• FITPACK-Warnungen (Iterationsabbruch usw.) werden verschluckt und tck zurückgegeben. Alle Ausnahmen werden in ValueError übersetzt; auch leere Koeffizienten ergeben ValueError.
• Deterministisch (kein Zufall).
• Nachgelagert sind eval_bspline_surface (Auswertung) und surface_residual (Abweichung). Reicht globale Welligkeit niedriger Ordnung, gibt es fit_poly_surface / eval_poly_surface, aber tck und das Polynom-dict sind nicht austauschbar.
• 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.
• bspline_freeform — py -3.11 examples_3d/bspline_freeform.py
bspline_surface als Eingabe)fuse_to_voxel · eval_bspline_surface · surface_residual
freeform)eval_bspline_surface · surface_residual · fit_bspline_curve · eval_bspline_curve
*Provenance: bspline_surf.py — 3D 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.