project — 3D bundle_adjust op

• Datenarten: points → keypoints

• Aufruf: import fullseye as fs; fs.ledger.project(points, rvec, t, K) (die Implementierung direkt: import bundle3d; bundle3d.project(points, rvec, t, K); aus dem Register: ops3d.get("project"))

Verwendung

Projiziert 3-D-Punkte (n,3) mit einer Kamera (rvec, t, K) nach 2-D (n,2) (perspektivische Division).

Berechnet X_cam = R(rvec) @ X + t, x = K @ X_cam, uv = x[:2] / x[2] für alle Punkte auf einmal (dieselbe Konvention wie project_points). rvec ist ein Rotationsvektor (Achse × Winkel [rad], scipys Rotation.from_rotvec), t eine (3,)-Translation, K eine (3,3) intrinsische Matrix. Der Rückgabewert ist (n,2) float mit Spalte 0 = u (horizontal, Spaltenrichtung) und Spalte 1 = v (vertikal, Zeilenrichtung), in Pixeln gemäß K.

Achtung (keine Prüfung): Punkte hinter der Kamera oder auf der Bildebene (Z_cam <= 0) werden nicht verworfen, sondern unverändert dividiert. Z_cam = 0 ergibt durch Division durch 0 inf/NaN, ein negatives Z ergibt falsche Koordinaten, die im Bild erscheinen; die Sichtbarkeitsprüfung muss daher der Aufrufer übernehmen. Auch die Form wird nicht geprüft (nur Umwandlung in float mit np.asarray). Die Reprojektionsresiduen von bundle_adjust / mean_reprojection_error werden mit dieser Funktion erzeugt.

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)

• bundle_adjust — py -3.11 examples_3d/bundle_adjust.py

Typkompatible Folge-Operatoren (nehmen keypoints als Eingabe)

fuse_to_voxel · dlt_pose · pnp_ransac · reprojection_error

Gleiche Kategorie (bundle_adjust)

bundle_adjust · mean_reprojection_error


*Provenance: bundle3d.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.