2016-07-24 120 views

回答

1

參考數值梯度的MATLAB文檔:http://www.mathworks.com/help/matlab/ref/gradient.html

梯度計算用於內部數據點的中心差。例如,考慮具有單位間隔數據的矩陣A,其具有水平梯度G =梯度(A)。內部梯度值G(:,j)爲:

G(:,j) = 0.5*(A(:,j+1) - A(:,j-1)); 其中j在2和N-1之間變化,其中N是大小(A,2)。

沿矩陣的邊緣梯度值與單面差來計算,使得

G(:,1) = A(:,2) - A(:,1); G(:,N) = A(:,N) - A(:,N-1); 如果指定的點間隔,則差異適當地縮放。如果指定了兩個或更多個輸出,則漸變也以類似的方式計算沿着其他維度的差異。與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 =

6.0000 -19.0000 6.0000 6.0000 1.0000 
    -6.5000 -9.0000 6.0000 6.0000 3.5000 
    -6.5000 3.5000 6.0000 3.5000 -6.5000 
    3.5000 6.0000 6.0000 -9.0000 -6.5000 
    1.0000 6.0000 6.0000 -19.0000 6.0000 

的Gx的最左邊的列:

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

結果:

7 
    -18 
    2 
    2 
    7 

正如你所看到的,Gx(:, 1)等於A(:, 2) - A(:, 1)

爲戈瑞

相同的結果:

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