project op• Datenarten: mesh × points → table
• Aufruf: import fullseye as fs; fs.ledger.cad_surface_to_pixel(mesh, points, K=None, R=None, t=None, image_size=None, cull_backfaces=True, depth_tol=1e-06, strict=False) (die Implementierung direkt: import cadmap; cadmap.cad_surface_to_pixel(mesh, points, K=None, R=None, t=None, image_size=None, cull_backfaces=True, depth_tol=1e-06, strict=False); aus dem Register: opscadmap.get("cad_surface_to_pixel"))
3-D-Punkte (N,3) → Pixel plus Sichtbarkeit (verdeckt, rückseitig und außerhalb des Bildes werden unterschieden).
Nach der Projektion mit camera.project_points wird erneut ein Strahl auf dasselbe Pixel geschossen, um zu prüfen, dass davor keine andere Fläche liegt. Ohne das würden die Pixelkoordinaten eines verdeckten Punkts so zurückgegeben, als "sei er dort sichtbar". Die Rückgabe ist ein dict:
• uv (N,2) -- Pixel (u=Spalte, v=Zeile). Auch für Punkte mit depth <= 0 wird der Projektionswert zurückgegeben, aber in_front = False gesetzt.
• depth (N,) -- Kamerakoordinate Z.
• in_front (N,) bool -- depth > 0.
• in_image (N,) bool -- innerhalb des Bildrahmens (0 <= u <= width-1 und 0 <= v <= height-1).
• occluded (N,) bool -- auf derselben Sichtlinie liegt vor dem Punkt eine Fläche.
• occluder_face (N,) int64 -- die verdeckende Fläche. -1, falls keine.
• visible (N,) bool -- in_front & in_image & ~occluded.
• camera die tatsächlich verwendete Kamera.
• winding_fixed bool -- ob ein nach innen gewundenes geschlossenes Mesh erkannt und korrigiert wurde.
depth_tol ist eine relative Toleranz, damit nicht fälschlich "von der eigenen Fläche verdeckt" erkannt wird; als verdeckt gilt ein Punkt, wenn z_hit < depth * (1 - depth_tol) - depth_tol. Punkte auf der Rückseite eines geschlossenen mesh werden von der vorderen Wand verdeckt und erhalten occluded = True -- das ist so spezifiziert und kein Verlust.
Der Verdeckungstest hängt vom Umlaufsinn ab (wird die vordere Wand als Rückseite gecullt, werden sogar Punkte auf der Rückseite visible). Daher wird bei cull_backfaces=True ein nach innen gewundenes geschlossenes Mesh erkannt, standardmäßig der Umlaufsinn korrigiert und winding_fixed=True zurückgegeben. Mit strict=True gibt es ValueError, mit cull_backfaces=False findet die Prüfung gar nicht statt (Details unter _orient_for_culling).
• 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.
• Der kanonische Algorithmus (Autor, Jahr) und seine Anwendungen stehen im Familienleitfaden oben.
• defect_to_cad — py -3.11 examples/defect_to_cad.py
table als Eingabe)—
project)—
*Provenance: cadmap.py — CADMAP 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.