matlab - Matlab中的一维高斯卷积函数

标签 matlab gaussian

我正在尝试编写一个返回一维高斯滤波器的函数。该函数将 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 时会出现问题。

最佳答案

想法是滤波器需要足够宽以表示高斯函数。经验法则是使用至少 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)

关于matlab - Matlab中的一维高斯卷积函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1833082/

相关文章:

matlab - 在Matlab中,对于一个多输入函数,如何将单个输入作为多个输入?

excel - 如何在 MATLAB 中从 xlsread 读取文本值?

python - MATLAB 的 'improfile' 函数是否有等效的 Python 函数?

matlab - 如何在JPEG压缩中进行量化?

objective-c - 将曲线拟合到一组点

distribution - 分布在正态分布的*部分*上的算法

matlab - 这是 Matlab 函数调用中的错误吗?

iphone - 使用高斯模糊创建半透明的 UIView

python - 二维高斯函数不能产生正确的结果

matrix - 基本高斯消除求解器产生错误结果