em_skeleton — 2D region op

Data kinds: regionregion

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])

em_skeleton: 入力 → 出力

*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).*

Usage

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 は未使用。

Detailed usage guide

gallery2d_region family guide

References (sample data, literature)

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

Try it in Studio

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

Runnable examples (verified samples that actually call this op)

gallery2d_regionpy -3.11 examples/gallery2d_region.py

Ops the type connects to (they accept region as input)

identity · reg_erode · reg_dilate · reg_open · reg_close · fill_holes · select_largest · remove_small

Same category (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.