为什么我用Matlab将一幅黑白图进行傅里叶变换后想对其频谱图逆变换显示出原图,却不行呢?求高手指教
orgImage=imread('tire.tif');figure(1);imshow(orgImage);fftI1=fft2(orgImage);%二维离散傅立叶变...
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); 展开
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); 展开
2个回答
展开全部
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,这样才行。
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, [ ])就行了。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询