高斯导数- Matlab



我有一个RGB图像,我正试图计算它的高斯导数。图像为灰度图像,高斯窗口为5x5,st为标准差这是我使用的代码,以找到一个二维高斯导数,在Matlab中:

  N=2
  [X,Y]=meshgrid(-N:N,-N:N)
  G=exp(-(x.^2+y.^2)/(2*st^2))/(2*pi*st)
  G_x = -x.*G/(st^2);
  G_x_s = G_x/sum(G_x(:));
  G_y = -y.*G/(st^2);
  G_y_s = G_y/sum(G_y(:));

,其中st是我使用的标准差。在使用G_x_s和G_y_s对图像进行卷积之前,我有以下问题。当我使用偶数(2,4,6,8)的标准偏差时,程序工作并给出预期的结果。但是当我使用奇数作为标准偏差(3或5)时,那么G_y_s的值变成Inf,因为sum(G_y(:))=0。我不理解这种行为,我想知道代码是否有问题,或者在上面的公式中,标准偏差只能是偶数。如有任何帮助,我将不胜感激。

谢谢。

你的程序根本不能工作。当你使用偶数时,你发现的结果只是因为一些数值错误。

你的G将是一个与中心对称的矩阵。xy都是点对称的。所以(G乘以x或y)会得到一个和为0的矩阵。除以这个和等于除以0。你观察到的其他一切都是因为一些舍入误差。在这里,我看到og G_x的总和约为1.3e-17。

我认为你的错误是在乘法x.*Gy.*G。我不明白你为什么要那样做。

我假设你想做边缘检测,对吗?你可以使用fspecial来创建几个边缘过滤器。比如拉普拉斯高斯函数。您还可以创建两个具有不同标准差的高斯滤波器,并将它们从另一个中减去以获得边缘滤波器。

最新更新