我有一个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。我不明白这种行为,我想知道代码是否有问题,或者如果在上面的公式中,标准偏差只能是偶数。任何帮助将不胜感激。
谢谢。
答案 0 :(得分:0)
你的程序根本不起作用。使用偶数时找到的结果只是因为一些数值误差。
您的G
将是与中心对称的矩阵。 x
和y
都与中心点对称。因此,乘法(G乘以x或y)将得到一个总和为零的矩阵。因此,除以该总和除以零。你观察到的其他一切都是因为一些舍入错误。在这里,我看到的总和G_x
约为1.3e-17。
我认为您的错误在乘法x.*G
和y.*G
中。我无法弄清楚你为什么这么做。
我假设你想做边缘检测工具?您可以使用fspecial
创建多个边缘过滤器。例如高斯拉普拉斯。您还可以创建两个具有不同标准偏差的高斯滤波器,并从另一个中减去它们以获得边缘滤波器。