region op• Data kinds: region → region
• Call: fullseye.apply(img, "em_skeleton", a=0.5, b=0.5) (the 2-D model is one image plus two scalar knobs a,b∈[0,1])

*The figure is the real output on a synthetic 128×128 input. Left: input, right: output (a non-image return value is shown as the value itself).*
Eckhardt–Maderlechner-style invariant thinning (the same family as HALCON skeleton).
> The detailed description below is the original text — the summary and the headings are translated.
出典: U. Eckhardt, G. Maderlechner, "Invariant Thinning",
Int. J. Pattern Recognition and AI 7:1115-1144 (1993)。実装規則は
M. Couprie "Note on fifteen 2D parallel thinning algorithms" の EM93
定義に従うクリーンルーム実装。**同ノートが公表する EM93 の参照出力と
突き合わせ済み**: 形状 1 は骨格の画素集合がビット単位で一致(724/724)、
形状 2/3 は画素数が公表値と一致(2434 / 3895)。
tests/test_regions2.py::test_em_skeleton_matches_published_em93_reference。
(HALCON 実機との直接照合は未実施だが、HALCON が拠る同じ公表アルゴリズムの
参照出力と一致している):
interior = 4 近傍がすべて前景の画素
simple = (8,4) 単純点(前景 8 連結成分 1 個 ∧ 接する背景 4 連結成分 1 個)
perfect = ある 4 方向の隣が interior で、その反対方向が背景
「simple かつ perfect な画素を全部同時に消す」を不動点まで反復
注: ノートの転記を字義どおり「強(4)連結成分のみで simple を数える」と
実装すると並列削除が斜め橋を同時に落とし位相が壊れる(反例で実測)。
simple を標準の (8,4) 単純点にした本実装が参照出力とビット単位で
一致したので、これが EM93 の正しい読みだと裏付けられている。
完全並列・対称(90 度回転/鏡映と可換)・位相保存・冪等。Zhang–Suen 系の
sk_skeleton より枝を多く残す(実測 1.4〜1.5 倍の画素数 = Couprie の
比較表で EM が対称・枝多である性格と整合)。ヒゲは pruning で後処理する
流儀も HALCON と同じ。つまみ a, b は未使用。
• gallery2d_region family guide
• Sample-data catalog (download URLs / licences) — 2-D uses skimage.data (BSD/public domain) plus synthetic images; 3-D lists download URLs for real data sources (Stanford, PDS, …).
• Operator provenance and references — the sources of the research/methods this op family came from.
• The canonical algorithm (author, year) and its uses are named in the family usage guide above.
The program below has been verified to run (same input as the figure). In Studio's help this block becomes buttons that load and run it on the spot.
threshold 0.50 0.50 em_skeleton 0.50 0.50
▸ Load this pipeline · Load & run
• gallery2d_region — py -3.11 examples/gallery2d_region.py
region as input)identity · reg_erode · reg_dilate · reg_open · reg_close · fill_holes · select_largest · remove_small
region)reg_erode · reg_dilate · reg_open · reg_close · fill_holes · select_largest · remove_small · invert_region
*Provenance: ops.py — 2D operator registry. This per-op note is generated by tools/opdocs.py md (do not hand-edit).*
© 2026 Kazufumi Furuse — Fullseye operator documentation. Licensed under Apache-2.0.