motion_segment op• Datenarten: points × points → labels
• Aufruf: import fullseye as fs; fs.ledger.segment_rigid_motions(pts0, pts1, thresh, max_bodies: 'int' = 5, min_inliers=None, n_iter: 'int' = 100, k_sample: 'int' = 6, seed: 'int' = 0) -> 'dict' (die Implementierung direkt: import motion_seg3d; motion_seg3d.segment_rigid_motions(pts0, pts1, thresh, max_bodies: 'int' = 5, min_inliers=None, n_iter: 'int' = 100, k_sample: 'int' = 6, seed: 'int' = 0) -> 'dict'; aus dem Register: ops3d.get("segment_rigid_motions"))
• Rückgabewert über das Register: fullseye.ledger.segment_rigid_motions(...) liefert nur den Wert des deklarierten Out-Typs labels (die zugrunde liegende Funktion gibt zusätzlich Hilfsinformationen zurück). Wird das Verworfene gebraucht, nutze fullseye.ledger.segment_rigid_motions.raw(...) oder rufe motion_seg3d.segment_rigid_motions direkt auf.
• Rückgabe der Funktion: {"labels", "motions"} → labels
Zerlegt zwei Punktmengen in die Starrkörper mit übereinstimmender Bewegung (Multi-Body-Segmentierung per iteriertem RANSAC).
Bestimmt zuerst mit estimate_flow den beobachteten Fluss (jeder pts0-Punkt -> nächster Nachbar in pts1) und legt target = pts0 + flow als Korrespondenz fest. Danach für die Menge der verbleibenden Punkte:
1. aus k_sample räumlich nahen Punkten (seed + dessen nächste Nachbarn) als Saat eine Starrkörper-Hypothese per Kabsch aufstellen,
2. die inlier zählen, die die Flusskonsistenz || (R·s + t) - target(s) || < thresh erfüllen,
3. über n_iter Versuche die beste Hypothese wählen, die das Signifikanz-Gate besteht (Median der inlier-Residuen unter einem festen Anteil von thresh = Residuen wie bei einem echten Starrkörper nahe 0 konzentriert; zufällige Anpassungen an unkorrelierte Daten/Rauschen füllen die Toleranzkugel mit Residuum ≈ 0.6*thresh und werden daher verworfen), und mit deren inliern per Kabsch neu anpassen (refine),
4. ist die inlier-Zahl mindestens min_inliers und bleibt die Hypothese nach refine signifikant, sie als 1 Starrkörper festlegen und entfernen. Andernfalls keinen body erzeugen und mit dem Rest auf -1 enden (keinen falschen Starrkörper erfinden).
Dies wird wiederholt, bis max_bodies Körper gefunden sind oder die verbleibenden Punkte unter die Schwelle fallen. Verbleibende Punkte ohne Starrkörper erhalten labels = -1 (outlier / ohne Korrespondenz, keine Vortäuschung). Das Saat-Sampling aus der Nachbarschaft ist ein locality prior, um räumlich zusammenhängende Objekte als Ganzes zu greifen; es nutzt nur relative Ränge statt eines Schwellwerts und ist daher skaleninvariant.
Args:
pts0: (N, 3) Punktwolke zum Zeitpunkt 0.
pts1: (M, 3) Punktwolke zum Zeitpunkt 1 (muss nicht mit N übereinstimmen).
thresh: inlier-Abstandsschwelle der Flusskonsistenz. Relativ zur Koordinatenskala angeben
(das Modul hält kein absolutes epsilon, daher passt der Aufrufer sie an das Koordinatensystem an).
max_bodies: Obergrenze der Anzahl zu extrahierender Starrkörper (>= 1).
min_inliers: minimale inlier-Zahl, um als 1 Starrkörper zu gelten. Bei None max(3, round(0.1*N)).
Untergrenze, damit ein Klumpen von outliern kein falscher Starrkörper wird.
n_iter: Anzahl der RANSAC-Versuche je 1 Starrkörper.
k_sample: Anzahl der Saatpunkte für 1 Hypothese (seed + nächste Nachbarn, >= 3).
seed: RANSAC-Zufallsseed (Reproduzierbarkeit).
Returns:
dict: {"labels": (N,) int (Starrkörper-id jedes Punkts, 0..K-1 / outlier=-1), "motions": [(R, t), ...] (Starrkörpertransformationen in id-Reihenfolge, K Stück)}.
Raises:
ValueError: ungültige Form / nicht endlich / pts1 leer / thresh <= 0 / max_bodies < 1 /
k_sample < 3.
• 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.
• motion_seg — py -3.11 examples_3d/motion_seg.py
labels als Eingabe)fuse_to_voxel · vol_region_props
motion_segment)*Provenance: motion_seg3d.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.