请帮助我理解以下用于理想低通滤波器的MATLAB代码。我无法理解下面代码中的Part2。请解释一下我们为什么这样做。
我已经阅读了Rafael C. Gonzalez的数字图像处理使用Matlab 2E解释了我的问题,但我无法理解。如果有人能够清楚地解释我,将会很有帮助。
注意:Dogbert,我的理解是将变换应用于图像有助于分离低频和高频分量。左上角包含更多低频率系数,其中右下角包含高频率系数。低频分量包含所有细节(近似),其中高频分量包含图像中较小的细节。在低通滤波器中,允许低于截止频率的频率通过,截止频率以上的频率被阻止。
%IDEAL LOW-PASS FILTER
%Part 1
function idealfilter(X,P) % X is the input image and P is the cut-off freq
f=imread(X); % reading an image X
[M,N]=size(f); % Saving the the rows of X in M and columns in N
F=fft2(double(f)); % Taking Fourier transform to the input image
%Part 2 % I don't understand this part
u=0:(M-1);
v=0:(N-1);
idx=find(u>M/2);
u(idx)=u(idx)-M;
idy=find(v>N/2);
v(idy)=v(idy)-N;
[V,U]=meshgrid(v,u);
D=sqrt(U.^2+V.^2);
%Part 3
H=double(D<=P); % Comparing with the cut-off frequency
G=H.*F; % Convolution with the Fourier transformed image
g=real(ifft2(double(G))); % Inverse Fourier transform
imshow(f),figure,imshow(g,[ ]); % Displaying input and output image
end
我试图在Part2中单独运行每个命令,M = 8和N = 8。我得到了
u=0:(M-1); ==> u = 0 1 2 3 4 5 6 7
v=0:(N-1); ==> v = 0 1 2 3 4 5 6 7
idx=find(u>M/2); ==> idx = 6 7 8
u(idx)=u(idx)-M; ==> 0 1 2 3 4 -3 -2 -1
idy=find(v>N/2); ==> idy = 6 7 8
v(idy)=v(idy)-N; ==> 0 1 2 3 4 -3 -2 -1
[V,U]=meshgrid(v,u); ==>
V=
0 1 2 3 4 -3 -2 -1
0 1 2 3 4 -3 -2 -1
0 1 2 3 4 -3 -2 -1
0 1 2 3 4 -3 -2 -1
0 1 2 3 4 -3 -2 -1
0 1 2 3 4 -3 -2 -1
0 1 2 3 4 -3 -2 -1
0 1 2 3 4 -3 -2 -1
U =
0 0 0 0 0 0 0 0
1 1 1 1 1 1 1 1
2 2 2 2 2 2 2 2
3 3 3 3 3 3 3 3
4 4 4 4 4 4 4 4
-3 -3 -3 -3 -3 -3 -3 -3
-2 -2 -2 -2 -2 -2 -2 -2
-1 -1 -1 -1 -1 -1 -1 -1
我不确定他们为什么这样做。请帮我理解这个MATLAB代码。并且还帮助我理解为什么他们必须在下面的MATLAB代码中使用fftshift
。我确实阅读了MATLAB文档,但我无法理解它。如果可能,请举例说明。提前致谢。帮助我学习。
%This code is used to Butterworth lowpass filter
close all;
clear all;
clc;
im=imread('lean.jpg');
fc=20;%Cutoff frequency
n=1;
[co,ro] = size(im);
cx = round(co/2); % find the center of the image
cy = round (ro/2);
imf=fftshift(fft2(im));
H=zeros(co,ro);
for i = 1 : co
for j =1 : ro
d = (i-cx).^2 + (j-cy).^ 2;
H(i,j) = 1/(1+((d/fc/fc).^(2*n)));
end;
end;
outf = imf .* H;
out = abs(ifft2(outf));
imshow(im),title('Original Image'),figure,imshow(uint8(out)),title('Lowpass Filterd Image')
答案 0 :(得分:1)
他们将频率归零到指定频率以上 他们使用径向掩模来设置输入或输出的频率 为了做到这一点,他们建立了一个网格并将其移位,因为DFT转换为0到2pi。