annotate3d op• Datenarten: image2d → image2d
• Aufruf: import fullseye as fs; fs.ledger.annotate3d_arrow(img, p0, p1, pose, K, depth=None, color='emphasis', width=2, head_len=12.0, head_width=9.0, occlusion_tol=0.01, scheme='okabe_ito') (die Implementierung direkt: import annotate3d; annotate3d.annotate3d_arrow(img, p0, p1, pose, K, depth=None, color='emphasis', width=2, head_len=12.0, head_width=9.0, occlusion_tol=0.01, scheme='okabe_ito'); aus dem Register: ops3d.get("annotate3d_arrow"))
Liefert ein Bild (image2d): einen projizierten Pfeil von 3-D-p0 nach p1.
Wird depth übergeben und sind beide Enden verdeckt, wird gestrichelt gezeichnet (die Pfeilspitze halbtransparent).
ValueError
Ein Endpunkt liegt hinter der Kamera / die 2 Punkte werden auf dasselbe Pixel projiziert / beide Enden liegen außerhalb des Bildes, ungültige Pose oder K.
Ablauf: img als float64-[0, 1]-Kopie anlegen ((H, W) / (H, W, C), C ist 1/3/4; nicht endlich oder leer ergibt ValueError), p0, p1 mit derselben Projektion wie annotate3d_project in Pixel umrechnen und mit annotate.arrow vom Pixel von p0 zum Pixel von p1 einen Pfeil zeichnen. Die Pfeilspitze liegt auf der Seite von p1.
Argumente:
• p0, p1: Objektkoordinaten (3,) (endlich). pose ist eine 4x4-object→camera-Matrix oder (R, t), K ist 3x3 (render3d-Konvention, Blick entlang -Z).
• depth: (H, W)-Bild des Vorwärtsabstands (das depth von render3d.render_mesh). ValueError, wenn es nicht dieselbe Form wie das Bild hat.
• color: ein Rollenname (etwa "emphasis", aufgelöst über die Palette von scheme) oder RGB.
• width: Linienbreite [px], ganze Zahl ab 1 (1.5 wird abgewiesen).
• head_len / head_width: Länge und Breite der Pfeilspitze [px]. Beim verdeckten Zeichnen werden sie so verkleinert, dass sie 80 % der Pfeillänge nicht überschreiten.
• occlusion_tol: [0, 1).
Rückgabewert: ein neues, gezeichnetes Bild (float64, gleiche Form wie die Eingabe; die Eingabe wird nicht verändert).
Fehlerbedingungen (wie implementiert): einer der Endpunkte hat z <= 1e-9 (auf der Kameraebene / dahinter) / 2 Punkte werden auf dasselbe Pixel projiziert (auf der Sichtlinie aufgereiht, Länge unter 1e-9 px) / beide Enden liegen außerhalb des Bildes (annotate.arrow lehnt das ab, um keine falsche, am Rand klebende Linie zu zeichnen) / ungültige Pose oder K. Liegt nur ein Ende außerhalb des Bildes, wird gezeichnet (die Linie läuft nach außen und wirkt am Rahmen abgeschnitten).
Einsatz: in einem Bild von render3d.render_mesh zeigen "diese Ecke ist das". Um eine Länge numerisch anzugeben, annotate3d_measure; um Text hinzuzufügen, annotate3d_label.
• 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.
• annotate3d_figure — py -3.11 examples_3d/annotate3d_figure.py
image2d als Eingabe)fuse_to_voxel · fit_poly_surface · eval_poly_surface · surface_form_error · background_flatten · polar_unwrap · fit_zernike · matcap_shade
annotate3d)annotate3d_project · annotate3d_label · annotate3d_scale_bar · annotate3d_axes · annotate3d_bbox · annotate3d_measure
*Provenance: annotate3d.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.