1
votes

I have read this image:

enter image description here

taken its FFT (2D) and then Inverse FFT to get exactly the image back:

imfft = fft2(photographer);
im = uint8(ifft2(imfft));

imshow(im); %Output is same image

But when I change the fourier and take only the real part,

imfft = real(fft2(photographer));
im = uint8(ifft2(imfft));
imshow(im);

I get an image like this (note that size change is irrelevant and only due to saving it from Matlab figure handler):

enter image description here

Why does this happen?

UPDATE

As suggested, this question was posted on DSP StackExchange and got the answer here

1
the code you provided did not take the real part of the 2d-fft.GameOfThrows
yes, this is the right expectation, simply because of how Fourier transform works - if you want the Math behind it, you can post this up on Stack Exchange Signal Proc. dsp.stackexchange.comGameOfThrows

1 Answers

1
votes

The real part represents only symmetric basis vectors (cosine waves that are symmetric around the center of an FFT aperture). So any IFFT reconstruction using only the real part (all imaginary components == 0) can only (re)produce images that are symmetric around the center (by distorting them per your example, for instance).