Main Content

このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。

bwskel

すべてのオブジェクトを 2 次元のバイナリ イメージまたは 3 次元のバイナリ ボリュームの線に縮小

説明

B = bwskel(A) は、イメージの本質的な構造を変えないで、2 次元バイナリ イメージ A の中のすべてのオブジェクトを 1 ピクセル幅の曲線にします。このプロセス "骨格化" は、オブジェクトのトポロジとオイラー数 (オイラー標数とも呼ばれる) を維持しながら中央の線を抽出します。

B = bwskel(V) は 3 次元バイナリ ボリュームの骨格を返します。

B = bwskel(___,'MinBranchLength',N) は、骨格の最小分岐長 N を指定します。bwskel は指定長より短いすべての分岐を削除 (枝刈り) します。bwskel は 2 次元の場合は 8 個との連結、3 次元の場合は 26 個との連結を使用して分岐でのピクセル数として長さを計算します。

すべて折りたたむ

2 次元グレースケール イメージをワークスペースに読み取ります。イメージを表示します。対象オブジェクトは、淡色の背景に対する暗い糸です。

I = imread('threads.png');
imshow(I)

Figure contains an axes object. The axes object contains an object of type image.

骨格化には、前景ピクセルが 1 (白) で背景が 0 (黒) のバイナリ イメージが必要です。元のイメージを骨格化に適したイメージにするために、イメージの補数を取り、オブジェクトを明るくして背景を暗くします。次に、結果を 2 値化します。

Icomplement = imcomplement(I);
BW = imbinarize(Icomplement);
imshow(BW)

Figure contains an axes object. The axes object contains an object of type image.

bwskel を使用してバイナリ イメージの骨格化を実行します。

out = bwskel(BW);

関数 labeloverlay を使用して、骨格を元のイメージの上に重ねて表示します。骨格は、暗い糸の上に 1 ピクセル幅の青い線として表示されます。

imshow(labeloverlay(I,out,'Transparency',0))

Figure contains an axes object. The axes object contains an object of type image.

骨格上に表れている小さい枝分かれした部分を枝刈りし、結果を表示します。イメージの中心近くにある糸から 1 本の短い分岐が枝刈りされます。

out2 = bwskel(BW,'MinBranchLength',15);
imshow(labeloverlay(I,out2,'Transparency',0))

Figure contains an axes object. The axes object contains an object of type image.

バイナリ イメージをワークスペースに読み取ります。

BW1 = imread('circbw.tif');

関数 bwskel を使用してイメージのオブジェクトを骨格化します。

BW2 = bwskel(BW1);

元のイメージと骨格化されたイメージを左右に並べて表示します。

montage({BW1,BW2},'BackgroundColor','blue','BorderSize',5)

Figure contains an axes object. The axes object contains an object of type image.

ボリューム データセットをワークスペース内に読み込みます。データセットの名前は spiralVol です。volshow を使用してボリュームを表示します。

load spiralVol.mat
volshow(spiralVol);

spiralVol データセットを、関数 bwskel で必要なバイナリ形式に変換します。

spiralVolLogical = imbinarize(spiralVol);

データセットのスパイラル形状を骨格化します。volshow を使用して骨格化されたボリュームを表示します。

spiralVolSkel = bwskel(spiralVolLogical);
volshow(spiralVolSkel);

.

入力引数

すべて折りたたむ

バイナリ イメージ。2 次元 logical 行列として指定します。

データ型: logical

3 次元バイナリ ボリューム。3 次元 logical 配列として指定します。

データ型: logical

最小分岐長。非負の整数として指定します。bwskelN より短い分岐を枝刈りします。既定では、bwskel は枝刈りしません。

出力引数

すべて折りたたむ

骨格化されたイメージまたはボリューム。入力イメージまたはボリュームと同じサイズの 2 次元 logical 行列または 3 次元 logical 配列として返されます。

ヒント

  • bwskelbwmorph の両方で 2 次元イメージを骨格化できますが、bwmorph を使用すると bwskel を使用した結果と異なることがあります。異なるアルゴリズムを使用しているためです。関数 bwskel は 2 次元イメージで 4 個の連結性を使用しますが、bwmorph は 8 個の連結性を使用します。

  • bwskel では、バイナリ イメージ内の前景オブジェクトが白 (logical true) であると仮定します。イメージの背景が白でオブジェクトが黒である場合、bwskel への入力としてイメージの補数を使用します。imcomplement を使用して補数を計算できます。

アルゴリズム

  • 関数 bwskel は中心軸変換を使用します。

参照

[1] Ta-Chih Lee, Rangasami L. Kashyap and Chong-Nam Chu. Building skeleton models via 3-D medial surface/axis thinning algorithms. Computer Vision, Graphics, and Image Processing, 56(6):462-478, 1994.

[2] Kerschnitzki, M, Kollmannsberger, P, Burghammer, M. et al. Architecture of the osteocyte network correlates with bone material quality. Journal of Bone and Mineral Research, 28(8):1837-1845, 2013.

拡張機能

バージョン履歴

R2018a で導入

すべて展開する