【问题标题】:Low pass gaussian filter with a specified cut off frequency具有指定截止频率的低通高斯滤波器
【发布时间】:2012-09-02 07:23:38
【问题描述】:

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

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

【问题讨论】:

  • 我对此没有太多经验,但我希望您在使用 sigma 指定截止频率方面走在正确的轨道上。请记住,截止频率对应于输入信号衰减一定量的点,因此您必须先定义截止频率对应的衰减(通常为 3dB),然后才能确定要解决的点。
  • fspecial 创建一个预定义的 2D 矩阵滤波器,根据您所写的内容,我了解到您想要过滤 1D 信号(0.2 Hz,这意味着您有时间向量或频率向量)。那么你是在过滤向量还是矩阵?
  • @nate 我正在过滤一个 jpg 文件,它是一个矩阵..我将如何指定一个频率..?
  • @Siddhartha 这些是空间频率,fx 和 fy。如果您想对此事有很好的参考,我推荐 J.W. 的“傅里叶光学简介”。好人。我会尽量在下面给你一个合适的答案……
  • 图像处理中0.2Hz是什么意思? Hz 与时间相关,我在固定图像中看不到任何时间信息。

标签: matlab image-processing gaussian


【解决方案1】:

我将首先回答有关 1D 的问题,其余的将随之而来。它可能看起来微不足道,但请耐心等待一段时间。让我们假设以下代码:

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)。如果我们现在设计一个一维高斯滤波器(在傅立叶空间中)如下:

f_vec0=0;
sigma=1;
filter=exp( -(f_vec-f_vec0).^2./(2*sigma^2)); 

然后在傅里叶域中过滤:

f_signal=fftshift(fft(signal));
filt_signal=fftshift(ifft(f_signal.*filter));

因此,根据我们应用的滤波器,sigma=1 表示截止频率(我决定是滤波器最大值(即 1)的 1%)大约为 3 Hz:

 cutoff_freq=f_vec(find(filter>=0.01,1,'last'))

将其转换为 2D 是微不足道的,只是要小心单位。对于图像,以像素为位置单位,以1/像素为空间频率。 fspecial 函数生成一个预定义滤波器的二维矩阵。 fspecial 的用法通常是这样的:

PSF = fspecial('gaussian',hsize,sigma);
Blurred = imfilter(Image,PSF,'symmetric','conv');

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

【讨论】:

    猜你喜欢
    • 2019-02-23
    • 2014-08-29
    • 1970-01-01
    • 2012-08-19
    • 2013-03-29
    • 2017-09-22
    • 1970-01-01
    • 2012-09-21
    • 1970-01-01
    相关资源
    最近更新 更多