two_view op• Datenarten: image2d × image2d → points
• Aufruf: import fullseye as fs; fs.ledger.triangulate(pts1, pts2, P1, P2) (die Implementierung direkt: import twoview; twoview.triangulate(pts1, pts2, P1, P2); aus dem Register: ops3d.get("triangulate"))
DLT-Triangulation: Korrespondenzen aus zwei Ansichten plus die Projektionsmatrizen → 3-D-Punkte. → (N,3).
Fernpunkte werden als NaN zurückgegeben (nicht als ±inf). Die 4. Komponente der homogenen Koordinate ist 0 = die 2 Sehstrahlen sind parallel, und diese Korrespondenz bestimmt keinen endlichen 3-D-Punkt. Früher wurde einfach geteilt und ±inf ausgegeben, doch dann zählt der nachgelagerte cheirality-Test depth > 0 inf als "vor der Kamera" (inf > 0 ist True). recover_pose wählt unter den 4 (R, t)-Kandidaten den mit den meisten Punkten davor, daher verzerrt sich die Kandidatenwahl stillschweigend, wenn Fernpunkte Stimmen erhalten. Mit NaN ist der Vergleich False, und sie werden nicht gezählt (2026-09-02, entdeckt, als chain_fuzz die Stelle erreichte).
Eine Korrespondenz, die fast, aber nicht exakt parallel ist, wird als großer endlicher Wert zurückgegeben. Das lässt sich mit NaN nicht abfangen, daher muss der Aufrufer die Plausibilität der Distanz prüfen.
Raises ValueError: Punkte sind nicht (N,2) / nicht endlich / Anzahl der Korrespondenzen stimmt nicht überein.
Ergänzungen:
• P1, P2 sind (3,4)-Projektionsmatrizen (K[R|t]). Korrespondenzen sind (N,2) im selben Pixelkoordinatensystem wie dieses P. Ist cam1 die Referenz, P1 = K1[I|0].
• Eine Python-Schleife, die für jeden Punkt eine 4×4-Koeffizientenmatrix per SVD löst (proportional zur Punktzahl). Der Rückgabewert ist float64 (N,3).
• Das Vorzeichen der Tiefe (cheirality) wird nicht geprüft. Wird eine Vorne/Hinten-Entscheidung benötigt, das z des Ergebnisses und das z von R X + t betrachten (recover_pose tut dies intern).
• Die Einheit der Lösung ist dieselbe wie die der Translation t von P. Bei P aus recover_pose ist die Skala |t|=1.
• Deterministisch. Nicht (N,2), nicht endlich oder abweichende Punktzahlen ergeben ValueError.
• 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.
• sfm_recon — py -3.11 examples_3d/sfm_recon.py
points als Eingabe)points_to_voxel · gaussians_to_voxel · estimate_point_normals · to_points · match_points_ncc · match_pca · moment_axes · icp_point2point_3d
two_view)fundamental_8point · essential_8point · recover_pose · sampson_distance
*Provenance: twoview.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.