为什么这个逆傅里叶变换不能给出正确的结果呢?

时间:2010-09-16 17:40:38

标签: matlab image-processing fft

我想在MATLAB中反转图像的傅里叶变换,但结果不是原始图像(应该是)。显然有一些我不知道的实现细节导致了这个问题。这是代码:

img = imread('img.jpg');
fft = fft2(img);
inv = ifft2(fft);
imshow(inv);

2 个答案:

答案 0 :(得分:15)

由于fft2ifft2都以doublesingle精度执行计算,因此image data(可能属于uint8类型)在被double处理之前,首先转换为fft2类型。因此,您必须使用函数uint8将输出图像inv转换回无符号的8位整数,以恢复原始图像:

>> 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!

注意:作为补充提示,我会避免命名变量fftinv,因为MATLAB中已经存在具有这些名称的函数。

答案 1 :(得分:3)

此外,如果您尝试对彩色(24位)图像进行FFT - 请注意,imread()将返回M x N x 3阵列。因此,您应该分别对每个R / G / B通道执行FFT。

See this了解详情。