【MATLAB图像处理】傅里叶变换--幅度谱、相位谱、逆变换

fft2()  傅里叶正变换

fftshift()  频谱搬移-直流量(f=0)搬移至频谱中心

I=imread('exp2.tif');     %读入原图像
I1=I(:,:,1:3);    %四通道转为三通道去掉透明层
I2=rgb2gray(I1);    %对图像进行灰度处理
fftl=fft2(I2);     %二维离散傅里叶变换
sfftl=fftshift(fftl);     %直流分量移到频谱中心
SFFTl=log(sfftl);    %频谱增强
A=log(abs(sfftl));    %对幅度谱进行增强
E=A.^2;    %幅度谱平方得到能量谱
T=angle(sfftl)*180/pi;    %对相位谱进行增强
IA=log(ifft2(ifftshift(sfftl)));    %傅里叶逆变换
subplot(2,3,1);imshow(I2),title('原图');
subplot(2,3,2);imshow(SFFTl,[]),title('频谱');
subplot(2,3,3);imshow(A,[]),title('幅度谱');
subplot(2,3,4);imshow(E,[]),title('能量谱');
subplot(2,3,5);imshow(T),title('相位谱');
subplot(2,3,6);imshow(IA),title('傅里叶逆变换图像');

I=imread('exp2.tif');     %读入原图像
I1=I(:,:,1:3);    %四通道转为三通道去掉透明层
I2=rgb2gray(I1);    %对图像进行灰度处理
fftl=fft2(I2);     %二维离散傅里叶变换
sfftl=fftshift(fftl);     %直流分量移到频谱中心
A1=abs(sfftl);    %幅度谱不增强
A=log(abs(sfftl));    %对幅度谱进行增强
T1=angle(sfftl);    %相位谱不增强
T=angle(sfftl)*180/pi;    %对相位谱进行增强
subplot(2,2,1);imshow(A1,[]),title('未增强幅度谱');
subplot(2,2,2);imshow(A,[]),title('已增强幅度谱');
subplot(2,2,3);imshow(T1),title('未增强相位谱');
subplot(2,2,4);imshow(T),title('已增强相位谱');

I=imread('exp2.tif');     %读入原图像
I1=I(:,:,1:3);    %四通道转为三通道去掉透明层
I2=rgb2gray(I1);    %对图像进行灰度处理
fftl=fft2(I2);     %二维离散傅里叶变换
sfftl=fftshift(fftl);     %直流分量移到频谱中心
A=log(abs(sfftl));    %对幅度谱进行增强
T=angle(sfftl)*180/pi;    %对相位谱进行增强
IA=log(ifft2(ifftshift(sfftl)));    %傅里叶逆变换
A=log(ifft2(ifftshift(A)));    %傅里叶逆变换
T=log(ifft2(ifftshift(T)));    %傅里叶逆变换
subplot(2,2,1);imshow(I2),title('原图');
subplot(2,2,2);imshow(IA),title('频谱逆变换图像');
subplot(2,2,3);imshow(A),title('幅值逆变换图像');
subplot(2,2,4);imshow(T),title('相位逆变换图像');

幅度谱只包含亮度信息(f),逆变换后由于没有位置信息(x,y)导致无法重构图像;相位谱只包含位置信息(x,y),逆变换后由于没有亮度信息(f)导致重构图像只有轮廓没有亮度。而同时利用幅度谱和相位谱可以进行双谱重构恢复出原图像。

猜你喜欢

转载自blog.csdn.net/weixin_51659968/article/details/129990456