2016-07-24 6 views
0

イメージの向き勾配のヒストグラムを計算するには、すべてのピクセルの勾配ベクトルを計算する必要があります。しかし、エッジ上のピクセルは、グラジエントベクトルのためにいくつかの隣接を欠いている。それに対処する方法?方向勾配のヒストグラムについて、エッジ上のピクセルの勾配ベクトルを計算する方法は?

たとえば、画像の左端にあるピクセルには、左側に近傍がありません。次に、x方向の勾配を計算する方法は?

答えて

1

数値勾配のMATLABのドキュメントを参照してください:http://www.mathworks.com/help/matlab/ref/gradient.html

勾配は、内部のデータポイントの中心差分を算出します。例えば、水平勾配G =勾配(A)を有する単位間隔のデータAを有する行列を考える。内部勾配値G(:、j)は、Nがサイズ(A、2)である場合に、2とN-1との間で変化する。点間隔が指定されている

G(:,1) = A(:,2) - A(:,1); G(:,N) = A(:,N) - A(:,N-1);場合、差異が適切にスケーリングされるように、マトリックスの縁に沿って

勾配値は、片面違いが計算されます。 2つ以上の出力が指定されている場合、勾配も同様の方法で他の次元に沿った差異を計算します。 diff関数とは異なり、gradientは入力と同じ数の要素を持つ配列を返します。

A = magic(5) 

結果:

A = 

    17 24 1 8 15 
    23 5 7 14 16 
    4 6 13 20 22 
    10 12 19 21 3 
    11 18 25 2 9 


[Gx, Gy] = gradient(A) 

結果:

Gx =

7.0000 -8.0000 -8.0000 7.0000 7.0000 
    -18.0000 -8.0000 4.5000 4.5000 2.0000 
    2.0000 4.5000 7.0000 4.5000 2.0000 
    2.0000 4.5000 4.5000 -8.0000 -18.0000 
    7.0000 7.0000 -8.0000 -8.0000 7.0000 

Gy =

012 Gxとの

ほとんどの左の列:

A(:, 2) - A(:, 1) 

結果:

7 
    -18 
    2 
    2 
    7 

あなたが見ることができるように、Gx(:, 1)A(:, 2) - A(:, 1)に等しいです。

GYの同じ結果:

A(2, :) - A(1, :) 

結果:

6 -19 6 6 1 
複製によって

パディングエッジ:フィルタ勾配フィルタ(サイズ[3,1]及び[1,3])について
パディングは、各側の行と列をレプリケートするだけです。

17 17 24 1 8 15 15 
    17 17 24 1 8 15 15 
    23 23 5 7 14 16 16 
    4 4 6 13 20 22 22 
    10 10 12 19 21 3 3 
    11 11 18 25 2 9 9 
    11 11 18 25 2 9 9 

例o画像の境界内部のF式:
のGx(:、2)= 0.5 *(A(:、3) - A(:、1))

例:

0.5*(A(:, 3) - A(:, 1)) 

結果:

-8.0000 
    -8.0000 
    4.5000 
    4.5000 
    7.0000 
関連する問題