fusion op• Datenarten: any × any → pose
• Aufruf: import fullseye as fs; fs.ledger.register_cross(src, src_kind, dst, dst_kind, method='fpfh', samples=15000, **kw) (die Implementierung direkt: import fuse3d; fuse3d.register_cross(src, src_kind, dst, dst_kind, method='fpfh', samples=15000, **kw); aus dem Register: ops3d.get("register_cross"))
Starre Registrierung zwischen Strukturen unterschiedlicher Art. Beide in Punktwolken wandeln → ein Registrierer (fpfh = große Rotationen / icp = braucht eine grobe Initialisierung).
Beispiel: register_cross((verts,faces),"mesh", scan_pts,"points") richtet CAD↔Scan aus. Rückgabewert (R, t).
Ablauf: to_points(src, src_kind, samples, **kw) und to_points(dst, dst_kind, samples, **kw) machen beide zu Punktwolken, und method wählt das Registrierungsverfahren.
• "fpfh" (Standard): ruft feat_fpfh.register_fpfh(ps, pd) mit Standardparametern auf (FPFH-Deskriptor + RANSAC, keine Anfangspose nötig, bewältigt große Rotation und teilweise Überlappung).
• "icp": match3d.icp_point2point_3d(ps, pd, iters=50) (Korrespondenz über nächste Nachbarn + Kabsch). Es wird kein Argument für die Anfangspose übergeben, daher wird vorausgesetzt, dass src nahe an dst liegt (grob ausgerichtet).
• Alles andere löst ValueError aus.
Rückgabewert: (R, t) — R ist ein (3, 3)- und t ein (3,)-numpy-Array (ein torch tensor wird vor der Rückgabe in ein CPU-numpy-Array umgewandelt). Die Konvention ist dst ≈ src @ R.T + t.
Hinweise:
• **kw wird beiden to_points-Aufrufen identisch übergeben (man kann fx, fy, cx, cy von "depth" oder iso von "voxel" nicht nur einer Seite geben).
• samples ist die Abtastanzahl für "mesh" (Standard 15000). Anzahl und Form der Punktwolken werden nicht geprüft.
• Unterschiede der Koordinatensysteme (siehe to_points: voxel ist ein (z, y, x)-Index, depth ist Kamera- (x, y, z)) werden nicht ausgeglichen.
• Um die Genauigkeit nachzuschärfen, icp_point2point_3d direkt mit dem fpfh-Ergebnis als Anfangswert aufrufen.
• depth_sensors — Tiefensensoren — Messprinzipien, Werte realer Geräte, wie Messlücken entstehen
• 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.
• transforms_repr — py -3.11 examples_3d/transforms_repr.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
fusion)*Provenance: fuse3d.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.