主要内容

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

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');

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

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

Figure contains an axes object. The axes object 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 object. The axes object 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 object. The axes object 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 で導入