ドキュメンテーション

最新のリリースでは、このページがまだ翻訳されていません。 このページの最新版は英語でご覧になれます。

bwmorph

バイナリ イメージのモルフォロジー演算

構文

BW2 = bwmorph(BW,operation)
BW2 = bwmorph(BW,operation,n)
gpuarrayBW2 = bwmorph(gpuarrayBW,___)

説明

BW2 = bwmorph(BW,operation) は、特定のモルフォロジー演算をバイナリ イメージ BW に適用します。

BW2 = bwmorph(BW,operation,n) は、演算を n 回適用します。n には Inf を使用できますが、その場合にはイメージが変更されなくなるまで処理が繰り返されます。

gpuarrayBW2 = bwmorph(gpuarrayBW,___) は GPU でモルフォロジー演算を実行します。入力イメージと出力イメージは gpuArray です。この構文では Parallel Computing Toolbox™ が必要です。

バイナリ イメージのモルフォロジー演算の実行

バイナリ イメージの読み取りと表示

BW = imread('circles.png');
imshow(BW);

内部のピクセルを削除して形状の輪郭を残します。

BW2 = bwmorph(BW,'remove');
figure
imshow(BW2)

イメージのスケルトンを取得します。

BW3 = bwmorph(BW,'skel',Inf);
figure
imshow(BW3)

GPU でのモルフォロジー演算の実行

この例では、前の例と同じ演算を GPU で実行します。まずイメージを gpuArray に読み取ります。

BW1 = gpuArray(imread('circles.png'));
figure
imshow(BW1)

BW2 = bwmorph(BW1,'remove');
figure
imshow(BW2)

BW3 = bwmorph(BW1,'skel',Inf);
figure
imshow(BW3)

入力引数

すべて折りたたむ

入力イメージ。バイナリ イメージとして指定します。入力イメージには数値か論理値のいずれかを使用できますが、実数で2 次元かつ非スパースでなければなりません。

例: BW = imread('circles.png');

データ型: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64 | logical

実行するモルフォロジー演算。以下のいずれかに指定します。

操作

説明

'bothat'

ボトム ハットを使用したモルフォロジー演算を実行し、そのイメージからイメージのモルフォロジー クローズを差し引いたものを返します (膨張の後に収縮を実行)。

'branchpoints'

スケルトンの分岐点を検出する。以下に例を示します。

0  0  1  0  0           0  0  0  0  0
0  0  1  0  0  becomes  0  0  0  0  0
1  1  1  1  1           0  0  1  0  0
0  0  1  0  0           0  0  0  0  0
0  0  1  0  0           0  0  0  0  0

メモ: 分岐点を見つけるには、イメージをスケルトン化しなければなりません。スケルトン化されたイメージを作成するには、bwmorph(BW,'skel') を使用します。

'bridge'

連結していない 2 つの非ゼロ近傍をもつ場合、連結されていないピクセルの橋渡しをする、つまり、0 の値をとるピクセルを 1 に設定します。以下に例を示します。

1  0  0           1  1  0 
1  0  1  becomes  1  1  1 
0  0  1           0  1  1

'clean'

このパターンの中心ピクセルなど、孤立したピクセル (0 に囲まれた個別の 1) を削除します。

0  0  0 
0  1  0 
0  0  0

'close'

モルフォロジー クローズ処理 (膨張の後に収縮) を実行します。

'diag'

対角の塗りつぶしを使用して、背景の 8 連結性を削除します。以下に例を示します。

0  1  0           0  1  0 
1  0  0  becomes  1  1  0 
0  0  0           0  0  0

'endpoints'

スケルトンの終点を検出します。以下に例を示します。

1  0  0  0           1  0  0  0
0  1  0  0  becomes  0  0  0  0
0  0  1  0           0  0  1  0
0  0  0  0           0  0  0  0

メモ: 終点を見つけるには、イメージをスケルトン化しなければなりません。スケルトン化されたイメージを作成するには、bwmorph(BW,'skel') を使用します。

'fill'

このパターンの中心ピクセルなど、孤立した内部ピクセル (1 に囲まれた個別の 0) を塗りつぶします。

1  1  1 
1  0  1 
1  1  1

'hbreak'

H 連結ピクセルを削除します。以下に例を示します。

1  1  1           1  1  1 
0  1  0  becomes  0  0  0 
1  1  1           1  1  1

'majority'

3 行 3 列近傍内の 5 つ以上のピクセルが 1 の場合、ピクセルを 1 に設定します。そうでない場合は、ピクセルは 0 に設定されます。

'open'

モルフォロジー オープン (収縮の後に膨張) を実行します。

'remove'

内部のピクセルを削除します。このオプションでは、すべての 4 連結近傍が 1 の場合にピクセルが 0 に設定されます。こうして、境界のピクセルのみが残されます。

'shrink'

n = Inf を使用して、オブジェクトを点に縮小します。穴のないオブジェクトは点に縮小されるよう、また、穴のあるオブジェクトは各穴と外側の境界の中間で連結リングにまで縮小されるよう、ピクセルを削除します。このオプションでは、オイラー数が保存されます。

'skel'

n = Inf を使用して、オブジェクトを壊さずにオブジェクトの境界上のピクセルを削除します。イメージのスケルトンは、残りのピクセルにより構成されます。このオプションでは、オイラー数が保存されます。

'spur'

枝分かれしたピクセルを削除します。以下に例を示します。

0  0  0  0           0  0  0  0
0  0  0  0           0  0  0  0
0  0  1  0  becomes  0  0  0  0
0  1  0  0           0  1  0  0
1  1  0  0           1  1  0  0

'thicken'

n = Inf を使用して、連結されていないオブジェクトが 8 連結になるまでピクセルをオブジェクトの外部に追加することにより、オブジェクトを太くします。このオプションでは、オイラー数が保存されます。

'thin'

n = Inf を使用して、オブジェクトを線になるまで細くします。穴のないオブジェクトは最小限に連結されたひと筆に縮小されるよう、また、穴のあるオブジェクトは、各穴と外側の境界の中間で連結リングにまで縮小されるよう、ピクセルを削除します。このオプションでは、オイラー数が保存されます。詳細は、アルゴリズムを参照してください。

'tophat'

"トップ ハット" を使用したモルフォロジー演算を実行し、そのイメージからイメージのモルフォロジー オープンを差し引いたものを返します (収縮の後に膨張を実行)。

例: BW3 = bwmorph(BW,'skel');

データ型: char

演算を実行する回数。数値として指定します。n には Inf を指定することもでき、その場合は、イメージが変化しなくなるまで bwmorph が演算を反復します。

例: BW3 = bwmorph(BW,'skel',100);

データ型: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64 | logical

入力イメージ。gpuArray に格納された logical クラスのバイナリ イメージとして指定します。入力イメージには数値か論理値のいずれかを使用できますが、実数で2 次元かつ非スパースでなければなりません。

例: BW = imread('circles.png');

データ型: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64 | logical

出力引数

すべて折りたたむ

logical クラスのバイナリ イメージとして返される出力イメージ

gpuArray に格納された logical クラスのバイナリ イメージとして返される出力イメージ

ヒント

  • 収縮または膨張を実行するには、関数 imerode または imdilate を使用します。bwmorph によって実行された収縮または膨張を繰り返す場合は、これらの関数と共に構造化要素 ones(3) を指定します。

アルゴリズム

すべて折りたたむ

'thin' オプションと共に使用した場合、bwmorph は、次のアルゴリズム [3] を使用します。

  1. 最初の部分反復では、条件 G1G2G3 がすべて満たされる場合にのみ、ピクセル p を削除します。

  2. 2 番目の部分反復では、条件 G1G2G3 がすべて満たされる場合にのみ、ピクセル p を削除します。

条件 G1 は次のとおりです。

XH(p)=1

ここで、

XH(p)=i=14bi

bi={1, if x2i1=0 and (x2i=1 or x2i+1=1)0, otherwise                                          

x1x2、...、x8 は、p の 8 つの近傍の値です。東近傍から反時計回りに番号が振られています。

条件 G2 は次のとおりです。

2min{n1(p),n2(p)}3

ここで、

n1(p)=k=14x2k1x2k

n2(p)=k=14x2kx2k+1

条件 G3 は次のとおりです。

条件 G3' は次のとおりです。

(x6x7x¯4)x5=0

細線化アルゴリズムの反復作業 1 回分は、部分反復作業 2 回分で構成されています。反復回数 (n=Inf) として無限数を指定すると、イメージが変更しなくなるまで反復が行われます。条件はすべて、事前に計算されたルックアップ テーブルをもつ applylut を使用してテストされます。

参照

[1] Haralick, Robert M., and Linda G. Shapiro, Computer and Robot Vision, Vol. 1, Addison-Wesley, 1992.

[2] Kong, T. Yung and Azriel Rosenfeld, Topological Algorithms for Digital Image Processing, Elsevier Science, Inc., 1996.

[3] Lam, L., Seong-Whan Lee, and Ching Y. Suen, "Thinning Methodologies-A Comprehensive Survey," IEEE Transactions on Pattern Analysis and Machine Intelligence, Vol 14, No. 9, September 1992, page 879, bottom of first column through top of second column.

[4] Pratt, William K., Digital Image Processing, John Wiley & Sons, Inc., 1991.

拡張機能

R2006a より前に導入

この情報は役に立ちましたか?