annotate3d op• Data kinds: image2d → image2d
• Call: import fullseye as fs; fs.ledger.annotate3d_axes(img, pose, K, origin=(0.0, 0.0, 0.0), length=1.0, depth=None, labels=('X', 'Y', 'Z'), colors=('wrong', 'right', 'reference'), width=2, font_size=11, occlusion_tol=0.01, scheme='okabe_ito', font_path=None) (implementation को सीधे call करना हो तो import annotate3d; annotate3d.annotate3d_axes(img, pose, K, origin=(0.0, 0.0, 0.0), length=1.0, depth=None, labels=('X', 'Y', 'Z'), colors=('wrong', 'right', 'reference'), width=2, font_size=11, occlusion_tol=0.01, scheme='okabe_ito', font_path=None), registry से लेना हो तो ops3d.get("annotate3d_axes"))
image (image2d) लौटाता है: object coordinates (pose की input side) के 3 axes (gnomon) को origin से project करके draw करता है।
ValueError
length धनात्मक न हो, origin या कोई axis end camera के पीछे हो, labels/colors 3 न हों,
axis का text image में न समाए, origin और axis end दोनों image के बाहर हों।
प्रक्रिया: origin और वहाँ से object coordinates की +X / +Y / +Z दिशा में length आगे गए 3 points को project किया जाता है (annotate3d_project वाली ही convention), और origin के pixel से हर axis end के pixel तक annotate.arrow (arrowhead 8x6 px) बनाया जाता है। axis end से 0.7 * font_size px आगे की जगह पर labels[i] को बिना background (box_alpha=0) वाले text के रूप में रखा जाता है।
Arguments:
• origin (3,) (object coordinates), length: axis की लंबाई (mesh units, > 0)।
• labels: 3 strings (default ("X", "Y", "Z"))। colors: 3 रंग (role name या RGB। default ("wrong", "right", "reference") palette के role names हैं)।
• width: line width [px], 1 या अधिक का integer। font_size [px]।
• depth / occlusion_tol: projection को दिए जाते हैं, लेकिन यह op hidden display (dashed) नहीं करता (जाँच सिर्फ़ depth के shape check के लिए होती है)।
Return value: drawing वाली नई image (float64 [0, 1])।
Error की शर्तें: length <= 0 हो / labels या colors की लंबाई 3 न हो / origin या कोई भी axis end z <= 1e-9 हो / pose, K या depth अमान्य हो / axis का text image में न समाए / origin और axis end दोनों image के बाहर हों (annotate.arrow अस्वीकार करता है)। केवल axis end frame के बाहर हो तो arrow खींचा जाता है (वह frame के बाहर की ओर जाता है)। line of sight से मेल खाकर point में सिमट गया axis (pixel लंबाई 1e-9 से कम) चुपचाप छोड़ दिया जाता है।
उपयोग: figure के pose की व्याख्या (gnomon)। render3d.look_at का pose बिना बदले दें, और origin को mesh के centroid या bounds के किसी कोने पर रखें। Coordinate frame: origin और axes की दिशाएँ दोनों उस frame में पढ़ी जाती हैं जिससे pose map करता है (object coordinates)। look_at का pose world→camera है, इसलिए उस स्थिति में ये world के axes होते हैं। object के pose M (object→world) वाला pose @ M देने पर object के axes बनते हैं।
• Sample data catalog (DL URL / license) — 2-D के लिए skimage.data (BSD/public) + synthetic, 3-D के लिए real data sources (Stanford/PDS आदि) के DL URL।
• Operators का स्रोत और संदर्भ — इस op family के मूल research/methods के स्रोत।
• annotate3d_figure — py -3.11 examples_3d/annotate3d_figure.py
image2d को 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_label · annotate3d_scale_bar · annotate3d_bbox · annotate3d_measure
*Provenance: annotate3d.py — 3D operator registry. यह per-op note tools/opdocs.py md से अपने-आप generate होता है (हाथ से edit न करें)।*
© 2026 Kazufumi Furuse — Fullseye operator documentation. Licensed under Apache-2.0.