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

Verwendung

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.

Hintergrundwissen (Physik und Konventionen hinter diesem Operator)

• depth_sensors — Tiefensensoren — Messprinzipien, Werte realer Geräte, wie Messlücken entstehen

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)

• transforms_repr — py -3.11 examples_3d/transforms_repr.py

Typkompatible Folge-Operatoren (nehmen pose als Eingabe)

fuse_to_voxel · pose_error · bundle_adjust · mean_reprojection_error · optimize_pose_graph · relative_pose · mean_edge_error · rotation_translation_error

Gleiche Kategorie (fusion)

fuse_to_voxel


*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.