Aluláteresztő szűrő

Aluláteresztő szűrő esetében az alacsonyabb frekvenciák jelennek csak meg a képen. Valósítsunk meg egy ideális aluláteresztő szűrőt! Legyen D0 egy nemnegatív szám, és D(u,v) az (u,v) pont távolsága a középponttól.

 

function H = ideal_lowpass( M, N, D0 )
% M, N: a szűrő mérete, D0 nemnegatív szám (sugár)
    H = double(zeros(M,N));
    M_center = M/2;
    N_center = N/2;
    for i = 1:M
        for j = 1:N
            if (i-M_center) * (i-M_center) + (j-N_center) * (j-N_center) <= D0*D0
                 H(i,j) = 1.0;
            end
        end
     end
end

Próbáljuk ki!

>> img = imread( 'Columbo.JPG' );
>> fft_img = fft2( img );
>> fft_img2 = fftshift( fft_img );
>> [M,N] = size( img );
>> H = ideal_lowpass( M,N,60.0 );
>> filt_fft = fft_img2 .* H;
>> filt_ifft = ifft2( ifftshift( filt_fft ) );
>> imshow(filt_ifft,[])

 

Egy másik megoldás:

function H = ideal_lowpass( M, N, D0 )
%%     M, N: a szűrő mérete, D0 nemnegatív szám (sugár)
    u=0:(M-1);
    v=0:(N-1);
    idx = find(u>M/2);  %% kigyujti az indexeket, amelynél u > M/2
    u(idx)=u(idx)-M;
    idy = find(v>N/2);  %% kigyujti az indexeket, amelynél v > N/2
    v(idy)=v(idy)-N;   
    [V,U] = meshgrid(v,u);
    D=sqrt(U.^2 + V.^2);   
    H = double(D <= D0);   
end

>> img = imread( 'Columbo.JPG' );
>> fft_img = fft2( img );
>> fft_img2 = fftshift( fft_img );

>> [M,N] = size( img );
>> H = ideal_lowpass( M,N,60.0 );
>> H1 = fftshift( H );
>> filt_fft = fft_img2 .* H1;
>> filt_ifft = ifft2( ifftshift( filt_fft ) );
>> imshow( filt_ifft,[] );

 

Eredeti kép filt_fft Eredmény kép IFFT után