MATLAB中理想的低通滤波器概念

时间:2013-10-22 15:28:04

标签: matlab image-processing fft

请帮助我理解以下用于理想低通滤波器的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')

1 个答案:

答案 0 :(得分:1)

他们将频率归零到指定频率以上 他们使用径向掩模来设置输入或输出的频率 为了做到这一点,他们建立了一个网格并将其移位,因为DFT转换为0到2pi。