Why isn't this inverse Fourier transform giving the correct results?

我怕爱的太早我们不能终老 提交于 2019-12-20 12:15:37

问题


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);

回答1:


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.




回答2:


Also if you are trying to do FFT on color (24-bit) image - note that imread() will return M x N x 3 array. So you should perform FFT on each R/G/B channel separately.

See this for detail.



来源:https://stackoverflow.com/questions/3729235/why-isnt-this-inverse-fourier-transform-giving-the-correct-results

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!