图像处理(3)频率域滤波
发布时间
阅读量:
阅读量
由法国数学家傅里叶提出的一种积分变换方法最初是为了研究热传导问题而提出的。经过一段时间的发展和完善后形成了一个完整的理论体系。这种变换方法广泛应用于物理学、信号处理等多个领域。当且仅当函数满足绝对可积条件时(即函数在整个实数范围内绝对积分收敛),该变换才能顺利进行并具有良好的收敛性质。

考虑到计算机仅能处理离散数值,在对函数f(x)和F(w)进行采样时,则称此时该变换则被定义为离散傅里叶变换(DFT)。

离散Fourier变换所需的计算量较大数目,在减少计算负担方面存在较大的挑战;为此可采用快速Fourier变换方法(FFT),该方法基于相位因子的对称性质及其周期特性。

将f(n)分成两个部分,并对这两个部分分别计算其DFT;接着对每个部分继续分解处理,直至无法再进一步分解时。

由于A(k)和B(k)是关于N/2周期对称,所以有:

然后一直不断进行分割。这样可以大大降低计算量。
附上MATLAB代码:
function y=FFT_recur(x)
N=length(x);
x1=zeros(1,N/2);
x2=zeros(1,N/2);
y=zeros(1,N);
%split x into two space: odd and even
for j=1:N
if mod(j,2)==0
x1(j/2)=x(j);
else
x2((j+1)/2)=x(j);
end
end
if N==2
y(1)=x(1)+x(2);
y(2)=x(1)-x(2);
else
x_a=FFT_recur(x1);
x_b=FFT_recur(x2);
for k=1:N/2
y(k)=x_a(k)+exp(-i*2*pi*(k-1)/N)*x_b(k);
y(k+N/2)=x_a(k)-exp(-i*2*pi*(k-1)/N)*x_b(k);
end
end
二维数字图像的频域处理

对于理想低通滤波器,其Fourier反变换函数为sinc函数,其图形如下

图1展示了理想低通滤波器

MATLAB实现代码如下:
function ifft_image=filter_frequency(image,mode,mode_parameter)
%fourier transformation
fft_image=fft2(image);
fft_image=fftshift(fft_image);
[row,col]=size(fft_image);
filter_temp=zeros(row,col);
%Low Pass filter
if strcmp(mode,'LowPass')
for i=1:row
for j=1:col
if sqrt((i-row/2)^2+(j-col/2)^2)<=mode_parameter
filter_temp(i,j)=1;
else
filter_temp(i,j)=0;
end
end
end
%Butter Worth filter with n=2
elseif strcmp(mode,'ButterWorth')
for i=1:row
for j=1:col
filter_temp(i,j)=1/(1+(sqrt((i-row/2)^2+(j-col/2)^2)/mode_parameter)^4);
end
end
%gaussion filter
elseif strcmp(mode,'Gaussion')
for i=1:row
for j=1:col
filter_temp(i,j)=exp(-((i-row/2)^2+(j-col/2)^2)/(2*mode_parameter^2));
end
end
end
fft_image=fft_image.*filter_temp;
fft_image=ifftshift(fft_image);
ifft_image=ifft2(fft_image);
ifft_image=abs(ifft_image);
- 结果

图2 (a)原始1024x1024图像 (b)加入了周期噪声

图3 低通滤波 (a)D0=100 (b)D0=300

图4 ButterWorth滤波 (a)D0=100 (b)D0=300

图5 高斯滤波 (a)D0=100 (b)D0=300
全部评论 (0)
还没有任何评论哟~
