ドキュメンテーション

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

watershed

構文

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

説明

L = watershed(A) は、入力行列 A の watershed 領域を指定するラベル行列 L を返します。watershed 変換は、明るいピクセルが高い高度、暗いピクセルが低い高度を表す表面として扱うことにより、イメージ内の "集水域 (catchment basins)" または "流域の稜線 (watershed ridge lines)" を検出します。

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

入力引数

すべて折りたたむ

入力イメージ。任意の次元の数値配列または logical 配列として指定します。

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

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

ピクセルの連結性。次の表のいずれかの値を指定します。既定の連結性は 2 次元イメージでは 8、3 次元イメージでは 26 です。

意味

2 次元連結性

4 連結

ピクセルのエッジの部分が接触している場合、ピクセルは連結されます。ピクセルの近傍は水平方向または垂直方向に隣接するピクセルです。

8 連結

ピクセルのエッジまたはコーナーが接触している場合、ピクセルは連結されます。ピクセルの近傍は水平方向、垂直方向または対角方向に隣接するピクセルです。

3 次元連結性

6 連結

面が接触している場合、ピクセルは連結されます。ピクセルの近傍は次のように隣接するピクセルです。

  • 次のいずれかの方向: 奥、手前、左、右、上および下

18 連結

面またはエッジが接触している場合、ピクセルは連結されます。ピクセルの近傍は次のように隣接するピクセルです。

  • 次のいずれかの方向: 奥、手前、左、右、上および下

  • 右下または上の奥など、2 つの方向の組み合わせ

26 連結

面、エッジまたはコーナーが接触している場合、ピクセルは連結されます。ピクセルの近傍は次のように隣接するピクセルです。

  • 次のいずれかの方向: 奥、手前、左、右、上および下

  • 右下または上の奥など、2 つの方向の組み合わせ

  • 右上の奥または左下の奥など、3 つの方向の組み合わせ

高次元の場合、watershed は既定値 conndef(ndims(A),'maximal') を使用します。

連結性は、01 から成る 3 × 3 × ... × 3 行列を指定し、任意の次元に対してより一般的に定義することもできます。1 の値を持つ要素は、conn の中心要素に対する近傍の位置を定義します。conn は、その中心要素に関して対称でなければなりません。詳細は、カスタム連結性の定義を参照してください。

メモ

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

データ型: double | logical

出力引数

すべて折りたたむ

ラベル行列。非負の整数の数値配列として指定します。0 とラベル付けされた要素は、固有の watershed 領域には属しません。1 とラベル付けされた要素は、最初の watershed 領域に属し、2 とラベル付けされた要素は、2 番目の watershed 領域に属する、というようになります。

ヒント

  • この関数で使用される 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 より前に導入