annotate3d_scale_bar — 3D annotate3d op

• Datenarten: image2d → image2d

• Aufruf: import fullseye as fs; fs.ledger.annotate3d_scale_bar(img, origin, direction, length, pose, K, unit='', depth=None, color='neutral', width=2.0, tick=8.0, font_size=12, label_fmt='{:g}', box_alpha=0.55, text_color=None, occlusion_tol=0.01, scheme='okabe_ito', font_path=None) (die Implementierung direkt: import annotate3d; annotate3d.annotate3d_scale_bar(img, origin, direction, length, pose, K, unit='', depth=None, color='neutral', width=2.0, tick=8.0, font_size=12, label_fmt='{:g}', box_alpha=0.55, text_color=None, occlusion_tol=0.01, scheme='okabe_ito', font_path=None); aus dem Register: ops3d.get("annotate3d_scale_bar"))

Verwendung

Liefert ein Bild (image2d): einen Balken der Länge length in Mesh-Einheiten, auf die Oberfläche gelegt und projiziert.

Der Balken ist ein 3-D-Liniensegment, das von origin entlang direction (normiert) um length verläuft, und seine Pixellänge nach der Projektion schrumpft mit seiner Neigung zur Sichtlinie (Perspektive und Verkürzung werden ehrlich gezeigt). Parallel zur Bildebene ist die Pixellänge f * length / z -- die tests prüfen das.

Raises

ValueError

direction ist null, length ist nicht positiv, ein Endpunkt liegt hinter der Kamera / außerhalb des Bildes.

Ablauf: p1 = origin + direction / |direction| * length bilden und origin und p1 projizieren (gleiche Konvention wie annotate3d_project). Die Linie zwischen den beiden Endpixeln und an beiden Enden senkrechte Teilstriche der Länge tick [px] zeichnen (_bar_with_ticks) und vom Mittelpunkt der Linie an einer Position tick/2 + 4 px in Richtung Bildschirmoberkante (Seite mit kleinerem row) einen Textkasten mit label_fmt.format(length) + " " + unit platzieren.

Argumente:

• origin (3,), direction (3,) (nur die Richtung wird verwendet; die Länge wird ignoriert, null wird abgewiesen), length: Länge in Mesh-Einheiten (> 0, mindestens 1e-300).

• unit: ein String (leer: nur die Zahl). label_fmt: ein str.format-Format (Standard "{:g}").

• width [px] >= 0.5, tick [px] >= 0 (0 bedeutet keine Teilstriche), font_size / box_alpha / text_color / font_path: Aussehen des Textkastens.

• depth: Bild des Vorwärtsabstands. Sind beide Enden verdeckt, wird die Linie gestrichelt.

• color: Standard "neutral" (Rollenname). occlusion_tol: [0, 1).

Rückgabewert: ein neues, gezeichnetes Bild (float64 [0, 1]).

Fehlerbedingungen: die Norm von direction ist kleiner als 1e-12 / length <= 0 / einer der Endpunkte hat z <= 1e-9 / einer der Endpunkte liegt außerhalb des Bildes (dieser Op verlangt in_image an beiden Enden -- anders als beim Pfeil wird außerhalb des Rahmens abgewiesen) / ungültige Pose, K oder depth / der Textkasten passt nicht.

Hinweis: Die Länge in Pixeln wird durch die Neigung zur Sichtlinie verkürzt (parallel zur Bildebene f * length / z px). In Tiefenrichtung gelegt wirkt er kurz, aber das ist die ehrliche Projektion. Um den gemessenen Wert zwischen 2 Punkten zu zeigen, annotate3d_measure verwenden.

Referenzen (Beispieldaten, Literatur)

• 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.

Ausführbare Beispiele (verifizierte Samples, die diesen Operator wirklich aufrufen)

• annotate3d_figure — py -3.11 examples_3d/annotate3d_figure.py

Typkompatible Folge-Operatoren (nehmen image2d als Eingabe)

fuse_to_voxel · fit_poly_surface · eval_poly_surface · surface_form_error · background_flatten · polar_unwrap · fit_zernike · matcap_shade

Gleiche Kategorie (annotate3d)

annotate3d_project · annotate3d_arrow · annotate3d_label · 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.