为什么我用Matlab将一幅黑白图进行傅里叶变换后想对其频谱图逆变换显示出原图,却不行呢?求高手指教

orgImage=imread('tire.tif');
figure(1); imshow(orgImage);
fftI1=fft2(orgImage); %二维离散傅立叶变换
sfftI1=fftshift(fftI1); %直流分量移到频谱中心
RR1=real(sfftI1); %取傅立叶变换的实部
II1=imag(sfftI1); %取傅立叶变换的虚部
A1=sqrt(RR1.^2+II1.^2); %计算频谱幅值
a1=(A1-min(min(A1)))/(max(max(A1))-min(min(A1)))*225;%归一化
figure(2); imshow(a1); %显示原图像的频谱
image=ifftshift(a1);
image3=real(image);
figure(3); imshow(image3);

f = imread('tire.tif');
imshow(f)
F = fft2(f); % 傅氏变换
Fc = fftshift(F); % 中心化
Fm = abs(Fc); % 取模
figure, imshow(Fm, [ ])
figure, imshow(log(1+Fm), [ ]) % 对数变换,增强显示视觉效果
G = ifftshift(Fc); % 对Fc去中心化
g = ifft2(G); % 对G逆变换
figure, imshow(g) % 原图像
你要注意整个流程,f ---> F ----> Fc , 所以要回去的话当然是Fc --- > G --- > g,就是先对Fc去中心化得到G,再对G逆变换得到g,这样才行。追问

我按你的意思改了程序,可还是得不到原图啊???

追答

这个我忽略了一点,你把最后一行的那个figure, imshow(g),改成figure,imshow(g, [ ])就行了。

温馨提示:答案为网友推荐,仅供参考
第1个回答  2012-10-27
fftI2=ifftshift(sfftI1);
image=ifft2(fftI2)/256;
figure(3); imshow(image);本回答被提问者采纳