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

Verwendung

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.

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)

• nonrigid_deform — py -3.11 examples_3d/nonrigid_deform.py

Typkompatible Folge-Operatoren (nehmen points als Eingabe)

points_to_voxel · gaussians_to_voxel · estimate_point_normals · to_points · match_points_ncc · match_pca · moment_axes · icp_point2point_3d

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