Matlab之频域滤波下三大LPF

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_37385726/article/details/82707222

目录

一、初始知识

二、理想LPF

三、高斯LPF

四、巴特沃斯(Butterworth)LPF

五、滤波器和频谱的卷积

六、完整代码

 

Python中OpenCV2下实现参见这里


一、初始知识

  1. 关于 distmatrix 的作用,见https://blog.csdn.net/qq_37385726/article/details/82697648,看源代码可以知道函数的意义。
  2. 但是,不懂函数的意义也没关系,只要记住,fftshift(distmatrix)生成的是各个坐标到中心坐标的距离即可
[M,N] = size(tif);
D = distmatrix(M,N);  
dist = fftshift(D);   %距离矩阵(距中心)

figure
subplot(1,2,1),mesh(D),title('distmatrix');
subplot(1,2,2),mesh(fftshift(D)),title('fftshift(distmatrix)');

  1. 关于傅里叶变换,知道频域滤波就知道傅里叶变换实现的是时域(空域)到频率域的转变,对于2D傅里叶变换,坐标(1,1) %Python中为(0,0)%是频率为0的直流信号,坐标(u,v)是在x方向频率为u,y方向频率为v的信号

二、理想LPF

由于生硬的过度,图像会产生振铃伪影。

% idea LPF
H1 = zeros(M,N);
radius = 35;
ind = dist <= radius;
H1(ind) = 1;
Hd1 = double(H1);

三、高斯LPF

% Gaussion LPF
sigma = 30;
H2 = exp(-dist.^2/2/sigma^2);
Hd2 = double(H2);

四、巴特沃斯(Butterworth)LPF

从函数图上看,更圆滑,用幂系数n可以改变滤波器的形状。n越大,则该滤波器越接近于理想滤波器

% Butterworth LPF
D0 = 30;
n = 3;
H3 = 1./(1+(dist/D0).^(2*n));
Hd3 = double(H3);

五、滤波器和频谱的卷积

I_dft = fft2(tif);   %原频谱
fts = fftshift(I_dft);  %shift后的频谱
ft_img1 = fts .* Hd1;
ft_img2 = fts .* Hd2;
ft_img3 = fts .* Hd3;

 

六、完整代码

tif = imread('C:\\Program Files\\MATLAB\\R2017a\\toolbox\\images\\imdata\\AT3_1m4_01.tif');
tif = im2double(tif);
I_dft = fft2(tif);   %原频谱
fts = fftshift(I_dft);  %shift后的频谱

[M,N] = size(tif);
D = distmatrix(M,N);  
dist = fftshift(D);   %距离矩阵(距中心)

% idea LPF
H1 = zeros(M,N);
radius = 35;
ind = dist <= radius;
H1(ind) = 1;
Hd1 = double(H1);

% Gaussion LPF
sigma = 30;
H2 = exp(-dist.^2/2/sigma^2);
Hd2 = double(H2);

% Butterworth LPF
D0 = 30;
n = 3;
H3 = 1./(1+(dist/D0).^(2*n));
Hd3 = double(H3);


ft_img1 = fftshift(I_dft) .* Hd1;
ft_img2 = fftshift(I_dft) .* Hd2;
ft_img3 = fftshift(I_dft) .* Hd3;

subplot(1,4,1),imshow(tif),axis tight,title('initial');
subplot(1,4,2),imshow(real(ifft2(fftshift(ft_img1)))),axis tight,title('Ideal LPF');
subplot(1,4,3),imshow(real(ifft2(fftshift(ft_img2)))),axis tight,title('Guassion LPF');
subplot(1,4,4),imshow(real(ifft2(fftshift(ft_img3)))),axis tight,title('Butterworth LPF');

三类滤波器mesh后的形状:

频谱的变化如下:

猜你喜欢

转载自blog.csdn.net/qq_37385726/article/details/82707222