このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。
watershed
Watershed 変換
説明
watershed 変換は、明るいピクセルが高い高度、暗いピクセルが低い高度を表す表面として扱うことにより、イメージ内の "集水域 (catchment basins)" または "流域の稜線 (watershed ridge lines)" を検出します。watershed 変換を使用して、連続する関心領域を個別のオブジェクトにセグメント化できます。
例
watershed 変換の計算と結果のラベル行列の表示
オーバーラップした 2 つの円形オブジェクトが含まれるバイナリ イメージを作成します。イメージを表示します。
center1 = -40;
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;
imshow(bw)
title('Binary Image with Overlapping Objects')
バイナリ イメージの補数の距離変換を計算します。出力イメージの各ピクセルの値は、そのピクセルから bw
内の最も近い非ゼロ ピクセルまでの距離です。
D = bwdist(~bw);
imshow(D,[])
title('Distance Transform of Binary Image')
Watershed 変換の場合に明るいピクセルが高い高度、暗いピクセルが低い高度を表すように、距離変換されたイメージの補数を取ります。
D = -D;
imshow(D,[])
title('Complement of Distance Transform')
Watershed 変換を計算します。ROI の外側にあるピクセルを 0
に設定します。
L = watershed(D); L(~bw) = 0;
結果として得られるラベル行列を RGB イメージとして表示します。
rgb = label2rgb(L,'jet',[.5 .5 .5]); imshow(rgb) title('Watershed Transform')
3 次元バイナリ イメージの watershed 変換の計算
オーバーラップする 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
入力引数
A
— 入力イメージ
数値配列 | logical 配列
入力イメージ。任意の次元の数値配列または logical 配列として指定します。
データ型: single
| double
| int8
| int16
| int32
| int64
| uint8
| uint16
| uint32
| uint64
| logical
conn
— ピクセルの連結性
4
| 8
| 6
| 18
| 26
| 0
と 1
から成る 3 x 3 x ... x 3 の行列
ピクセルの連結性。次の表のいずれかの値を指定します。既定の連結性は 2 次元イメージでは 8
、3 次元イメージでは 26
です。
値 | 意味 | |
---|---|---|
2 次元連結性 | ||
| ピクセルのエッジの部分が接触している場合、ピクセルは連結されます。ピクセルの近傍は水平方向または垂直方向に隣接するピクセルです。 |
現在のピクセルを灰色で示します。 |
| ピクセルのエッジまたはコーナーが接触している場合、ピクセルは連結されます。ピクセルの近傍は水平方向、垂直方向または対角方向に隣接するピクセルです。 |
現在のピクセルを灰色で示します。 |
3 次元連結性 | ||
| 面が接触している場合、ピクセルは連結されます。ピクセルの近傍は次のように隣接するピクセルです。
|
現在のピクセルを灰色で示します。 |
| 面またはエッジが接触している場合、ピクセルは連結されます。ピクセルの近傍は次のように隣接するピクセルです。
|
現在のピクセルは立方体の中心です。 |
| 面、エッジまたはコーナーが接触している場合、ピクセルは連結されます。ピクセルの近傍は次のように隣接するピクセルです。
|
現在のピクセルは立方体の中心です。 |
高次元の場合、watershed
は既定値
を使用します。conndef
(ndims(A),'maximal')
連結性は、0
と 1
から成る 3 × 3 × ... × 3 行列を指定し、任意の次元に対してより一般的に定義することもできます。1
の値を持つ要素は、conn
の中心要素に対する近傍の位置を定義します。conn
は、その中心要素に関して対称でなければなりません。詳細については、カスタム連結性の定義を参照してください。
メモ
既定以外の連結性を設定した場合、イメージのエッジ上のピクセルは、境界上のピクセルであるとは見なされません。たとえば、conn = [0 0 0; 1 1 1; 0 0 0]
の場合、最初と最後の行の上の要素は、連結性の定義に従って、イメージの外側の領域と接続していないため境界のピクセルとは見なされません。
データ型: double
| logical
出力引数
L
— ラベル行列
非負の整数の数値配列
ラベル行列。非負の整数の数値配列として指定します。0
とラベル付けされた要素は、固有の watershed 領域には属しません。1
とラベル付けされた要素は、最初の watershed 領域に属し、2 とラベル付けされた要素は、2 番目の watershed 領域に属する、というようになります。
ヒント
この関数で使用される watershed 変換アルゴリズムは、Image Processing Toolbox™ ソフトウェアのVersion 5.4 (R2007a) で変更されています。以前のアルゴリズムにより、連続的ではない、ラベルの付いた watershed 領域が生成される場合があります。以前のアルゴリズムと同じ結果を得る必要がある場合は、関数
watershed_old
を使用してください。オーバーセグメンテーションを防ぐには、関数
watershed
を使用する前に関数imhmin
を使用して、浅い位置にある最小値をイメージから削除します。
アルゴリズム
watershed
は Fernand Meyer アルゴリズムを使用します [1]。
参照
[1] Meyer, Fernand, "Topographic distance and watershed lines,” Signal Processing , Vol. 38, July 1994, pp. 113-125.
拡張機能
C/C++ コード生成
MATLAB® Coder™ を使用して C および C++ コードを生成します。
使用上の注意および制限:
watershed
では C コードの生成がサポートされています (MATLAB® Coder™ が必要)。汎用のMATLAB Host Computer
ターゲット プラットフォームを選択した場合、プリコンパイルされたプラットフォーム固有の共有ライブラリを使用するコードが、watershed
によって生成されます。共有ライブラリを使用するとパフォーマンスの最適化は維持されますが、コードを生成できるターゲット プラットフォームが限定されます。詳細については、Image Processing Toolbox でサポートされているコード生成のタイプを参照してください。2 次元イメージのみをサポートします。
サポートされる連結性は
4
または8
のみです。65,535 までの領域を含めるイメージをサポートします。
出力タイプは常に
uint16
です。
GPU コード生成
GPU Coder™ を使用して NVIDIA® GPU のための CUDA® コードを生成します。
使用上の注意および制限:
2 次元イメージのみをサポートします。
サポートされる連結性は
4
または8
のみです。65,535 までの領域を含めるイメージをサポートします。
出力タイプは常に
uint16
です。
スレッドベースの環境
MATLAB® の backgroundPool
を使用してバックグラウンドでコードを実行するか、Parallel Computing Toolbox™ の ThreadPool
を使用してコードを高速化します。
この関数は、スレッドベースの環境を完全にサポートします。詳細については、スレッドベースの環境での MATLAB 関数の実行を参照してください。
バージョン履歴
R2006a より前に導入R2022b: スレッドベース環境のサポート
watershed
は、スレッドベースの環境をサポートするようになりました。
参考
bwlabel
| bwlabeln
| bwdist
| regionprops
| imhmin
MATLAB コマンド
次の MATLAB コマンドに対応するリンクがクリックされました。
コマンドを MATLAB コマンド ウィンドウに入力して実行してください。Web ブラウザーは MATLAB コマンドをサポートしていません。
Select a Web Site
Choose a web site to get translated content where available and see local events and offers. Based on your location, we recommend that you select: .
You can also select a web site from the following list:
How to Get Best Site Performance
Select the China site (in Chinese or English) for best site performance. Other MathWorks country sites are not optimized for visits from your location.
Americas
- América Latina (Español)
- Canada (English)
- United States (English)
Europe
- Belgium (English)
- Denmark (English)
- Deutschland (Deutsch)
- España (Español)
- Finland (English)
- France (Français)
- Ireland (English)
- Italia (Italiano)
- Luxembourg (English)
- Netherlands (English)
- Norway (English)
- Österreich (Deutsch)
- Portugal (English)
- Sweden (English)
- Switzerland
- United Kingdom (English)