annotate3d op• Data kinds: image2d → image2d
• Call: 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') (to call the implementation directly, 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'); from the registry, ops3d.get("annotate3d_arrow"))
Returns an image (image2d): a projected arrow drawn from 3-D p0 to p1.
If depth is given and both ends are hidden, it is drawn dashed (the arrowhead semi-transparent).
ValueError
An endpoint is behind the camera / the 2 points project to the same pixel / both ends are outside the image, invalid pose or K.
Procedure: make a float64 [0, 1] copy of img ((H, W) / (H, W, C), C is 1/3/4; non-finite or empty gives ValueError), turn p0, p1 into pixels with the same projection as annotate3d_project, and draw with annotate.arrow an arrow from the pixel of p0 to the pixel of p1. The arrowhead is on the p1 side.
Arguments:
• p0, p1: object coordinates (3,) (finite). pose is a 4x4 object→camera or (R, t), K is 3x3 (the render3d convention looking along -Z).
• depth: (H, W) forward-distance image (the depth of render3d.render_mesh). ValueError unless it has the same shape as the image.
• color: a role name (such as "emphasis", resolved by the palette of scheme) or RGB.
• width: line width [px], an integer of 1 or more (1.5 is rejected).
• head_len / head_width: arrowhead length and width [px]. In hidden drawing they are shrunk so as not to exceed 80 % of the arrow length.
• occlusion_tol: [0, 1).
Return value: a new drawn image (float64, same shape as the input; the input is not modified).
Error conditions (as implemented): either endpoint has z <= 1e-9 (on the camera plane / behind) / 2 points project to the same pixel (lined up along the line of sight, length under 1e-9 px) / both ends are outside the image (annotate.arrow rejects it, so as not to draw a wrong line stuck to the border) / invalid pose or K. If only one end is outside the image, it is drawn (the line runs towards the outside and is visibly cut at the frame).
Use: on a render3d.render_mesh image, show "this vertex is this". To show a length numerically use annotate3d_measure; to attach text use annotate3d_label.
• 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_label · 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.