【问题标题】:one Dimensional gauss convolution function in MatlabMatlab中的一维高斯卷积函数
【发布时间】:2010-12-22 10:18:46
【问题描述】:

我正在尝试编写一个返回一维高斯滤波器的函数。该函数将 sigma 作为参数。问题是该函数为所有 sigma 返回相同的数组。

  function gaussFilter=gauss(sigma)  
  width = 3 * sigma;  
  support = (-width :sigma: width);  
  gaussFilter= exp( - (support).^2 / (2*sigma^2));   
  gaussFilter = gaussFilter/ sum(gaussFilter);  

请注意,支持数组计算正确,但应用 exp 时会出现问题。

【问题讨论】:

  • 当您使用标量执行exp 时会发生什么?

标签: matlab gaussian


【解决方案1】:

结果没有错。你的support 向量本质上是,

[-3*sigma -2*sigma -1*sigma 0 1*sigma 2*sigma 3*sigma]

如果将每个支持元素平方并乘以 -1,-support.^2

[-9*sigma^2 -4*sigma^2 -1*sigma^2 0 -1*sigma^2 -4*sigma^2 -9*sigma^2]

所以除以2*sigma^2 总是会得到相同的向量,

[-9/2 -4/2 -1/2 0 -1/2 -4/2 -9/2]

或者

-4.5000   -2.0000   -0.5000         0   -0.5000   -2.0000   -4.5000

所以这就是为什么你总是得到相同的答案。

所以你需要检查你的算法来制作一维高斯滤波器。

编辑:

你的原始代码没问题:except我不明白你为什么用-3*sigma:sigma:3*sigma 制作support - 你应该把它改成support = -3:3

你也可以使用:

gaussFilter = fspecial('gaussian',[1 7],sigma)

编辑:查看Amro's solution 获取完整代码并解释为什么support = -3*sigma:3*sigma 而不是support = -3*sigma:sigma:3*sigma

【讨论】:

  • 非常感谢,但我不想申请循环。我想改用向量(支持)。请你告诉我怎么做。
  • 你写的对于 sigma=1 是正确的,但是 3*sigma:sigma:3*sigma 会给我六个元素,每两个元素之间都有 sigma。谢谢你的特别建议,但我不想使用内置。但即使支持=-3:3,结果也是一样的,不是吗?
  • 结果会随 sigma 变化。 support 应该独立于 sigma,它应该只取决于窗口大小,在你的情况下它似乎是一个 1x7 向量。
  • 我很抱歉我的问题很重,但是请您更正我的代码并根据我的代码给我完整的正确代码..再次抱歉。
  • 还有其他问题吗?
【解决方案2】:

这个想法是滤波器需要足够宽以表示高斯函数。经验法则是使用至少6*sigma 的过滤器大小。

由于支持需要以零为中心,这将为您提供-3*sigma+3*sigma 的范围(更准确地说,中间的零是-/+ round(6*sigma - 1)/2)。因此:

function gaussFilter = gauss(sigma)
    width = round((6*sigma - 1)/2);
    support = (-width:width);
    gaussFilter = exp( -(support).^2 ./ (2*sigma^2) );
    gaussFilter = gaussFilter/ sum(gaussFilter);

示例:(以下均等价)

sigma = 1.2;
width = round((6*sigma - 1)/2);

gauss(sigma)

normpdf( -width:width, 0, sigma )

fspecial('gaussian', [1 2*width+1], sigma)

h = gausswin(2*width+1)';
h = h / sum(h)

【讨论】:

  • +1 回复(实际上我很久以前就已经 +1 了!)如果您没有图像处理工具箱,那就太好了。
猜你喜欢
  • 1970-01-01
  • 2021-08-11
  • 2020-06-07
  • 2015-04-25
  • 2018-10-03
  • 1970-01-01
  • 2012-02-20
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多