Matlab实现频域滤波——二维傅里叶变换、低通、高通

目录

1、二维傅里叶变换

1.1二维傅里叶变换定义

1.2性质

2、低通滤波器

2.1理想低通滤波器

3、高通


1、二维傅里叶变换

1.1二维傅里叶变换定义

       首先通过傅里叶变换将图像从空间域转换为频率域,然后在频率域内对图像进行处理,最后通过傅里叶反变换到空间域。

1.2性质

  • 平移特性
  • 旋转特性
  • 尺度特性
  • 卷积特性
  • 相关特性
  • 分离特性

频域滤波原理:输出图像傅氏变换==系统频域相应×输入图像傅氏变换

2、低通滤波器

低频成分通过,去除(衰弱)高频成分

图像中尖锐的细节被平滑。

2.1理想低通滤波器

H(u,v)=1  D(u,v)<=D0

H(u,v)=0  D(u,v)>D0

可以理解为在半径为D0的范围内,所有的频率都可以没有衰减地通过滤波器,该半径之外的所有频率都完全被衰减。理想低通滤波器具有平滑图像的作用,但是又很严重的振铃的现象。

利用理想低通滤波器对图像进行滤波具体代码:

close all;clear all;clc;
I=imread('ice.bmp');
I_gray=im2gray(I);
I2=im2double(I_gray);
M=2*size(I2,1);%滤波器行数
N=2*size(I2,2);%滤波器列数
u=-M/2:(M/2-1);
v=-N/2:(N/2-1);
[U,V]=meshgrid(u,v);%此 MATLAB 函数 基于向量 x 和 y 中包含的坐标返回二维网格坐标。
D=sqrt(U.^2+V.^2);
D0=15;%截止频率
H=double(D<=D0);%理想低通滤波器
J=fftshift(fft2(I2,size(H,1),size(H,2)));%时域图像转换到频域
K=J.*H;%滤波处理
L=ifft2(ifftshift(K));
L=L(1:size(I2,1),1:size(I2,2));
figure;
subplot(121);imshow(I2);
subplot(122);imshow(L);

巴特沃斯低通滤波器:

%巴特沃斯滤波器
clear all;close all;clc;
I=imread('ice.bmp');
I_gray=im2gray(I);
I2=im2double(I_gray);
%计算滤波器的行数
M=2*size(I,1);
N=2*size(I,2);
u=-M/2:(M/2-1);
v=-N/2:(N/2-1);
[U,V]=meshgrid(u,v);
D=sqrt(U.^2+V.^2);
D0=15;
n=6;
H=1./(1+(D./D0).^(2*n));
J=fftshift(fft2(I2,size(H,1),size(H,2)));
K=J.*H;
L=ifft2(ifftshift(K));
L=L(1:size(I2,1),1:size(I,2));
figure;
plot(I2);
figure;
imshow(I);
figure;
imshow(L);

3、高通

    衰减或抑制低频分量,让高频分量通过称为高通滤波,其作用是使图像得到锐化处理,突出图像的边界。

下面是高斯高通滤波器实现代码:


clear all;close all;clc;
I=imread('ice.bmp');
I_gray=im2gray(I);
I2=im2double(I_gray);
%计算滤波器的行数
M=2*size(I,1);
N=2*size(I,2);
u=-M/2:(M/2-1);
v=-N/2:(N/2-1);
[U,V]=meshgrid(u,v);
D=sqrt(U.^2+V.^2);
D0=15;
H2=1-exp(-(D.^2)./(2*(D0^2)));%设计高斯高通滤波器
J2=fftshift(fft2(I2,size(H2,1),size(H2,2)));
K2=J2.*H2;
L2=ifft2(ifftshift(K2));
L2=L2(1:size(I2,1),1:size(I2,2));
figure;
imshow(I);
figure;
imshow(L2);

巴特沃斯高通滤波器代码如下:

clear all; close all;
I=imread('ice.bmp');  
I=im2double(I);  		
M=2*size(I,1);
N=2*size(I,2);
u=-M/2:(M/2-1);
v=-N/2:(N/2-1);
[U,V]=meshgrid(u, v);
D=sqrt(U.^2+V.^2);
D0=15;
n=6;
H=1./(1+(D0./D).^(2*n));
J=fftshift(fft2(I, size(H, 1), size(H, 2))); 
K=J.*H;
L=ifft2(ifftshift(K));
L=L(1:size(I,1), 1:size(I, 2));
figure;
imshow(I);
figure;
imshow(L);

猜你喜欢

转载自blog.csdn.net/maggieyiyi/article/details/119927638
今日推荐