ドキュメンテーション

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

imsegfmm

高速マーチング法を使用したバイナリ イメージのセグメンテーション

構文

BW = imsegfmm(W,mask,thresh)
BW = imsegfmm(W,C,R,thresh)
BW = imsegfmm(W,C,R,P,thresh)
[BW,D] = imsegfmm(___)

説明

BW = imsegfmm(W,mask,thresh) は高速マーチング法を使用して計算された、セグメント化されたイメージ BW を返します。配列 W は各ピクセルの重みを指定します。mask はシード位置を指定する論理配列です。thresh は範囲 [0 1] 内の非負のスカラーであり、しきい値レベルを指定します。

BW = imsegfmm(W,C,R,thresh) はセグメント化されたイメージを返します。このとき、行インデックスと列インデックスが格納されたベクトル CR でシード位置を指定します。CR には W 内の有効なピクセル インデックスを値として格納しなければなりません。

BW = imsegfmm(W,C,R,P,thresh) はセグメント化されたイメージを返します。このとき、行インデックス、列インデックスおよび平面インデックスが格納されたベクトル CR および P でシード位置を指定します。CR および P には W 内の有効なピクセル インデックスを値として格納しなければなりません。

[BW,D] = imsegfmm(___) は高速マーチング法を使用して計算された正規化後の測地線距離マップ D を返します。BWD をしきい値処理したバージョンで、正規化後の測地線距離値が thresh 未満であるすべてのピクセルが前景ピクセルと見なされて true に設定されています。さまざまなレベルで D をしきい値処理すると、異なるセグメンテーション結果が得られます。

すべて折りたたむ

この例では、高速マーチング法により、シード位置とのグレースケール強度の差に基づいてイメージ内のオブジェクトをセグメント化する方法を説明します。

イメージを読み取ります。

I = imread('cameraman.tif');
imshow(I)
title('Original Image')

マスクを作成し、シード位置を指定します。roipoly を使用してマスクを対話的に作成することもできます。

mask = false(size(I)); 
mask(170,70) = true;

グレースケール強度の差に基づいて重み配列を計算します。

W = graydiffweight(I, mask, 'GrayDifferenceCutoff', 25);

重みを使用してイメージをセグメント化します。

thresh = 0.01;
[BW, D] = imsegfmm(W, mask, thresh);
figure
imshow(BW)
title('Segmented Image')

さまざまなしきい値を使用して測地線距離行列 D をしきい値処理すると、異なるセグメンテーション結果が得られます。

figure
imshow(D)
title('Geodesic Distances')

この例では、人体頭部の MRI データから脳をセグメント化します。

MRI データを読み込みます。

load mri
V = squeeze(D);

データを可視化します。

sizeO = size(V);
figure;
slice(double(V),sizeO(2)/2,sizeO(1)/2,sizeO(3)/2);
shading interp, colormap gray;
title('Original');

シード位置を設定します。

seedR = 75;
seedC = 60;
seedP = 10;

グレースケール強度の差に基づいて重みを計算します。

W = graydiffweight(V, seedC, seedR, seedP , 'GrayDifferenceCutoff', 25);

重みを使用してイメージをセグメント化します。

thresh = 0.002;
BW = imsegfmm(W, seedC, seedR, seedP, thresh);

等値面を使用してセグメント化されたイメージを可視化します。

figure;
p = patch(isosurface(double(BW)));
p.FaceColor = 'red';
p.EdgeColor = 'none';
daspect([1 1 27/64]);
camlight;
lighting phong;

入力引数

すべて折りたたむ

重み配列。非スパースで非負の数値配列として指定します。この重み配列を計算するには、関数 graydiffweightgradientweight を使用します。W の高い値は前景 (オブジェクト) を識別し、低い値は背景を識別します。

例: W = graydiffweight(I, mask,'GrayDifferenceCutoff', 25);

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

シード位置マスク。W と同じサイズの論理配列として指定します。mask が true である位置がシード位置です。graydiffweight を使用して重み行列 W を作成した場合は、graydiffweight で使用したのと同じ mask の値を imsegfmm でも使用することを推奨します。

例: mask = false(size(I)); mask(170,70) = true;

データ型: logical

バイナリ イメージの取得に使用するしきい値レベル。[0 1] の範囲の非負のスカラーとして指定します。通常、低い値を指定すると BW 内の前景領域 (論理値 true) が大きくなり、高い値を指定すると前景領域が小さくなります。

例: 0.5

データ型: double

参照ピクセルの列インデックス。数値ベクトルとして指定します。

例: [50 75 93]

データ型: double

参照ピクセルの行インデックス。数値ベクトルとして指定します。

例: [48 71 89]

データ型: double

参照ピクセルの平面インデックス。数値ベクトルとして指定します。

例: ]

データ型: double

出力引数

すべて折りたたむ

セグメント化されたイメージ。W と同じサイズの論理配列として返されます。

例:

データ型: logical

正規化された測地線距離マップ。W と同じサイズの double の配列として返されます。Wsingle クラスの場合は、Dsingle クラスになります。

ヒント

  • imsegfmm は、single クラスを除くすべてのクラスの内部計算に、倍精度浮動小数点演算を使用します。Wsingle クラスの場合には、imsegfmm は内部的に単精度浮動小数点演算を使用します。

  • 測地線距離イメージ D では、imsegfmm は重み値が 0 または NaN のピクセルを Inf に設定します。これらのピクセルは、セグメント化されたイメージ BW の背景 (論理値 false) に含まれます。

参照

[1] Sethian, J. A. Level Set Methods and Fast Marching Methods: Evolving Interfaces in Computational Geometry, Fluid Mechanics, Computer Vision, and Materials Science, Cambridge University Press, 2nd Edition, 1999.

R2014b で導入

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