Matlab中的一维高斯卷积函数

Han*_*ani 7 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);  
Run Code Online (Sandbox Code Playgroud)

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

Amr*_*mro 4

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

由于支撑需要以零为中心,这将为您提供-3*sigmato的范围+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);
Run Code Online (Sandbox Code Playgroud)

示例:(以下所有内容都是等效的)

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)
Run Code Online (Sandbox Code Playgroud)