高斯导数 - Matlab

时间:2015-06-02 05:23:57

标签: matlab gaussian derivative

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

  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。我不明白这种行为,我想知道代码是否有问题,或者如果在上面的公式中,标准偏差只能是偶数。任何帮助将不胜感激。

谢谢。

1 个答案:

答案 0 :(得分:0)

你的程序根本不起作用。使用偶数时找到的结果只是因为一些数值误差。

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

我认为您的错误在乘法x.*Gy.*G中。我无法弄清楚你为什么这么做。

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