ドキュメンテーション

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

lazysnapping

グラフに基づくセグメンテーションを使用した前景と背景へのイメージのセグメント化

構文

BW = lazysnapping(A,L,foremask,backmask)
BW = lazysnapping(A,L,foreind,backind)
BW = lazysnapping(V,___)
BW = lazysnapping(___,Name,Value)

説明

BW = lazysnapping(A,L,foremask,backmask) は、イメージ A をレイジー スナッピングを使用して前景領域と背景領域にセグメント化します。ラベル行列 L はイメージの部分領域を指定します。foremaskbackmask はイメージ内のピクセルを前景および背景としてそれぞれ指定するマスクです。

BW = lazysnapping(A,L,foreind,backind) は、イメージ A を前景領域と背景領域にセグメント化します。foreindbackind は前景および背景としてそれぞれマークされるイメージ内のピクセルの線形インデックスを指定します。

BW = lazysnapping(V,___) は、ボリューム V を前景領域と背景領域にセグメント化します。

BW = lazysnapping(___,Name,Value) は、セグメンテーションの特性を制御する名前と値のペアを使用してイメージまたはボリュームをセグメント化します。

すべて折りたたむ

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

RGB = imread('peppers.png');

イメージ上の複数の場所を前景としてマークします。

figure; 
imshow(RGB)
h1 = impoly(gca,[34,298;114,140;195,135;...
    259,200;392,205;467,283;483,104],'Closed',false);

その場所を線形インデックスに変換します。

foresub = getPosition(h1);
foregroundInd = sub2ind(size(RGB),foresub(:,2),foresub(:,1));

イメージ上の複数の場所を背景としてマークします。

figure; 
imshow(RGB)
h2 = impoly(gca,[130,52;170,32],'Closed',false);

その場所を線形インデックスに変換します。

backsub = getPosition(h2);
backgroundInd = sub2ind(size(RGB),backsub(:,2),backsub(:,1));

ラベル行列を生成します。

L = superpixels(RGB,500);

レイジー スナッピングを実行します。

BW = lazysnapping(RGB,L,foregroundInd,backgroundInd);

マスクされたイメージを作成します。

maskedImage = RGB;
maskedImage(repmat(~BW,[1 1 3])) = 0;
figure; 
imshow(maskedImage)

3 次元ボリューム イメージをワークスペースに読み込みます。

D = load('mri.mat');
V  = squeeze(D.D);  

前景と背景の初期シード ポイントを識別する 2 次元マスクを作成します。

 seedLevel = 10;
 fseed = V(:,:,seedLevel) > 75;
 bseed = V(:,:,seedLevel) == 0;
 figure; 
 imshow(fseed)

 figure; 
 imshow(bseed)

シード ポイントを空の 3 次元マスクに配置します。

fmask = zeros(size(V));
bmask = fmask;
fmask(:,:,seedLevel) = fseed;
bmask(:,:,seedLevel) = bseed;

3 次元ラベル行列を生成します。

 L = superpixels3(V,500);

レイジー スナッピングを使用して、イメージを前景と背景にセグメント化します。

bw = lazysnapping(V,L,fmask,bmask);

セグメント化された 3 次元イメージを表示します。

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

入力引数

すべて折りたたむ

入力イメージ。実数、有限、非スパースの数値配列として指定します。イメージが double または single の場合、lazysnapping はイメージの範囲を [0 1] と仮定します。イメージが uint16int16 および uint8 の場合、lazysnapping はイメージの範囲を、与えられたデータ型の全範囲と仮定します。データ型に基づいて想定される範囲に値が適合していない場合、イメージを必要な範囲にスケーリングするか、EdgeWeightScaleFactor を調整して、結果を向上させます。

データ型: single | double | int16 | uint8 | uint16

入力ボリューム。実数、有限、非スパースの数値配列として指定します。

例:

データ型: single | double | int16 | uint8 | uint16

入力イメージまたはボリュームのラベル行列。数値配列として指定します。2 次元グレースケール イメージおよび 3 次元ボリューム グレースケール イメージの場合、L のサイズは入力イメージ A のサイズと同じでなければなりません。カラー イメージおよびマルチチャネル イメージの場合、L は 2 次元配列で、最初の 2 次元が入力イメージ A の最初の 2 次元と同じでければなりません。

ラベル行列の任意の部分領域を、前景マスクと背景マスクの両方に所属するものとしてマークしないでください。ラベル行列の領域に前景マスクと背景マスクの両方に所属するピクセルが含まれる場合、lazysnapping は領域を背景にセグメント化します。

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

前景を定義するマスク イメージ。論理配列として指定します。2 次元グレースケール イメージおよび 3 次元ボリューム グレースケール イメージの場合、foremask のサイズは入力イメージ A のサイズと同じでなければなりません。カラー イメージおよびマルチチャネル イメージの場合、foremask は 2 次元配列で、最初の 2 次元が入力イメージ A の最初の 2 次元と同じでければなりません。

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

背景を定義するマスク イメージ。論理配列として指定します。2 次元グレースケール イメージおよび 3 次元ボリューム グレースケール イメージの場合、backmask のサイズは入力イメージ A のサイズと同じでなければなりません。カラー イメージおよびマルチチャネル イメージの場合、backmask は 2 次元配列で、最初の 2 次元が入力イメージ A の最初の 2 次元と同じでければなりません。

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

ラベル行列内の前景ピクセルの線形インデックス。数値ベクトルとして指定します。

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

背景を定義するピクセルの線形インデックス。数値ベクトルとして指定します。

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

名前/値のペアの引数

オプションの Name,Value 引数のペアをコンマ区切りで指定します。ここで、Name は引数名で、Value は対応する値です。Name は単一引用符 (' ') で囲まなければなりません。Name1,Value1,...,NameN,ValueN のように、複数の名前と値のペアの引数を任意の順番で指定できます。

例:

すべて折りたたむ

連結要素の連結性。2 次元イメージの場合は 4 または 8、3 次元イメージ (ボリューム) の場合は 6、18 または 26 に指定します。

例:

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

ラベル行列の部分領域間のエッジの重みに対する倍率。正のスカラーとして指定します。一般的な値の範囲は [10 1000] です。この値を大きくすると、lazysnapping では近傍の部分領域が前景または背景としてまとめてラベル付けされる可能性が高くなります。

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

出力引数

すべて折りたたむ

出力イメージ。ラベル行列 L と同じサイズの数値配列として返されます。

アルゴリズム

Li らによって開発されたレイジー スナッピング アルゴリズムは、前景と背景の値を K-means 法でクラスター化します。ここでのレイジー スナッピング アルゴリズムの実装には、類似の前景ピクセルや背景ピクセルのクラスター化は含まれません。パフォーマンスを向上させるために、前景または背景として識別される類似値のピクセルの数を削減してください。

参照

[1] Y. Li, S. Jian, C. Tang, H. Shum, Lazy Snapping In Proceedings from the 31st International Conference on Computer Graphics and Interactive Techniques, 2004.

R2017a で導入

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