0

私はバイナリ イメージを持っています。簡単にするために、単純な直線であると仮定します。

00000000000000
00000000000000
00000000000000
11111111110000
00000000000000
00000000000000
00000000000000

2pxに拡張したい。

その目的のために、2回の反復で膨張を適用し、予想どおりこれを得ました:

00000000000000
11111111111100
11111111111100
11111111111100
11111111111100
11111111111100
00000000000000

次に、私の考えは、単純に間引きを適用して、最初の線を 2 ピクセル延長することでした。しかし、代わりに、おそらく線の太さが原因で、線が短くなりました。

00000000000000
10000000000000
10000000000000
11111111100000
10000000000000
10000000000000
00000000000000

次に、3x3 ones() の代わりにひし形の構造化フットプリントで膨張を適用することを考えましたが、結果はさらに悪くなり、ラインがもう 1 ピクセル短くなりました。

細線化にはZhang-Suen アルゴリズムGuo-Hall アルゴリズムを使用し、さらに skimage で公開されている Otsu メソッドも試しましたが、同様の結果が得られました。

誰かが、私が向かった場所に到達できる間引きアルゴリズムの存在、または別のアプローチについて教えてもらえますか?


更新(@marinus コメントに対処するため):

前述のように、最初の行を 2px に拡張して次のように取得します。

00000000000000
00000000000000
00000000000000
11111111111100
00000000000000
00000000000000
00000000000000

間引きはこのように機能するように見えるため、間引きアプローチではできません。

画像

したがって、最初の行を拡張するだけでは、間引きで拡張することはできません。

4

2 に答える 2

1

答えは、使用している形態学的カーネルにあります。あなたの例では、単純に線を水平方向に 2 ピクセル延長したいと述べています。適用するカーネルは、目標に一致する必要があります。

調整の場合、すべての「オン」ピクセルは、現在のピクセルとその隣接ピクセルとカーネルで「OR」されます。3x3 カーネルは、現在のピクセル全体に 1 を生成します。

3x3:

111
111
111

代わりに 5x1 のカーネルを適用した場合:

00000
11111
00000

元の信号に適用すると、目的の結果が得られます。右側にピクセルを追加するだけの場合は、カーネルの中心が最初のピクセルになるように 111 のカーネルを実行します。

于 2013-03-22T14:36:38.280 に答える