Since fft2
and ifft2
both perform calculations in either double
or single
precision, your image data (which is likely of type uint8
) gets converted to type double
first before being processed by fft2
. You will therefore have to convert your output image inv
back to an unsigned 8-bit integer using the function uint8
to recover the original image:
>> img = imread('peppers.png'); % Load a sample image
>> fft = fft2(img); % Get the Fourier transform
>> inv = ifft2(fft); % Get the inverse Fourier transform
>> inv = uint8(inv); % Convert to uint8
>> imshow(inv); % Show the image
>> isequal(img, inv) % Test if inv matches the original image img
ans =
1 % It does!
NOTE: As an additional tip, I would avoid naming your variables fft
and inv
since functions with those names already exist in MATLAB.