Main Content

graydiffweight

グレースケール強度の差に基づくイメージ ピクセルの重み計算

説明

W = graydiffweight(I,refGrayVal) はグレースケール イメージ I 内の各ピクセルの重みを計算します。重みは、ピクセルの強度とスカラー refGrayVal によって指定された参照グレースケール強度との差の絶対値です。セグメント化するオブジェクトの典型的な値を参照グレースケール強度値として選択します。重みは配列 W に入れて返されます。この配列のサイズは入力イメージ I と同じです。

ピクセルの重みはピクセル位置におけるグレースケール強度値の差の絶対値に反比例します。差が小さい (強度値が refGrayVal に近い) 場合、重み値は大きくなります。差が大きい (強度値が refGrayVal と大きく異なる) 場合、重み値は小さくなります。

W = graydiffweight(I,mask) はピクセルの重みを計算します。ここで、参照グレースケール強度値は mask で論理値 true とマークされている I 内のすべてのピクセルの平均強度値になります。参照グレースケール強度値を計算する場合、いくつかのピクセルの平均を使用した方が前の構文のように単一の参照強度値を使用するよりも効率的な場合があります。

W = graydiffweight(I,C,R) はピクセルの重みを計算します。ここで、参照グレースケール強度値はベクトル C および R で指定されるピクセル位置の平均強度値になります。CR は、ピクセル位置の列インデックスおよび行インデックスを格納します。これらは I の有効なピクセル インデックスでなければなりません。

W = graydiffweight(V,C,R,P) は、ベクトル CR および P で指定される、ボリューム V 内の各ボクセルの重みを計算します。CR および P はボクセル位置の列インデックス、行インデックス、平面インデックスを格納し、これらは V の有効なボクセル インデックスでなければなりません。

W = graydiffweight(___, Name,Value) は名前と値のペアを使用して重み計算の各要素を制御し、重み配列 W を返します。

メモ

関数 graydiffweight を関数 imsegfmm と共に使用してイメージとボリュームのセグメンテーションを行う方法の詳細については、詳細のセクションを参照してください。

すべて折りたたむ

この例では、シード位置の強度値から計算されたグレースケール強度の差を重みとして使用する高速マーチング法を使用してイメージ内のオブジェクトをセグメント化します。

イメージを読み取り、それを表示します。

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

Figure contains an axes object. The axes object with title Original Image contains an object of type image.

参照グレースケール強度値に使用するピクセルの行および列インデックスを指定します。

seedpointR = 159;
seedpointC = 67;

イメージのグレースケール強度の差の重み配列を計算し、それを表示します。例では、より良い可視化のために、W を対数スケールにしています。

W = graydiffweight(I, seedpointC, seedpointR,'GrayDifferenceCutoff',25);
figure, imshow(log(W),[])

Figure contains an axes object. The axes object contains an object of type image.

グレースケール強度の差異の重み配列を使用してイメージをセグメント化します。重み配列の作成に使用したものと同じシード ポイント ベクトルを指定します。

thresh = 0.01;
BW = imsegfmm(W, seedpointC, seedpointR, thresh);
figure, imshow(BW)
title('Segmented Image')

Figure contains an axes object. The axes object with title Segmented Image contains an object of type image.

入力引数

すべて折りたたむ

グレースケール イメージ。2 次元数値行列として指定します。

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

グレースケール ボリューム。3 次元の数値配列として指定します。

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

参照グレースケール強度値。スカラーとして指定します。

データ型: double

参照グレースケール強度マスク。I と同じサイズの logical 配列として指定します。

データ型: logical

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

データ型: double

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

データ型: double

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

データ型: double

名前と値の引数

オプションの引数のペアを Name1=Value1,...,NameN=ValueN として指定します。ここで、Name は引数名で、Value は対応する値です。名前と値の引数は他の引数の後に指定しなければなりませんが、ペアの順序は重要ではありません。

R2021a より前では、コンマを使用して名前と値をそれぞれ区切り、Name を引用符で囲みます。

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

出力の重みのロールオフ係数。'RolloffFactor'double クラスの正のスカラーで構成されるコンマ区切りのペアとして指定します。強度値と参照グレースケール強度の差の絶対値の関数で、出力の重みが低下する速さを制御します。ピクセルの強度値を 2 次元プロットで表示すると、値が領域のエッジで徐々に変化して緩やかな傾斜ができます。セグメント化されたイメージのエッジをはっきりさせたい場合があるかもしれません。ロールオフ係数を使用して、強度値が変化し始めるポイントにおける重み値の曲線の傾きをコントロールします。高い値を指定すると、出力の重み値が強度が変化する領域の周辺で急激に低下します。低い値を指定すると、出力の重みが強度が変化する領域の周辺で緩やかに低下します。このパラメーターで推奨される範囲は [0.5 4] です。

データ型: double

グレースケール強度の差の絶対値に対するしきい値。'GrayDifferenceCutoff'double クラスの非負のスカラーで構成されるコンマ区切りのペアとして指定します。強度値の差にしきい値を設定すると、カットオフ値を超える出力の重み値が強く抑制されます。graydiffweight は、これらのピクセルに最小の重み値を割り当てます。このパラメーターは、高速マーチング法に基づくセグメンテーションで (imsegfmm への入力として) 出力の重み配列 W を使用する場合に、セグメンテーションの出力の正確性を向上させるのに役立つ場合があります。このパラメーターの既定値は Inf で、ハードなカットオフがないことを意味します。

データ型: double

出力引数

すべて折りたたむ

重み配列。入力イメージ I または入力ボリューム V と同じサイズの数値配列として指定します。入力イメージまたは入力ボリュームが single クラスの場合は Wsingle クラス、そうでない場合 Wdouble クラスです。

詳細

すべて折りたたむ

イメージのセグメンテーション

関数 graydiffweight によって返された重みと関数 imsegfmm を使用してイメージのセグメンテーションを行うことができます。imsegfmm を使用してセグメンテーションを行うには、参照グレースケール強度マスクで指定されたシード位置、または参照ピクセルの列インデックスと行インデックスで指定されたシード位置が必要です。

  • 関数 graydiffweight にスカラーの参照グレースケール強度値 refGrayVal を使用して重みを計算する場合、refGrayVal に等しい平均強度値をもつシード位置を特定します。imsegfmm を使用してセグメンテーションを行う場合、シード位置の列インデックス C と行インデックス R、およびしきい値レベル thresh を指定します。

    W = graydiffweight(I,refGrayVal);
    BW = imsegfmm(W,C,R,thresh);

  • 関数 graydiffweight に参照グレースケール強度マスク mask を使用して重みを計算し、imsegfmm を使用してセグメンテーションを行う場合、同じマスクを指定し、さらにしきい値レベル thresh を指定します。

    W = graydiffweight(I,mask);
    BW = imsegfmm(W,mask,thresh);

  • 関数 graydiffweight に参照ピクセルの列インデックス C と行インデックス R を使用して重みを計算し、imsegfmm を使用してセグメンテーションを行う場合、同じ列インデックスと行インデックスを指定し、さらにしきい値レベル thresh を指定します。

    W = graydiffweight(I,C,R);
    BW = imsegfmm(W,C,R,thresh);

ボリュームのセグメンテーション

関数 graydiffweight によって返された重みと関数 imsegfmm を使用してボリュームのセグメンテーションを行うことができます。imsegfmm を使用してセグメンテーションを行うには、参照ボクセルの列インデックス、行インデックス、および平面インデックスで指定されたシード位置が必要です。

  • 関数 graydiffweight に参照ボクセルの列インデックス C、行インデックス R、平面インデックス P を使用して重みを計算し、imsegfmm を使用してセグメンテーションを行う場合、同じ列インデックス、行インデックス、平面インデックスを指定し、さらにしきい値レベル thresh を指定します。

    W = graydiffweight(V,C,R,P);
    BW = imsegfmm(W,C,R,P,thresh);

バージョン履歴

R2014b で導入