ドキュメンテーション

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

watershed

構文

L = watershed(A)
L = watershed(A,conn)

説明

L = watershed(A) は、任意の次元の入力行列 A の watershed 領域を指定するラベル行列 L を返します。watershed 変換は、明るいピクセルが高い高度、暗いピクセルが低い高度を表す表面として扱うことにより、イメージ内の "集水域 (catchment basins)" または "流域の稜線 (watershed ridge lines)" を検出します。L の要素は 0 以上の整数値です。0 とラベル付けされた要素は、固有の watershed 領域には属しません。1 とラベル付けされた要素は、最初の watershed 領域に属し、2 とラベル付けされた要素は、2 番目の watershed 領域に属する、というようになります。既定の設定では、watershed は 2 次元入力の 8 連結近傍と、3 次元入力の 26 連結近傍を使用します。高次元の場合、watershedconndef(ndims(A),'maximal') によって指定された連結性を使用します。

L = watershed(A,conn) は watershed 計算で使用する連結性を指定します。

すべて折りたたむ

watershed 変換を計算し、結果のラベル行列をRGB イメージとして表示します。この例は 2 次元イメージを使用します。

オーバーラップした 2 つの円形オブジェクトが含まれるバイナリ イメージを作成して表示します。

center1 = -10;
center2 = -center1;
dist = sqrt(2*(2*center1)^2);
radius = dist/2 * 1.4;
lims = [floor(center1-1.2*radius) ceil(center2+1.2*radius)];
[x,y] = meshgrid(lims(1):lims(2));
bw1 = sqrt((x-center1).^2 + (y-center1).^2) <= radius;
bw2 = sqrt((x-center2).^2 + (y-center2).^2) <= radius;
bw = bw1 | bw2;
figure
imshow(bw,'InitialMagnification','fit'), title('bw')

バイナリ イメージの補数の距離変換を計算します。

D = bwdist(~bw);
figure
imshow(D,[],'InitialMagnification','fit')
title('Distance transform of ~bw')

距離変換の補数を計算し、オブジェクトに属さないピクセルを Inf に強制します。

D = -D;
D(~bw) = Inf;

watershed 変換を計算し、結果のラベル行列をRGB イメージとして表示します。

L = watershed(D);
L(~bw) = 0;
rgb = label2rgb(L,'jet',[.5 .5 .5]);
figure
imshow(rgb,'InitialMagnification','fit')
title('Watershed transform of D')

オーバーラップする 2 つ球が含まれる 3 次元バイナリ イメージを作成します。

center1 = -10;
center2 = -center1;
dist = sqrt(3*(2*center1)^2);
radius = dist/2 * 1.4;
lims = [floor(center1-1.2*radius) ceil(center2+1.2*radius)];
[x,y,z] = meshgrid(lims(1):lims(2));
bw1 = sqrt((x-center1).^2 + (y-center1).^2 + ...
           (z-center1).^2) <= radius;
bw2 = sqrt((x-center2).^2 + (y-center2).^2 + ...
           (z-center2).^2) <= radius;
bw = bw1 | bw2;
figure, isosurface(x,y,z,bw,0.5), axis equal, title('BW')
xlabel x, ylabel y, zlabel z
xlim(lims), ylim(lims), zlim(lims)
view(3), camlight, lighting gouraud

距離変換を計算します。

D = bwdist(~bw);
figure, isosurface(x,y,z,D,radius/2), axis equal
title('Isosurface of distance transform')
xlabel x, ylabel y, zlabel z
xlim(lims), ylim(lims), zlim(lims)
view(3), camlight, lighting gouraud

距離変換の補数を計算し、オブジェクトでないピクセルを Inf に強制し、watershed 変換を計算します。

D = -D;
D(~bw) = Inf;
L = watershed(D);
L(~bw) = 0;
figure
isosurface(x,y,z,L==1,0.5)
isosurface(x,y,z,L==2,0.5)
axis equal
title('Segmented objects')
xlabel x, ylabel y, zlabel z
xlim(lims), ylim(lims), zlim(lims)
view(3), camlight, lighting gouraud

入力引数

すべて折りたたむ

入力イメージ。任意の次元の実数、非スパースの数値配列または論理配列として指定します。

例: RGB = imread('pears.png'); I = rgb2gray(RGB);

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

連結性。次のテーブルのいずれかの値で指定します。

意味

2 次元連結性

4

4 連結近傍

8

8 連結近傍

3 次元連結性

6

6 連結近傍

18

18 連結近傍

26

26 連結近傍

連結性は、conn01 を要素とする 3 x 3 x ... x 3 の行列として使用すると、任意の次元に対してより一般的に定義することもできます。1 の値を持つ要素は、conn の中心要素に対する近傍の位置を定義し、これは中心要素について対称でなければなりません。

メモ:

既定以外の連結性を設定した場合、イメージのエッジ上のピクセルは、境界上のピクセルであるとは見なされません。たとえば、conn = [0 0 0; 1 1 1; 0 0 0] の場合、最初と最後の行の上の要素は、連結性の定義に従って、イメージの外側の領域と接続していないため境界のピクセルとは見なされません。

例: L = watershed(I,4);

データ型: double | logical

出力引数

すべて折りたたむ

ラベル行列。符号なし整数の数値配列として指定します。

ヒント

  • この関数で使用される watershed 変換アルゴリズムは、Image Processing Toolbox™ ソフトウェアのVersion 5.4 (R2007a) で変更されています。以前のアルゴリズムにより、連続的ではない、ラベルの付いた watershed 領域が生成される場合があります。以前のアルゴリズムと同じ結果を得る必要がある場合は、関数 watershed_old を使用してください。

アルゴリズム

watershed は Fernand Meyer アルゴリズムを使用します [1]

参照

[1] Meyer, Fernand, "Topographic distance and watershed lines,” Signal Processing , Vol. 38, July 1994, pp. 113-125.

拡張機能

R2006a より前に導入

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