deform op• Datenarten: points × points → points
• Aufruf: import fullseye as fs; fs.ledger.register_nonrigid(src, dst, iters=20, lam=1.0, k_smooth=None) (die Implementierung direkt: import deform3d; deform3d.register_nonrigid(src, dst, iters=20, lam=1.0, k_smooth=None); aus dem Register: ops3d.get("register_nonrigid"))
• Rückgabewert über das Register: fullseye.ledger.register_nonrigid(...) liefert nur den Wert des deklarierten Out-Typs points (die zugrunde liegende Funktion gibt zusätzlich Hilfsinformationen zurück). Wird das Verworfene gebraucht, nutze fullseye.ledger.register_nonrigid.raw(...) oder rufe deform3d.register_nonrigid direkt auf.
• Rückgabe der Funktion: (warped, info, info)
Führt src mit nicht-starrem ICP an dst heran.
In jeder Iteration werden die Korrespondenzen zum nächsten Nachbarn von "dem aktuell verformten src" zu dst neu gebildet, als Kontrollpunkt-Korrespondenzen (Kontrollzentren = das ursprüngliche src) wird damit ein regularisierter TPS neu angepasst, und src wird verformt. Auch ohne bekannte Korrespondenzen lässt sich eine glatte nichtlineare Verformung rekonstruieren.
Hinweise zur Implementierung (Robustheit):
• Skaleninvarianz: λ wird relativ zum RMS-Radius von dst um seinen Schwerpunkt behandelt (intern λ_eff = λ·scale). Auch bei 100-fach größeren Koordinaten liefert dasselbe λ dasselbe Verhalten.
• Divergenzschutz: Bei mehrdeutigen Korrespondenzen kann eine einfache NN-Iteration durch positive Rückkopplung divergieren. Das Korrespondenz-RMS wird pro Iteration überwacht, und Verformung und Modell der besten Iteration (minimales RMS) werden zurückgegeben. So wird auch bei schlechtem λ kein Ergebnis "schlechter als der Anfangszustand" zurückgegeben.
• Je größer λ, desto starrer (desto kleiner die Verformung). Der Standard λ=1.0 ist konservativ (fast starr), daher λ klein wählen (z. B. 0.01 bis 0.05), wenn große nichtlineare Verformungen rekonstruiert werden sollen.
Argumente:
src: (N,3) bewegte Punktwolke.
dst: (M,3) feste (Referenz-)Punktwolke.
iters: maximale Anzahl der Iterationen.
lam: TPS-Regularisierung λ (skalenrelativ). Größer ergibt eine glattere Verformung (robust gegen Ausreißer-Korrespondenzen,
lockerere Anpassung). Kleiner passt enger an (rekonstruiert feine Verformungen).
k_smooth: Bei None ist der 1 nächste Nachbar das Ziel (harte Korrespondenz). Bei einer ganzen Zahl ist der Mittelwert
der k nächsten Nachbarn auf der dst-Seite das Ziel, was die Korrespondenzen glättet (robust gegen Rauschen).
Rückgabewerte:
warped_src: (N,3) verformtes src in der besten Iteration.
model: das zugehörige TPS-Modell (Kontrollzentren = ursprüngliches src; kann im ursprünglichen Koordinatensystem direkt an
tps_warp übergeben werden). None, wenn nicht einmal 1 Anpassung gelang.
info: dict. "rms" (bestes Korrespondenz-RMS), "rms_init" (Korrespondenz-RMS am Anfang = Identität),
"rms_history" (list), "iters" (tatsächliche Iterationen), "best_iter", "converged" (bool).
Ausnahmen:
ValueError: ungültige Form, zu wenige Punkte, ungültiges k_smooth.
• 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.
• nonrigid_deform — py -3.11 examples_3d/nonrigid_deform.py
points als Eingabe)points_to_voxel · gaussians_to_voxel · estimate_point_normals · to_points · match_points_ncc · match_pca · moment_axes · icp_point2point_3d
deform)tps_fit · tps_warp · register_cpd_rigid
*Provenance: deform3d.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.