refine op• Datenarten: points × points → pose
• Aufruf: import fullseye as fs; fs.ledger.icp_point2point_3d(src, dst, iters=50, init_R=None, init_t=None, tol=1e-06, max_corr_dist=None, trim_ratio=None, device='cpu', reproducible=False) (die Implementierung direkt: import match3d; match3d.icp_point2point_3d(src, dst, iters=50, init_R=None, init_t=None, tol=1e-06, max_corr_dist=None, trim_ratio=None, device='cpu', reproducible=False); aus dem Register: ops3d.get("icp_point2point_3d"))
• GPU: nein (nur CPU-Referenzimplementierung)
Verfeinert Punktmengen mit Point-to-Point-ICP (Kabsch/SVD).
Erhalten mit grober Übereinstimmungsschätzung (ganzzahliges NCC/Fourier-Mellin ±3°/Hough±0,5 Voxel) Ausgehend von der anfänglichen Pose (init_R, init_t) werden die src-Seitenpunkte starr in die dst-Seitenpunkte umgewandelt. Ausrichten. Bei jeder Iteration wird die Nächste-Nachbarn-Korrespondenz (cKDTree) neu zusammengefügt und der Kabsch-Algorithmus verwendet Durch Berechnen und Akkumulieren relativer Drehungen und Verschiebungen mithilfe von (SVD), auch wenn die Entsprechung nicht bekannt ist, Konvergieren Sie zur Subvoxel-Präzision.
Für teilweise Überlappungen und Ausreißer verwenden Sie Trimmed ICP (übernehmen Sie nur Korrespondenzen mit kleinen Abständen). Behandeln Sie dies mit dem absoluten Distanztor (max_corr_dist). Der endgültige RMSE wurde tatsächlich übernommen. Da die Bewertung auf Korrespondenzen (Inliers) basiert, wird die Haltungsqualität auch in Teilbeobachtungen genau wiedergegeben.
Argumente:
src: (N,3) Bewegliche seitliche Punktwolke (torch.Tensor oder numpy.ndarray).
dst: (M,3) Punktgruppe mit fester Seite (Referenz).
iters: Maximale Anzahl von Iterationen.
init_R: (3,3) Anfangsdrehung. Wenn keine, handelt es sich um eine Identitätsmatrix.
init_t: (3,) Erstübersetzung. Wenn „Keine“, handelt es sich um einen Nullvektor.
tol: Die Konvergenz wird beendet, wenn die relative Verbesserung des RMSE unter diesem Wert liegt.
max_corr_dist: Korrespondenzen, die diesen Abstand überschreiten, werden als Ausreißer verworfen (deaktiviert mit „Keine“).
trim_ratio: 0<r<=1. Bei jeder Iteration entsprechen nur die obersten r den kleinsten Abständen zum nächsten Nachbarn
Gekürzter ICP soll übernommen werden. Wirksam bei teilweiser Überlappung (Überlappungsrate r). Deaktiviert mit „Keine“.
Gerät: Das Brennergerät (z. B. „CPU“) zum Platzieren des Rückgabewerts. SVD wird mithilfe von NumPy auf der CPU gelöst.
reproduzierbar: Wenn „True“, ist die Reduzierung unabhängig von der Punktreihenfolge und der Anzahl der BLAS-Threads (Standard: „False“ = dasselbe wie zuvor).
Der Durchschnitt ist math.fsum, die gegenseitige Kovarianz H ist ozakimm (Ozaki-Schema), die Orientierung wird Element für Element berechnet und der RMSE ist ebenfalls math.fsum.
Auch wenn die Reihenfolge der Punkte in src geändert wird, bleibt R・t・rmse in Bits gleich (gleicher Computer, gleicher LAPACK). Bei trim_ratio Pause
Punkte, die genau den gleichen Abstand voneinander haben, können in unterschiedlicher Reihenfolge ausgewählt werden. Bei 200.000 Punkten werden aus 0,7 ms pro Wiederholung etwa 170 ms.
Rückgabewert:
R: (3,3) Rotation. dst ~= src @ R.T + t. In einer Umgebung mit Taschenlampe „torch.Tensor“, wenn nicht, der gleiche Wert „numpy.ndarray“ (am 07.09.2026
Auch bei der Konvertierung des Hauptteils in Numpy wurde der Typ aus Kompatibilitätsgründen unverändert gelassen.)
★ icp_point2plane in derselben Familie gibt immer numpy zurück —— in der Familie
Da die Typen nicht ausgerichtet sind, ist es sicher, „np.asarray(R)“ stromabwärts zu übergeben.
(Beides funktioniert. Diese Fehlausrichtung bleibt bestehen, um fehlerhafte Änderungen zu vermeiden.)
t: (3,) Übersetzung (gleicher Typ wie R).
Info: dict. „rmse“ (endgültiger RMSE für die Rekrutierung), „iters“ (tatsächliche Anzahl der Iterationen),
„converged“ (bool), „inliers“ (Anzahl der Adoptionen), „rmse_history“ (Liste).
• 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.
• gicp_register — py -3.11 examples_3d/gicp_register.py
• itokawa_self_register — py -3.11 examples_3d/itokawa_self_register.py
• itokawa_shape_match — py -3.11 examples_3d/itokawa_shape_match.py
• partial_overlap_icp — py -3.11 examples_3d/partial_overlap_icp.py
pose als Eingabe)fuse_to_voxel · pose_error · bundle_adjust · mean_reprojection_error · optimize_pose_graph · relative_pose · mean_edge_error · rotation_translation_error
refine)refine_peak_newton · refine_translation_lk · refine_lm · refine_rotation_z · icp_point2plane
*Provenance: match3d.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.