model opmetrologymodel → scalarimport fullseye as fs; fs.ledger.add_metrology_object_circle_measure(model, row, col, radius, n: 'int' = 40) -> 'int' (実装を直接呼ぶなら import metrology; metrology.add_metrology_object_circle_measure(model, row, col, radius, n: 'int' = 40) -> 'int'、台帳から引くなら opsmeasure1d.get("add_metrology_object_circle_measure"))円計測オブジェクトを追加(add_metrology_object_circle_measure)。
参照円(中心 (row, col)、半径 radius [px])を model["objects"] に積む
(dict をその場で更新)。apply_metrology_model は円周を n 等分した角度に
点を置き、各点で 半径方向(外向き法線)に測定線を張ってサブピクセルの
エッジを取り、最小二乗の円フィットで中心と半径を出し直す。
radius: 参照半径 [px]。実物とのずれは apply の measure_length
(既定 ±6 px)以内に収まっている必要がある ―― それより外のエッジは見つからない。n: 円周のサンプル数(既定 40)。半径が大きい円ほど増やす。apply 結果の params は
row / col / radius、rms は円からの半径方向残差 [px]。穴径・ピン径の検査、円形部品の中心出しに使う。
n の目安(2026-09-15 実測、ぼけ σ=1 px の合成円板): 偏りは n に依らない
(R=8〜128 px、n=6〜240 で ±0.005 px 以内で一定。偏り自体は縁の丸みで −0.09 →
−0.006 px と R に依る)。効くのは散らばりで、雑音 σ=0.03 のとき std·√n は
円周の標本間隔 2πR/n が 約 3 px 以上なら一定(= 標本が独立、std ∝ 1/√n)、
それより密にしても下がらない(R=16: n=40 で 0.0174、n=240 で 0.0164 px)。
つまり n ≈ 2πR / 3(R=20 で 40 = 既定、R=64 で 130、R=128 で 270)より
多くしても時間が増えるだけ(n=1000 で 22 ms)。円周の 25 % が欠けていると
n を増やしても偏りは直らない(−0.005 → −0.020 px)。欠けた側で縁が見つからない
だけなら rms はむしろ下がり(0.051 → 0.018)、欠けの境界で偽の縁を拾えば
rms が跳ねる —— 欠けは rms だけでは見えないので edge_points の本数も
門にする(examples/example_inner_diameter_mm.py)。参照半径のずれは
measure_length(既定 ±6 px)が上限で、+5.5 px は通り +6.5 px で
params=None。
空の入力(model が空の dict)は ValueError。
py -3.11 examples/example_inner_diameter_mm.pypy -3.11 examples/poc_calipers_under_illusion.pypy -3.11 examples/poc_dimensional_inspection.pypy -3.11 examples/poc_telecentric_metrology.pyscalar を入力に取れる)—
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. この per-op ノートは tools/opdocs.py md が自動生成(手編集しない)。
© 2026 Kazufumi Furuse — Fullseye operator documentation. Licensed under Apache-2.0.