Main Content

gradientweight

イメージの勾配に基づいてイメージ ピクセルの重みを計算

説明

W = gradientweight(I) はイメージ I の各ピクセルの勾配の大きさに基づいて各ピクセルの重みを計算し、重み配列 W を返します。ピクセルの重みはそのピクセル位置における勾配値に反比例します。勾配が小さいピクセル (滑らかな領域) は重みが大きく、勾配が大きいピクセル (エッジ上など) は重みが小さくなります。

W = gradientweight(I,sigma) はイメージの勾配計算に使用するガウス関数の導関数の標準偏差として sigma を使用します。

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

すべて折りたたむ

この例では、イメージの勾配から導出された重みに基づいて高速マーチング法を使用してイメージをセグメント化します。

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

I = imread('coins.png');
imshow(I)
title('Original Image')

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

イメージの勾配に基づいて重みを計算します。

sigma = 1.5;
W = gradientweight(I, sigma, 'RolloffFactor', 3, 'WeightCutoff', 0.25);

シード位置を選択します。

R = 70; C = 216;
hold on; 
plot(C, R, 'r.', 'LineWidth', 1.5, 'MarkerSize',15);
title('Original Image with Seed Location')

Figure contains an axes object. The axes object with title Original Image with Seed Location contains 2 objects of type image, line. One or more of the lines displays its values using only markers

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

thresh = 0.1;
[BW, D] = imsegfmm(W, C, R, thresh);
figure, imshow(BW)
title('Segmented Image')
hold on; 
plot(C, R, 'r.', 'LineWidth', 1.5, 'MarkerSize',15);

Figure contains an axes object. The axes object with title Segmented Image contains 2 objects of type image, line. One or more of the lines displays its values using only markers

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

figure, imshow(D)
title('Geodesic Distances')
hold on; 
plot(C, R, 'r.', 'LineWidth', 1.5, 'MarkerSize',15);

Figure contains an axes object. The axes object with title Geodesic Distances contains 2 objects of type image, line. One or more of the lines displays its values using only markers

入力引数

すべて折りたたむ

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

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

ガウス関数の導関数の標準偏差。正の数値として指定します。

データ型: double

名前と値の引数

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

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

例: W = gradientweight(I,1.5,'RolloffFactor',3,'WeightCutoff',0.25);

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

データ型: double

重み値のしきい値。'WeightCutoff'[1e-3 1] の範囲の正の数値で構成されるコンマ区切りのペアとして指定します。このパラメーターを使用して重み値にしきい値を設定すると、指定した値に満たない重み値はすべて抑制されます。これらのピクセルは小さい定数値 (1e-3) に設定されます。このパラメーターは、高速マーチング法のセグメンテーション関数 imsegfmm への入力として出力重み配列 W を使用するときに、出力の精度を改善するのに使用できます。

データ型: double

出力引数

すべて折りたたむ

重み配列。入力イメージ I と同じサイズの数値配列として返されます。この重み配列のクラスは、Isingle の場合は single、そうでない場合は double になります。

ヒント

  • Isingle クラスの場合には、gradientweight は内部的に単精度浮動小数点数演算を使用します。そうでない場合には、gradientweightI のすべてのクラスの内部計算に倍精度浮動小数点演算を使用します。

バージョン履歴

R2014b で導入