实验二 傅里叶变换

实验要求

1.熟悉及掌握图像的变换原理及性质,实现图像的傅里叶变换

知识点

图像的变换

1.fft2

fft2函数用于数字图像的二维傅立叶变换,如:

i=imread(‘e:\w01.tif’);

j=fft2(i);

由于MATLAB无法显示复数图像,因此变换后的结果还需进行求模运算,即调用abs函数。

之后常常还进行对数变换,即调用log函数,以减缓傅里叶谱的快速衰减,更好地显示高频信息。

2.ifft2

ifft2函数用于数字图像的二维傅立叶反变换,如:

i=imread(‘e:\w01.tif’);

j=fft2(i);

k=ifft2(j);

3.fftshift

用于将变换后图像频谱中心从矩阵的原点移动到矩阵的中心

B=fftshift(i)

4.利用fft2计算二维卷积

利用fft2函数可以计算二维卷积,如:

a=[8,1,6;3,5,7;4,9,2];

b=[1,1,1;1,1,1;1,1,1];

a(8,8)=0;

b(8,8)=0;

c=ifft2(fft2(a).*fft2(b));

c=c(1:5,1:5);

利用conv2(二维卷积函数)校验, 如:

a=[8,1,6;3,5,7;4,9,2];

b=[1,1,1;1,1,1;1,1,1];

c=conv2(a,b);

实验内容

1、对一幅图像进行平移,显示原始图像与处理后图像,分别对其进行傅里叶变换,显示变换后结果,分析原图的傅里叶谱与平移后傅里叶频谱的对应关系

close all;
clear all;
clc;
s=imread('屏保.jpg');%读入原图像
i=rgb2gray(s)
i=double(i)
j=fft2(i); %傅里叶变换
k=fftshift(j); % 直流分量移到频谱中心
l=log(abs(k)); %对数变换
m=fftshift(j); %直流分量移到频谱中心
RR=real(m); %取傅里叶变换的实部
II=imag(m); %取傅里叶变换的虚部
A=sqrt(RR.^2+II.^2); %计算频谱府幅值
A=(A-min(min(A)))/(max(max(A)))*255; % 归一化
b=circshift(s,[800 450]); %对图像矩阵im中的数据进行移位操作
b=rgb2gray(b)
b=double(b)
c=fft2(b); %傅里叶变换
e=fftshift(c); % 直流分量移到频谱中心
l=log(abs(e)); %对数变换
f=fftshift(c); %直流分量移到频谱中心
WW=real(f); %取傅里叶变换的实部B
ZZ=imag(f); %取傅里叶变换的虚部
B=sqrt(WW.^2+ZZ.^2); %计算频谱府幅值
B=(B-min(min(B)))/(max(max(B)))*255; % 归一化
subplot(2,2,1);imshow(s);title('原图像')
subplot(2,2,2);imshow(uint8(b));;title('平移图像')
subplot(2,2,3);imshow(A);title('离散傅里叶频谱');
subplot(2,2,4);imshow(B);title('平移图像离散傅里叶频谱')

频谱不随图像平移而改变

image-20211130163812081

2、对一幅图像进行旋转,显示原始图像与处理后图像,分别对其进行傅里叶变换,显示变换后结果,分析原图的傅里叶谱与旋转后傅里叶频谱的对应关系

close all;
clear all;
clc;
s=imread('屏保.jpg');%读入原图像
i=rgb2gray(s)
i=double(i)
j=fft2(i); %傅里叶变换
k=fftshift(j); % 直流分量移到频谱中心
l=log(abs(k)); %对数变换
m=fftshift(j); %直流分量移到频谱中心
RR=real(m); %取傅里叶变换的实部
II=imag(m); %取傅里叶变换的虚部
A=sqrt(RR.^2+II.^2); %计算频谱府幅值
A=(A-min(min(A)))/(max(max(A)))*255; % 归一化
b=imrotate(s, -90); %对图像矩阵im中的数据进行移位操作
b=rgb2gray(b)
b=double(b)
c=fft2(b); %傅里叶变换
e=fftshift(c); % 直流分量移到频谱中心
l=log(abs(e)); %对数变换
f=fftshift(c); %直流分量移到频谱中心
WW=real(f); %取傅里叶变换的实部B
ZZ=imag(f); %取傅里叶变换的虚部
B=sqrt(WW.^2+ZZ.^2); %计算频谱府幅值
B=(B-min(min(B)))/(max(max(B)))*255; % 归一化
subplot(2,2,1);imshow(s);title('原图像')
subplot(2,2,2);imshow(uint8(b));;title('平移图像')
subplot(2,2,3);imshow(A);title('离散傅里叶频谱');
subplot(2,2,4);imshow(B);title('平移图像离散傅里叶频谱')

频谱随着矩形的旋转而旋转相同的角度

image-20211130163859947