annotate3d op• Data kinds: image2d × text → image2d
• Call: 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) (to call the implementation directly, 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); from the registry, ops3d.get("annotate3d_label"))
Returns an image (image2d): text with a leader line attached to a 3-D anchor.
The text is placed at a position shifted by offset [px] from the anchor pixel (the sign of offset[0] selects the left or right anchor). If depth shows it is hidden, dashed line + hollow marker.
ValueError
The anchor is behind the camera / outside the image, the text does not fit, invalid pose or K.
Procedure: turn anchor (object coordinates (3,)), with the same projection as annotate3d_project, into pixel (x, y); from (x, y) to (x + offset[0], y + offset[1]) draw a leader line (annotate._aa_polyline, width width), put a dot of radius cap_size on the anchor side, and place the text with annotate.text_box at the end of the line. The text box's attachment point (anchor) is middle-left if offset[0] > 0, middle-right if < 0, and if == 0, bottom-centre when offset[1] < 0 and top-centre otherwise.
Arguments:
• offset: in pixels (dx, dy) (dy positive downward = row direction). The default (26, -22) goes up and to the right.
• width: line width [px], a real number >= 0.5. cap_size: dot radius [px]; 0 means no dot is drawn. pad / font_size / box_alpha / text_color / font_path: appearance of the text box (automatically shrunk from font_size down to 9).
• depth: forward-distance image. If hidden, the line becomes dashed and the dot hollow (ring).
• color: a role name or RGB. occlusion_tol: [0, 1).
Return value: a new drawn image (float64 [0, 1]; the input is not modified).
Error conditions (as implemented): the anchor has z <= 1e-9 / the anchor pixel is outside [0, W-1] x [0, H-1] / invalid pose, K or depth / the text box does not fit in the image even after shrinking (on the text_box side). The line is drawn even if the end of offset is outside the frame.
Use: names of parts and numbering in a figure. When labelling several points at once, first get the visibility test with annotate3d_project and call it only for the visible points.
• Sample-data catalog (download URLs / licences) — 2-D uses skimage.data (BSD/public domain) plus synthetic images; 3-D lists download URLs for real data sources (Stanford, PDS, …).
• Operator provenance and references — the sources of the research/methods this op family came from.
• annotate3d_figure — py -3.11 examples_3d/annotate3d_figure.py
image2d as input)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. This per-op note is generated by tools/opdocs.py md (do not hand-edit).*
© 2026 Kazufumi Furuse — Fullseye operator documentation. Licensed under Apache-2.0.