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

Sid*_*tha 1 matlab image-processing gaussian

我正在玩混合图像,并希望使用高斯滤波器对图像进行低通滤波.然而,为了制作混合图像,假设在2个图像上使用2个滤波器与不同的截止频率组合.

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

bla*_*bla 5

我将首先回答有关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
Run Code Online (Sandbox Code Playgroud)

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

f_vec0=0;
sigma=1;
filter=exp( -(f_vec-f_vec0).^2./(2*sigma^2)); 
Run Code Online (Sandbox Code Playgroud)

然后过滤傅立叶doamin:

f_signal=fftshift(fft(signal));
filt_signal=fftshift(ifft(f_signal.*filter));
Run Code Online (Sandbox Code Playgroud)

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

 cutoff_freq=f_vec(find(filter>=0.01,1,'last'))
Run Code Online (Sandbox Code Playgroud)

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

PSF = fspecial('gaussian',hsize,sigma);
Blurred = imfilter(Image,PSF,'symmetric','conv');
Run Code Online (Sandbox Code Playgroud)

使用卷积就像在傅里叶域中相乘一样.傅立叶域中的sigma与位置域的1/sigma等成比例...