annotate3d op• Datenarten: image2d × text → image2d
• Aufruf: import fullseye as fs; fs.ledger.annotate3d_label(img, text, anchor, pose, K, depth=None, offset=(26.0, -22.0), color='emphasis', width=1.5, cap_size=3.0, font_size=12, pad=4, box_alpha=0.72, text_color=None, occlusion_tol=0.01, scheme='okabe_ito', font_path=None) (die Implementierung direkt: import annotate3d; annotate3d.annotate3d_label(img, text, anchor, pose, K, depth=None, offset=(26.0, -22.0), color='emphasis', width=1.5, cap_size=3.0, font_size=12, pad=4, box_alpha=0.72, text_color=None, occlusion_tol=0.01, scheme='okabe_ito', font_path=None); aus dem Register: ops3d.get("annotate3d_label"))
Liefert ein Bild (image2d): Text mit Hinweislinie an einem 3-D-Anker.
Der Text steht an einer um offset [px] vom Ankerpixel verschobenen Position (das Vorzeichen von offset[0] wählt den linken oder rechten Anker). Zeigt depth, dass er verdeckt ist, gestrichelte Linie + hohle Markierung.
ValueError
Der Anker liegt hinter der Kamera / außerhalb des Bildes, der Text passt nicht, ungültige Pose oder K.
Ablauf: anchor (Objektkoordinaten (3,)) mit derselben Projektion wie annotate3d_project in das Pixel (x, y) umrechnen, von (x, y) nach (x + offset[0], y + offset[1]) eine Führungslinie (annotate._aa_polyline, Breite width) ziehen, auf der Ankerseite einen Punkt mit Radius cap_size setzen und am Linienende den Text mit annotate.text_box platzieren. Der Ansatzpunkt (anchor) des Textkastens ist links-mittig bei offset[0] > 0, rechts-mittig bei < 0, bei == 0 unten-mittig, wenn offset[1] < 0, sonst oben-mittig.
Argumente:
• offset: in Pixeln (dx, dy) (dy nach unten positiv = Zeilenrichtung). Der Standard (26, -22) zeigt nach rechts oben.
• width: Linienbreite [px], reelle Zahl >= 0.5. cap_size: Punktradius [px]; bei 0 wird kein Punkt gesetzt. pad / font_size / box_alpha / text_color / font_path: Aussehen des Textkastens (automatische Verkleinerung von font_size bis hinunter auf 9).
• depth: Bild des Vorwärtsabstands. Bei Verdeckung wird die Linie gestrichelt und der Punkt hohl (ring).
• color: Rollenname oder RGB. occlusion_tol: [0, 1).
Rückgabewert: ein neues, gezeichnetes Bild (float64 [0, 1]; die Eingabe wird nicht verändert).
Fehlerbedingungen (wie implementiert): der Anker hat z <= 1e-9 / das Ankerpixel liegt außerhalb von [0, W-1] x [0, H-1] / ungültige Pose, K oder depth / der Textkasten passt auch nach Verkleinerung nicht ins Bild (seitens text_box). Die Linie wird auch gezogen, wenn das Ende von offset außerhalb des Rahmens liegt.
Einsatz: Teilbezeichnungen und Nummerierung in einer Abbildung. Um mehrere Punkte auf einmal zu beschriften, zuerst mit annotate3d_project die Sichtbarkeit bestimmen und nur für die visible-Punkte aufrufen.
• 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_arrow · 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.