首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >梯度和导数

梯度和导数
EN

Stack Overflow用户
提问于 2015-06-03 19:19:16
回答 2查看 137关注 0票数 1

我试图为图像找到高斯的一阶导数(使用Matlab),我尝试了两个ways.One,使用梯度和一个计算导数,但结果看起来不同。

代码语言:javascript
复制
  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定义,但问题仍然存在。

EN

回答 2

Stack Overflow用户

发布于 2015-06-04 08:02:40

这看上去不对:

代码语言:javascript
复制
 G = exp(-(x.^2+y.^2)/(2*s^2))/(2*pi*s);

假定这是(X,Y)的正常密度,其中X和Y是独立的零均值RV,且SDs = s相等,这应该是:

代码语言:javascript
复制
G = exp(-(x.^2+y.^2)/(2*s^2))/(2*pi*(s^2));

(每个组件中指数前面的术语是1/(sqrt(2*pi)*s),这两次给出1/(2*pi*s^2) )

票数 0
EN

Stack Overflow用户

发布于 2015-06-04 19:01:04

根据fspecialhttp://www.mathworks.com/help/images/ref/fspecial.html的文档

因此,您应该将G修改为:

代码语言:javascript
复制
G = exp(-(x.^2+y.^2)/(2*s^2));
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30628776

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档