1. 程式人生 > >Matlab之頻域濾波下三大LPF

Matlab之頻域濾波下三大LPF

目錄

一、初始知識

二、理想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後的形狀:

 

頻譜的變化如下: