annotate3d op• Datenarten: image2d → image2d
• Aufruf: import fullseye as fs; fs.ledger.annotate3d_measure(img, p0, p1, pose, K, unit='', depth=None, color='emphasis', width=1.5, tick=8.0, font_size=12, label_fmt='{:.3g}', box_alpha=0.6, text_color=None, occlusion_tol=0.01, scheme='okabe_ito', font_path=None) (die Implementierung direkt: import annotate3d; annotate3d.annotate3d_measure(img, p0, p1, pose, K, unit='', depth=None, color='emphasis', width=1.5, tick=8.0, font_size=12, label_fmt='{:.3g}', box_alpha=0.6, text_color=None, occlusion_tol=0.01, scheme='okabe_ito', font_path=None); aus dem Register: ops3d.get("annotate3d_measure"))
Liefert ein Bild (image2d): den Abstand zweier 3-D-Punkte (in Mesh-Einheiten), als projizierte Linie und Wert.
Der Wert ist |p1 - p0| (3-D, geschlossene Form). Auch wenn die Länge in Pixeln verkürzt ist, ändert sich der Wert nicht.
ValueError
Die 2 Punkte fallen zusammen, ein Endpunkt liegt hinter der Kamera / außerhalb des Bildes.
Ablauf: dist = |p1 - p0| (euklidischer Abstand in Objektkoordinaten, in Mesh-Einheiten) berechnen und p0, p1 projizieren (gleiche Konvention wie annotate3d_project). Die Linie zwischen den beiden Endpixeln, senkrechte Teilstriche an beiden Enden (Länge tick px) und Punkte mit Radius 3 px an beiden Enden zeichnen und vom Mittelpunkt der Linie an einer Position tick/2 + 4 px in Richtung Bildschirmoberkante einen Textkasten mit label_fmt.format(dist) + " " + unit platzieren.
Argumente:
• p0, p1: Objektkoordinaten (3,) (endlich; zusammenfallende Punkte werden abgewiesen).
• unit: ein String (leer: nur die Zahl). label_fmt: str.format-Format (Standard "{:.3g}"). Keine Einheitenumrechnung -- ist das Mesh in mm, bleibt es mm.
• width [px] >= 0.5, tick [px] >= 0, font_size / box_alpha / text_color / font_path: Aussehen des Textkastens.
• depth: Bild des Vorwärtsabstands. Sind beide Enden verdeckt, wird die Linie gestrichelt, und der Punkt eines verdeckten Endpunkts wird hohl (ring). occlusion_tol: [0, 1).
Rückgabewert: ein neues, gezeichnetes Bild (float64 [0, 1]).
Fehlerbedingungen: |p1 - p0| < 1e-12 / einer der Endpunkte hat z <= 1e-9 / einer der Endpunkte liegt außerhalb des Bildes (in_image an beiden Enden verlangt) / ungültige Pose, K oder depth / der Textkasten passt nicht.
Einsatz: den Durchmesser von fit_sphere3, eine Kante von smallest_box3 oder den Abstand zwischen 2 Merkmalspunkten in der Abbildung zeigen. Der Wert selbst ist gleich np.linalg.norm(p1 - p0) vor dem Zeichnen.
• 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_label · annotate3d_scale_bar · annotate3d_axes · annotate3d_bbox
*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.