model op• Datenarten: metrologymodel → scalar
• Aufruf: import fullseye as fs; fs.ledger.add_metrology_object_circle_measure(model, row, col, radius, n: 'int' = 40) -> 'int' (die Implementierung direkt: import metrology; metrology.add_metrology_object_circle_measure(model, row, col, radius, n: 'int' = 40) -> 'int'; aus dem Register: opsmeasure1d.get("add_metrology_object_circle_measure"))
Fügt ein Kreis-Messobjekt hinzu (add_metrology_object_circle_measure).
Legt den Referenzkreis (Mittelpunkt (row, col), Radius radius [px]) auf model["objects"] (das dict wird in place aktualisiert). apply_metrology_model setzt Punkte an die Winkel, die den Umfang in n gleiche Teile teilen, spannt an jedem Punkt radial (Außennormale) eine Messlinie, ermittelt die Subpixel- Kante und bestimmt Mittelpunkt und Radius per Kreisanpassung nach kleinsten Quadraten neu.
• radius: Referenzradius [px]. Die Abweichung vom realen Objekt muss innerhalb von measure_length des apply liegen (Standard ±6 px) -- Kanten weiter außen werden nicht gefunden.
• n: Anzahl der Abtastwerte auf dem Umfang (Standard 40). Bei Kreisen mit größerem Radius erhöhen.
• Argumente werden hier nicht validiert (ein Radius von 0 oder weniger lässt sich ablegen, ist aber bedeutungslos).
• Rückgabewert: Index der hinzugefügten Position (ab 0). params des apply-Ergebnisses ist row / col / radius, rms ist das radiale Residuum zum Kreis [px].
Für die Prüfung von Loch- und Stiftdurchmessern und zum Zentrieren runder Teile.
Wahl von n (gemessen 2026-09-15 an synthetischen Scheiben mit Unschärfe σ=1 px): Der Bias hängt nicht von n ab (konstant innerhalb ±0,005 px für R=8–128 px und n=6–240; der Bias selbst hängt über die Kantenrundung von R ab, −0,09 → −0,006 px). n ändert die Streuung: Bei Rauschen σ=0,03 bleibt std·√n konstant, solange der Stichprobenabstand 2πR/n auf dem Umfang etwa 3 px oder mehr beträgt (= unabhängige Stichproben, std ∝ 1/√n); dichter abzutasten senkt sie nicht weiter (R=16: 0,0174 px bei n=40, 0,0164 px bei n=240). Über n ≈ 2πR / 3 hinaus (40 bei R=20 = Standard, 130 bei R=64, 270 bei R=128) kostet es nur Zeit (22 ms bei n=1000). Fehlen 25 % des Umfangs, behebt mehr n den Bias nicht (−0,005 → −0,020 px). Werden auf der fehlenden Seite nur keine Kanten gefunden, sinkt rms sogar (0,051 → 0,018); werden an der Lückengrenze falsche Kanten aufgenommen, springt rms — eine Lücke ist an rms allein nicht zu sehen, daher auch die Anzahl der edge_points als Gate nehmen (examples/example_inner_diameter_mm.py). Die Abweichung des Referenzradius ist durch measure_length (Standard ±6 px) begrenzt: +5,5 px geht durch, +6,5 px ergibt params=None.
Leere Eingabe (model ein leeres dict) löst ValueError aus.
• Leitfaden zur Familie subpixel_measuring
• 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.
• Der kanonische Algorithmus (Autor, Jahr) und seine Anwendungen stehen im Familienleitfaden oben.
• example_inner_diameter_mm — py -3.11 examples/example_inner_diameter_mm.py
• poc_calipers_under_illusion — py -3.11 examples/poc_calipers_under_illusion.py
• poc_dimensional_inspection — py -3.11 examples/poc_dimensional_inspection.py
• poc_telecentric_metrology — py -3.11 examples/poc_telecentric_metrology.py
scalar als Eingabe)—
model)create_metrology_model · add_metrology_object_line_measure · add_metrology_object_rectangle2_measure · add_metrology_object_ellipse_measure · add_metrology_object_generic
*Provenance: metrology.py — MEASURE1D 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.