2014-02-07 27 views
1

我處於MATLAB編程的第一步,當我閱讀一篇關於圖像處理的文章時,我發現其中大部分文章都寫道第一和/或第二個衍生物應該是估計。如何測量圖像的二階導數

如何測量梯度上的二階導數(Gxx,Gxy,Gyy)?

+2

舉個例子,你應該在Google中輸入「圖像處理介紹」或類似的東西。 –

+5

這個問題似乎是脫離主題,因爲它不是編程 –

+0

感謝瘋狂物理學家我現在發現它。 – user3269865

回答

0

您可以使用diff(a,2,1)diff(a,2,2)實現沿維度1二階導數和2分別

2

代替將連續的差異,你可以申請的二階導數內核在每個維度:

Gx = [1 -2 1]; Gy = Gx'; %' y kernel is column vector 
img = double(imread('cameraman.tif')); 
Dxx = conv2(img,Gx,'same'); 
Dyy = conv2(img,Gy,'same'); 

如果你是在一個無方向的二階導數之後,你應該使用拉普拉斯算子。一個常見的內核是:

L = [0 1 0; 
    1 -4 1; 
    0 1 0;] % fspecial('laplacian',alpha=0) 
D2 = conv2(img,L,'same'); 

如上評論,你可以使用fspecial獲得的內核捕獲通過alpha參數對角線的差異變化。或者您可以使用del2

D2 = del2(img); 
1

從圖像處理工具箱中查看imgradient。這兩個應用程序應該給你你想要的。

像這樣:

im = imread('cameraman.tif'); 
[Gx,Gy] = imgradientxy(im); 
[Gxx,Gxy] = imgradientxy(Gx); 
[Gyy,Gyx] = imgradientxy(Gy); 

這使用Sobel濾波器來計算的衍生物。您也可以使用Prewitt,中心差異或中間差異,將它作爲字符串傳遞給imgradientxy。

希望有所幫助。