Matlab - How to apply low pass and high pass filters using fft2 and fftshift?

913 views Asked by At

I am not sure how to apply low-pass and high-pass filters on a jpg image.

The filters are calculated by:

function [cL,cH] = getfilters(radius)
    [x,y] = meshgrid(-128:127,-128:127);
    z = sqrt(x.^2+y.^2);
    cL = z < radius;
    cH = ~cL;
end

so to filter the image, I have:

img = imread('a jpg image')
ft = fftshift(fft2(img));
[cL, cH] = getfilters(40);
l_ft = ft .* cL;
h_ft = ft .* cH;
low_filtered_image = ifft2(ifftshift(l_ft), 'symmetric');
high_filtered_image = ifft2(ifftshift(h_ft), 'symmetric');

To display the filtered inverse Fourier transform:

low_f = uint8(abs(low_filtered_image));
high_f = uint8(abs(high_filtered_image));
figure, imshow(low_f); figure, imshow(high_f);

This is the output:

enter image description here enter image description here

If this code is wrong, what should I do to fix it?

0

There are 0 answers