理工的小蔡同学

导航

< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

统计

【数字图像处理】傅里叶变换

实验原理及知识点

1.应用傅里叶变换进行图像处理

傅里叶变换是线性系统分析的一个有力工具,它能够定量地分析诸如数字化系统、采样点、电子放大器、卷积滤波器、噪音和显示点等的作用。通过实验培养这项技能,将有助于解决大多数图像处理问题。对任何想在工作中有效应用数字图像处理技术的人来说,把时间用在学习和掌握博里叶变换上是很有必要的。

2.傅立叶(Fourier)变换的定义

对于二维信号,二维Fourier变换定义为:

F(u,v)=f(x,y)ej2π(ux+uy)dxdy

逆变换:

f(x,y)=F(u,v)ej2π(ux+uy)dudv

二维离散傅立叶变换为:

F(m,n)1Ni=0N1k=0N1f(i,k)ej2π(miN+nkN)

逆变换:

f(i,k)1Nm=0N1n=0N1F(m,n)ej2π(miN+nkN)

 图像的傅立叶变换与一维信号的傅立叶变换变换一样,有快速算法,具体参见参考书目,有关傅立叶变换的快速算法的程序不难找到。实际上,现在有实现傅立叶变换的芯片,可以实时实现傅立叶变换。

实验内容

1.读入一副图像,对其进行傅里叶变换,分别显示,原图,傅里叶变换图,中心化后图。

1
2
3
4
5
6
7
8
9
10
11
clear;
clc;
Img=imread('LongyuanCai.jpg');%读入原图
I=rgb2gray(Img);%将RGB图像变换
IF=fft2(I);%进行傅里叶变换
I1=log(abs(IF)+1);%取模后缩放 
IC=fftshift(I1);%将频谱图中零频率成分移动至频谱图中心(中心化)
I2=log(abs(IC)+1);%取模后缩放显示中心化后图
figure;subplot(131);imshow(Img);title('原图');
subplot(132);imshow(I1,[]);title('傅里叶变换图');
subplot(133);imshow(I2,[]);title('中心化后图');

实验问题及解决:

%1.取模后图像矩阵的数值一般会很大,直接用imshow函数是无法显示的,此时可以用log函数取其对数,如log(abs(F)+1),这样就可以对频谱进行缩放。
%2.fftshift将频谱图中零频率成分移动至频谱图中心
%3.傅里叶变换和频移图imshow函数需要加上[]才能显示
%4.abs作用是将所得变量绝对值和复数求模

2.生成一副图像(简单的黑底白块),对其进行旋转变换,分别对原图和旋转后的图像进行离散傅里叶变换,显示2副傅里叶变换图。

 

1
2
3
4
5
6
7
8
9
10
clear;
clc;
I=zeros(256,256);I(59:237,120:136)=1;
J=imrotate(I,45,'bilinear','crop');
I1=fft2(I);F=abs(I1);I2=fftshift(F);
J1=fft2(J);F=abs(J1);J2=fftshift(F);
subplot(221);imshow(I);
subplot(222);imshow(J);
subplot(223);imshow(I2,[]);
subplot(224);imshow(J2,[]);

 

 

实验问题及解决:

%显示傅里叶频谱需要进行:1.傅里叶变换(fft2) 

%2.变换后的变量求模(abs) 

%3.转换成频谱图并将频谱图中零频率成分移动至频谱图中心(fftshift)

 

3.读入一副图像,将其变为灰度图。加入高斯噪声,并分别对加入噪声前后的图像进行傅里叶变换,并显示。

 

1
2
3
4
5
6
7
8
9
10
clear;
clc;
Img=imread('GirlFriend.jpg');%读入图像
I=rgb2gray(Img);%图像由RGB变成灰度图
I1=fft(I);F=abs(I1);I2=fftshift(F);%噪声前傅里叶变换
J=imnoise(I,'gaussian',0,0.01);%加入高斯噪声
J1=fft(J);F=abs(J1);J2=fftshift(F);%噪声后傅里叶变换
figure;subplot(131);imshow(I);title('灰度图');
subplot(132);imshow(I2,[]);title('傅里叶变换图');
subplot(133);imshow(J2,[]);title('噪声后图');

 

 

 

4.生成一副图像(简单的黑底白块,参考下面生成程序,但是需自己重新设定数值),进行离散傅里叶变换,再对其分别进行X轴与Y轴上的平移,并分别对其进行离散傅里叶变换,观察3副傅里叶变换图。需显示6幅图,原图,行平移图,列平移图,行平移傅里叶变换图(频谱中心化),列平移傅里叶变换图(频谱中心化)。

 

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
clear;
clc;
I=zeros(256,256);I(59:230,120:136)=1;%产生原图(行坐标修改)
[M,N]=size(I);g=zeros(M,N);h=zeros(M,N);
a=20;b=20;
for i=1:M                        %行平移
    for j=1:N
        if ((i-a>0)&&(i-a<M))
            g(i,j)=I(i-a,j);
        else
            g(i,j)=0;
        end
    end
end
for j=1:N                        %列平移
    for i=1:M
        if ((j-b>0)&&(j-b<N))
            h(i,j)=I(i,j-b);
        else
            h(i,j)=0;
        end
         
    end
end
 
I1=fftshift(abs(fft2(I)));
g1=fftshift(abs(fft2(g)));
h1=fftshift(abs(fft2(h)));
 
figure;subplot(231);imshow(I);title('原图');
subplot(232);imshow(g);title('行平移图');
subplot(233);imshow(h);title('列平移图');
subplot(234);imshow(I1,[]);title('原图傅里叶变换图');
subplot(235);imshow(g1,[]);title('行平移傅里叶变换图');
subplot(236);imshow(h1,[]);title('列平移傅里叶变换图');

 

posted on   董舒尧呀  阅读(949)  评论(0编辑  收藏  举报

相关博文:
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
点击右上角即可分享
微信分享提示