contour opimage → contourfullseye.apply(img, "lines_gauss", a=0.5, b=0.5) (2-D は 1 画像 + 2 スカラつまみ a,b∈[0,1] のモデル)lines_gauss(意味・パラメータは HALCON リファレンスが参考になる)
図は合成の入力 128×128 で実際に走らせた出力。左が入力、右が出力。点群は上から見た散布(明るさ = z)、1-D 列は折れ線、体積は z 方向の最大値投影、動画は中央フレーム、複素画像は振幅、絵にならない返り値は値そのもの。
つまみ a を振る(0.1 / 0.5 / 0.9、もう一方は既定):

つまみ b は出力を変えない(実測: 0.1 / 0.5 / 0.9 で同一)。
別の画像でも(合成シーン / 写真 / 硬貨。上段が入力、下段がその出力。つまみは既定):

4 列目はカラー (H,W,3) の入力。この op は色を跨がずに扱える(色チャネルを 3 本目の空間軸として畳み込まない)。
線状構造(リッジ)検出。skimage.filters.frangi(血管様のリッジ強調
フィルタ)の応答をしきい値(0.1+0.4*a)で二値化し、連結成分を輪郭点群
として返す。HALCON の lines_gauss(Detect lines and their width.)が
本来行う「線の中心線+幅の推定」ではなく、リッジ強調画像のしきい値化に
単純化している(線幅の情報は返らない近似)。
a がリッジ検出のしきい値を振る。b は未使用。scikit-image が無い環境では MissingDependencyError(何を入れればよいかを言う)で止まる —— 別の答えは返さない。
極性も返さない(2026-09-15 実測): 明るい地の暗線(0.6 の地に 0.1、幅 2 px)と
暗い地の明線(0.6 の地に 1.0)を同じ a で通すと、どちらも輪郭が出て
(a=0.5 で 3 本 / 280 点と 3 本 / 276 点)返り値からは区別できない。暗線だけが
要るなら bothat(白トップハット tophat は暗線に 0 を返す)、明線だけなら
tophat を先に掛ける。幅を測る道は別の op: 線に直交する測定線を
gen_measure_rectangle2 で張って measure_pairs(measure1d 族)で両縁を取る。
ただし幅 1〜3 px はその op の危険域(エッジ間距離 / PSF 幅 < 3.09 で大きい側に
偏る)なので、画素以下の幅は輝度欠損の積分で測る(examples/example_scratch_width.py、
poc_crack_width)。使い分けの表は 2d/guides/gallery2d_contour_measure.md。
下のプログラムは実際に走ることを確かめてある(図と同じ入力)。Studio のヘルプではこのブロックがボタンになり、その場で読み込んで実行できる。
lines_gauss 0.50 0.50
py -3.11 examples/example_scratch_width.pypy -3.11 examples/gallery2d_contour_measure.pypy -3.11 examples/poc_solar_el_inspection.pypy -3.11 examples/poc_weld_bead_scan_angle.pycontour を入力に取れる)identity · select_contours · smooth_contours · fit_line_contours · contours_to_region · count_contours · total_length · select_contours_xld
contour)select_contours · smooth_contours · fit_line_contours · contours_to_region · sk_find_contours · edges_sub_pix · select_contours_xld · smooth_contours_xld
Provenance: ops.py — 2D operator registry. この per-op ノートは tools/opdocs.py md が自動生成(手編集しない)。
© 2026 Kazufumi Furuse — Fullseye operator documentation. Licensed under Apache-2.0.