一、实验目的

1、了解图像变换的意义和手段;
2、熟悉傅里叶变换的基本性质;
3、熟练掌握FFT的方法与应用;
4、通过实验了解二维频谱的分布特点;
5、通过本实验掌握利用MATLAB编程,实现数字图像的傅里叶变换。

二、实验仪器

1、计算机;
2、MATLAB程序;
3、移动式存储器(软盘、U盘等);
4、记录用的笔、纸。

三、实验原理

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

逆变换:

二维离散傅里叶变换为:

逆变换:

图像的傅里叶变换与一维信号的傅里叶变换一样,有快速算法,具体参见参考书目,有关傅里叶变换的快速算法的程序不难找到。实际上,现在有实现傅里叶变换的芯片,可以实时实现傅里叶变换。
3、利用MATLAB软件实现数字图像傅里叶变换、DCT变换的程序。

四、实验步骤

1、打开计算机,安装和启动MATLAB程序;程序组中“work”文件夹中应有待处理的图像文件;
2、利用MATLAB工具箱中的函数绘制FFT频谱显示的函数;
3、a)调入、显示图像;
b)对这图像做FFT、DCT并利用自编的函数显示其频谱;
c)讨论不同的图像内容与FFT、DCT频谱之间的对应关系。
4、记录和整理实验报告。

五、实验内容

MATLAB源程序如下:

clear
clc
img=imread('peppers.png');
subplot(2,2,1);imshow(img);title('原图');
f=rgb2gray(img);    %对于RGB图像必须做的一步,也可以用im2double函数
F=fft2(f);          %傅里叶变换
F1=log(abs(F)+1);   %取模并进行缩放
subplot(2,2,2);imshow(F1,[]);title('傅里叶变换频谱图');
Fs=fftshift(F);      %将频谱图中零频率成分移动至频谱图中心
S=log(abs(Fs)+1);    %取模并进行缩放
subplot(2,2,3);imshow(S,[]);title('频移后的频谱图');
fr=real(ifft2(ifftshift(Fs)));  %频率域反变换到空间域,并取实部
ret=im2uint8(mat2gray(fr));    %更改图像类型
subplot(2,2,4);imshow(ret),title('逆傅里叶变换');

六、实验结果

在MATLAB中运行后,实验结果如图:
在Figure1中,左上角显示的是读入MATLAB程序的原图片,右上角显示的是经过二维傅里叶快速变换后的频谱图像,左下角显示的是将频谱中零频率成分移至矩阵的中心后的频谱图像。右下角显示的是二维傅里叶逆变换后的图像。


图1 MATLAB程序运行后结果

七、实验中遇到的问题及对实验过程的思考

1、关于imshow函数:
使用imshow函数显示图像时要注意图像矩阵类型,当图像是double类型时要使用imshow(I,[])来根据数据矩阵的数值范围自动设置灰度图像显示范围。
详细可参考matlab官网参考文档:显示图像-MATLAB imshow-MathWorks中国

2、关于运行时可能出现的警告:
如果图像进行傅里叶转换后立即用imshow函数显示,则在命令行可能会显示:Warning: Displaying real part of complex input(警告: 显示复数输入项的实部)。这是因为经过傅里叶变换后的图像矩阵大多是复数矩阵,包含实部和虚部。此时如要显示图像则需要先用abs取复数矩阵的模,再进行显示。
取模后图像矩阵的数值一般会很大,直接用imshow函数是无法显示的,此时可以用log函数取其对数,如log(abs(F)+1),这样就可以对频谱进行缩放。至于为什么用log(F+1),如下图所示,对于(0,1)之间的x值经过取对数后会变成负值,而log(x+1)则将所有的x值映射到正数范围内。

图2 log

3、关于开头im2double和rgb2gray函数的使用:
对于RGB真彩图像来说,读入后是以三维矩阵形式存储的,如果此时直接进行傅里叶变换,则频谱图会显示为一片空白或者是密密麻麻的。所以在对RGB图像进行傅里叶变换前要进行类型转换,可以使用im2double将其转换为双精度型(图像运算很少有整型的,所以保守起见不管什么图像都先用这个函数进行转换),或者使用rgb2gray将其转换为灰度图像。
使用不同的函数其变换效果也是不一样的。如使用im2double,进行傅里叶变换后其频谱图呈白色基调,使用rgb2gray其频谱图呈灰色基调。

4、关于最后使用im2uint8转换图像类型:
这一步是为了将逆转换得到的矩阵先转换为灰度图像(mat2gray),再将图像类型转换为uint8。其实这一步的调用与否与开头两个类型转换函数的使用有关,如果在开头就已经将RGB图像转为灰度图像,则此步骤可省去,直接显示经逆转换的图像。如果开头调用im2double,此步省略后可显示出彩色图像。当然此步骤在不同方面发挥着不同作用,取的灰度图像可以为后续操作提供基础。

更多函数信息可参考matlab官网 MATLAB-函数

如有错漏之处敬请指正

Matlab对图像进行傅里叶变换实例相关推荐

  1. 使用matlab对图像进行傅里叶变换

    使用matlab对图像进行傅里叶变换 原图: (0) 代码: I=imread('1.jpg'); I=rgb2gray(I); I=im2double(I); F=fft2(I); F=fftshi ...

  2. Matlab对图像做傅里叶变换

    傅里叶变换应用在各个领域当中,傅里叶变换的方式也有很多种,通常在图像处理的这一方面,利用了二维的傅里叶变换.为了更好的去观察一幅图像,它通常将图像从空间域变换到频域.利用这个变换更加利于观察到图像的某 ...

  3. matlab对图像进行傅里叶变换_数字图像处理(一)—— 傅里叶变换

    1. 基本指数信号 设 与 为两个基本指数信号,其中 和 分别为连续时间域和离散时间域的角频率. 1.1 连续时间域 连续时间域中,如果满足 ,则 是周期信号,其周期为 ,: 角频率 越大,信号的振荡 ...

  4. 在matlab环境中实现图像的傅里叶变换,matlab用傅里叶变换实现图像的低通滤波

    低通滤波器指去除图像中的高频成分,而低通滤波器指去除图像中的高频成分. 考虑的有三种低通滤波器:理想滤波器.布特沃斯滤波器和高斯滤波器. 理想低通滤波器:以原点为圆心,D为半径的圆内, 无衰减地通过所 ...

  5. MATLAB 图像的傅里叶变换

    clc; clear all; close all; img=imread('C:/lena.jpg'); f=fft2(img); %对图像进行傅里叶变换 f=fftshift(f); %将频谱中心 ...

  6. matlab中有趣的图像,MATLAB中有趣的演示实例

    MATLAB中有趣的演示实例 MATLAB中也同样有许多有意思的实例,为提高读者对MATLAB和Simulink的兴趣,特举部分以供参考.具体如下,运行的时候只要将":"前面的代码 ...

  7. matlab画傅立叶变换后相位谱,对一幅图像进行傅里叶变换后,包含频谱(也叫幅度谱)和相位谱两部分,请问那一部分更重要?...

    对一幅图像进行傅里叶变换后,包含频谱(也叫幅度谱)和相位谱两部分,请问那一部分更重要? 更多相关问题 [判断题] 抗盐产品切换到中分时,生产线不需要酸洗. [判断题] 机械密封中的载荷系数不是越大越好 ...

  8. matlab 读取照片imread,利用matlab读取图像

    怎样用matlab读取20张图片并依次展示出来 指定路径下 单个文件夹data中所有图像 P = '.\data\';% 图像文件夹路径 img_path_list = dir(strcat(P,'* ...

  9. matlab实现频域率滤波,基于Matlab的图像的频域滤波实现及研究.doc

    摘要:图像的频域滤波是图像增强的一种方法.图像增强是图像处理的方法之一,有频率域法和空间域法.频率域法把图像看成一种二维信号,对其进行二维傅里叶变换的信号增强,采用低通滤波法可以去掉图像的噪声:采用高 ...

最新文章

  1. 我一哥们,在东莞和五名女孩被抓了.....
  2. 温故之 “插入排序”
  3. python 商城api编写_Python实现简单的API接口
  4. c语言改变doss窗口的颜色,C语言第三次模拟练习题部分解答
  5. 程序员看不起事业单位员工:一年收入才4万?网友:40岁再比一比,究竟谁更牛逼!!
  6. excel vlookup用法_Python中也可以写Excel中的“Vlookup”函数?太牛逼了吧!
  7. php如何对mysql加锁_PHP+MySQL高并发加锁事务处理问题解决方法
  8. Hindenburg发布亿邦国际做空报告,称其股份增发套现、矿机销量萎靡
  9. 从酒店服务员到世界500强大数据工程师,月薪4K到年薪40W,我经历了什么?
  10. 数学建模国赛latex写作模板
  11. 金融分析与风险管理——投资组合的绩效评估
  12. r语言决策树c4.5案例,C4.5主要思想与决策树实例
  13. 三阶齐次线性方程求通解_三阶常系数齐次线性差分方程解的分类
  14. Python中json.loads()无法解析单引号字符串问题的两种解决方法
  15. 【PTA】读入一个正整数 n,计算其各位数字之和,用汉语拼音写出和的每一位数字。c。
  16. 中小企业融资风险分类有哪些
  17. 98sez资源_Sez You建筑与忍者建筑
  18. wxpython表格怎么分页_Word表格跨页断行如何排版?Word表格换页脱节怎么办?
  19. Docker知识点总结
  20. Java之-springboot

热门文章

  1. c++游戏编程三国杀
  2. java实体类包怎么命名,程序那些事
  3. Python可视化库matplotlib.pyplot里contour与contourf的区别
  4. 如何恢复小强中被修改的软件包
  5. html控制两个页面转换,html页面切换过度效果实现方案_蓝戒的博客
  6. 打印300页的书本胶装需要多少钱
  7. C语言之write()函数解析:Write Failed Bad address
  8. 华栖云与阿里云首推“云上电视台”,可实现内容云端一站式制作
  9. Python Selenium3.141+Win7(64位)+IEDriverServer(32位版本)+调用IE11卡死的解决
  10. 鼠标移动到的地方一直往右移动的解决办法