如何测量图像的二阶导数

时间:2014-02-07 16:03:48

标签: matlab image-processing derivative

我正处于MATLAB编程的第一步,当我读到一篇关于图像处理的文章时,我在大多数文章中看到它已经写过应该估计第一个和/或第二个导数。

如何在梯度上测量二阶导数(Gxx,Gxy,Gyy)?

3 个答案:

答案 0 :(得分: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 :(得分:1)

从图像处理工具箱中查看imgradient。两个应用程序应该给你你想要的。

这样的事情:

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

这使用Sobel滤波器来计算导数。您也可以通过将此字符串作为字符串传递给imgradientxy来使用Prewitt,中心差异或中间差异。

希望有所帮助。

答案 2 :(得分:0)

您可以使用diff(a,2,1)diff(a,2,2)分别获得维度1和2的二阶导数