MATLAB爱好者论坛-LabFans.com

MATLAB爱好者论坛-LabFans.com (https://www.labfans.com/bbs/index.php)
-   资料存档 (https://www.labfans.com/bbs/forumdisplay.php?f=72)
-   -   Matlab中的一维高斯卷积函数 (https://www.labfans.com/bbs/showthread.php?t=22953)

poster 2019-12-10 16:49

Matlab中的一维高斯卷积函数
 
我正在尝试编写一个返回一个二维高斯滤波器的函数。该函数将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); [B]示例[/B] :(以下所有等效项)

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)

[url=https://stackoverflow.com/questions/1833082]更多&回答...[/url]


所有时间均为北京时间。现在的时间是 01:20

Powered by vBulletin
版权所有 ©2000 - 2025,Jelsoft Enterprises Ltd.