Main Content

このページの翻訳は最新ではありません。ここをクリックして、英語の最新版を参照してください。

imgradient

2 次元イメージの勾配の大きさと方向の検出

説明

[Gmag,Gdir] = imgradient(I) は、2 次元のグレースケール イメージまたはバイナリ イメージ I の勾配の大きさ Gmag と勾配の方向 Gdir を返します。

[Gmag,Gdir] = imgradient(I,method) は、指定された method を使用して勾配の大きさと方向を返します。

[Gmag,Gdir] = imgradient(Gx,Gy) は、それぞれ x 方向および y 方向の方向勾配 Gx および Gy から勾配の大きさと方向を返します。

すべて折りたたむ

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

I = imread('coins.png');

プレウィット勾配演算子を指定して勾配の大きさと方向を計算します。

[Gmag, Gdir] = imgradient(I,'prewitt');

勾配の大きさと方向を表示します。

figure
imshowpair(Gmag, Gdir, 'montage');
title('Gradient Magnitude, Gmag (left), and Gradient Direction, Gdir (right), using Prewitt method')

Figure contains an axes. The axes with title Gradient Magnitude, Gmag (left), and Gradient Direction, Gdir (right), using Prewitt method contains an object of type image.

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

I = imread('coins.png');

x 方向勾配と y 方向勾配を計算します。既定では、imgradientxy はソーベル勾配演算子を使用します。

[Gx,Gy] = imgradientxy(I);

方向勾配を表示します。

imshowpair(Gx,Gy,'montage')
title('Directional Gradients Gx and Gy, Using Sobel Method')

Figure contains an axes. The axes with title Directional Gradients Gx and Gy, Using Sobel Method contains an object of type image.

方向勾配を使用して勾配の大きさと方向を計算します。

[Gmag,Gdir] = imgradient(Gx,Gy);

勾配の大きさと方向を表示します。

imshowpair(Gmag,Gdir,'montage')
title('Gradient Magnitude (Left) and Gradient Direction (Right)')

Figure contains an axes. The axes with title Gradient Magnitude (Left) and Gradient Direction (Right) contains an object of type image.

入力引数

すべて折りたたむ

入力イメージ。2 次元グレースケールまたは 2 次元バイナリ イメージとして指定します。

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

勾配演算子。次のいずれかの値に指定します。

メソッド説明
'sobel'

ソーベル勾配演算子: ピクセルの勾配は、3 行 3 列の近傍内のピクセルの重み付き和です。垂直 (y) 方向の勾配の場合、重みは次のようになります。

[ 1  2  1 
  0  0  0 
 -1 -2 -1 ]
x 方向では、重みが転置されます。

'prewitt'

プレウィット勾配演算子: ピクセルの勾配は、3 行 3 列の近傍内のピクセルの重み付き和です。垂直 (y) 方向の勾配の場合、重みは次のようになります。

[ 1  1  1 
  0  0  0 
 -1 -1 -1 ]
x 方向では、重みが転置されます。

'central'

中心差分勾配: ピクセルの勾配は、近傍ピクセルの重み付き差です。y 方向では、dI/dy = (I(y+1) - I(y-1))/2 です。

'intermediate'

中間差分勾配: ピクセルの勾配は、隣接するピクセルと現在のピクセルの間の差です。y 方向では、dI/dy = I(y+1) - I(y) です。

'roberts'

ロバーツ勾配演算子: ピクセルの勾配は、対角方向に隣接するピクセル間の差です。1 方向の勾配の場合、重みは次のようになります。

[ 1  0 
  0 -1 ]
直交方向では、重みは縦軸に沿って反転します。

データ型: char | string

水平方向勾配。数値行列として指定します。横 (x) 軸は列の添字の増加方向を指しています。関数 imgradientxy を使用して Gx を計算できます。

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

垂直方向勾配。Gx と同じサイズの数値行列として指定します。縦 (y) 軸は行の添字の増加方向を指しています。関数 imgradientxy を使用して Gy を計算できます。

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

出力引数

すべて折りたたむ

勾配の大きさ。イメージ I、または方向勾配 Gx および Gy と同じサイズの数値行列として返されます。Gmagdouble クラスです。ただし、入力イメージまたは方向勾配のクラスが single の場合は、single クラスになります。

データ型: double | single

勾配の方向。勾配の大きさ Gmag と同じサイズの数値行列として返されます。Gdir には、正の x 軸から反時計回りで測定した範囲 [-180, 180] 内の角度 (度単位) が含まれます (x 軸は列の添字の増加方向を指しています)。Gdir のクラスは double です。ただし、入力イメージ I または方向勾配のクラスが single の場合は、single クラスになります。

データ型: double | single

ヒント

  • イメージの境界で勾配演算子を適用するときに、イメージの境界外の値は最も近いイメージ境界値と等価であると見なされます。これは imfilter'replicate' 境界オプションと似ています。

アルゴリズム

記載された各勾配メソッドに対し imgradient で使用されるアルゴリズムでは、まず x 方向と y 方向それぞれの方向勾配 GxGy を計算します。横 (x) 軸は列の添字の増加方向を指しています。縦 (y) 軸は行の添字の増加方向を指しています。その後、勾配の大きさと方向が直交成分 GxGy から計算されます。

imgradient は勾配の出力を正規化しません。勾配の出力イメージの範囲が入力イメージの範囲と一致する必要がある場合、使用する method 引数に応じた勾配イメージの正規化を検討します。たとえば、ソーベル カーネルの正規化係数は 1/8、プレウィットの場合は 1/6、ロバーツの場合は 1/2 です。

拡張機能

R2012b で導入