fit_bspline_surface — 3D 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"))

Verwendung

Passt per kleinster Quadrate eine (standardmäßig bikubische) B-Spline-Fläche an verstreute (x, y, z) an (bisplrep).

Parameters

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.

Returns

tck : list

[tx, ty, c, kx, ky]. An eval_bspline_surface / surface_residual übergeben.

Raises

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.

Referenzen (Beispieldaten, Literatur)

• 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.

Ausführbare Beispiele (verifizierte Samples, die diesen Operator wirklich aufrufen)

• bspline_freeform — py -3.11 examples_3d/bspline_freeform.py

Typkompatible Folge-Operatoren (nehmen bspline_surface als Eingabe)

fuse_to_voxel · eval_bspline_surface · surface_residual

Gleiche Kategorie (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.