首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >具有指定截止频率的低通高斯滤波器

具有指定截止频率的低通高斯滤波器
EN

Stack Overflow用户
提问于 2012-09-09 05:14:34
回答 1查看 11.5K关注 0票数 1

我在玩hybrid images,想用高斯滤波器对图像进行低通滤波。然而,为了制作混合图像,应该在以不同截止频率组合的2个图像上使用2个滤波器。

当我们使用fspecial()制作高斯滤波器时,它允许我们指定截止频率吗?(我知道我们可以指定滤波器大小和sigma,并且sigma和截止频率之间存在某种关系)。如果我们只能使用sigma指定截止频率,那么我需要设置什么sigma才能获得0.2 Hz的截止频率。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-09-10 05:33:12

我将首先回答关于1D的问题,其余的将紧随其后。这可能看起来微不足道,但请容忍我一段时间。让我们假设以下代码:

代码语言:javascript
运行
复制
t=linspace(0,20,2^10); %time vector in seconds
w=0.2; %in Hz
signal=cos(2*pi*w*t)+rand(1,length(t))-0.5; % signal in seconds
dt=t(2)-t(1) ;
N=length(signal);
df=1/(N*dt);    % the frequency resolution (df=1/max_T)
if mod(N,2)==0
    f_vec= df*((1:N)-1-N/2);  % for EVEN length vectors
else
    f_vec= df*((1:N)-0.5-N/2); 
end

因此,我们创建了一个特定频率的噪声信号。f_vec是从f =-f_max,-f_max+df,...,0,...,f_max伸展的频率向量,其中f_max=1/(2*dt)。如果我们现在设计一个一维高斯滤波器(在傅立叶空间中),如下所示:

代码语言:javascript
运行
复制
f_vec0=0;
sigma=1;
filter=exp( -(f_vec-f_vec0).^2./(2*sigma^2)); 

然后在傅里叶变换中进行滤波:

代码语言:javascript
运行
复制
f_signal=fftshift(fft(signal));
filt_signal=fftshift(ifft(f_signal.*filter));

因此,从我们应用的滤波器来看,sigma=1意味着截止频率(我决定是滤波器最大值的1% (即1))大约是3 Hz:

代码语言:javascript
运行
复制
 cutoff_freq=f_vec(find(filter>=0.01,1,'last'))

把这个带到2D是微不足道的,只是要小心单元。对于图像,有像素作为位置单位,1/像素作为空间频率。fspecial函数生成预定义滤波器的2D矩阵。fspecial的用法通常如下:

代码语言:javascript
运行
复制
PSF = fspecial('gaussian',hsize,sigma);
Blurred = imfilter(Image,PSF,'symmetric','conv');

使用卷积就像在傅立叶域中乘法一样。傅立叶域中的sigma与位置域的1/sigma成正比,等等。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12334551

复制
相关文章

相似问题

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