Поскольку fft2
и ifft2
оба выполняют вычисления с точностью double
или single
, ваш данные изображения (вероятно, типа uint8
) сначала преобразуются в тип double
, а затем обрабатываются fft2
. Поэтому вам придется преобразовать ваше выходное изображение inv
обратно в 8-разрядное целое число без знака, используя функцию uint8
, чтобы восстановить исходное изображение:
>> 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!
ПРИМЕЧАНИЕ: В качестве дополнительного совета я бы не стал называть ваши переменные fft
и inv
, поскольку функции с такими именами уже существуют в MATLAB.