I want to invert the Fourier transform of an image in MATLAB, but the result is not the original image (as it should be). There is obviously some implementation detail that I don't know about that's causing the issue. Here's the code:
img = imread('img.jpg');
fft = fft2(img);
inv = ifft2(fft);
imshow(inv);
The inverse Fourier transform is defined by(12.4)ℱ−1[g](x)=1(2π)n· ∫ℝnf(ξ)eiξxdξ.
In mathematics, the Fourier inversion theorem says that for many types of functions it is possible to recover a function from its Fourier transform. Intuitively it may be viewed as the statement that if we know all frequency and phase information about a wave then we may reconstruct the original wave precisely.
It is unique. If the function f(t) is piecewise continious and square integrable the fourier coffiecients are unique.
Idea. In harmonic analysis, the Fourier inversion theorem states that the Fourier transform is an isomorphism on the Schwartz space of functions with rapidly decreasing partial derivatives. Moreover, it is its own inverse up to a prefactor and reflection at the origin.
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.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With