我试图为图像找到高斯的一阶导数(使用Matlab),我尝试了两个ways.One,使用梯度和一个计算导数,但结果看起来不同。
Method 1
k=7,s=3% kernel,st.dev
f = fspecial('gaussian', [k k], s)
[Gx,Gy] = gradient(f)
Method 2
k=7,s=3% kernel,st.dev
[x,y] = meshgrid(-floor(k/2):floor(k/2), -floor(k/2):floor(k/2))
G = exp(-(x.^2+y.^2)/(2*s^2))/(2*pi*(s^2))
Gn=G/sum(G(:))
Gx = -x.*Gn/(s^2)
Gy = -y.*Gn/(s^2)两种方法的Gx和Gy应该是相同的,但两者的值是不同的。有人知道为什么吗?我以为他们会是一样的。是否有更好的方法来计算导数?谢谢。
编辑:根据康拉德的建议修改G定义,但问题仍然存在。
发布于 2015-06-04 08:02:40
这看上去不对:
G = exp(-(x.^2+y.^2)/(2*s^2))/(2*pi*s);假定这是(X,Y)的正常密度,其中X和Y是独立的零均值RV,且SDs = s相等,这应该是:
G = exp(-(x.^2+y.^2)/(2*s^2))/(2*pi*(s^2));(每个组件中指数前面的术语是1/(sqrt(2*pi)*s),这两次给出1/(2*pi*s^2) )
发布于 2015-06-04 19:01:04
根据fspecial:http://www.mathworks.com/help/images/ref/fspecial.html的文档

因此,您应该将G修改为:
G = exp(-(x.^2+y.^2)/(2*s^2));https://stackoverflow.com/questions/30628776
复制相似问题