Matlab对图像进行傅里叶变换实例
一、实验目的
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对图像进行傅里叶变换实例相关推荐
- 使用matlab对图像进行傅里叶变换
使用matlab对图像进行傅里叶变换 原图: (0) 代码: I=imread('1.jpg'); I=rgb2gray(I); I=im2double(I); F=fft2(I); F=fftshi ...
- Matlab对图像做傅里叶变换
傅里叶变换应用在各个领域当中,傅里叶变换的方式也有很多种,通常在图像处理的这一方面,利用了二维的傅里叶变换.为了更好的去观察一幅图像,它通常将图像从空间域变换到频域.利用这个变换更加利于观察到图像的某 ...
- matlab对图像进行傅里叶变换_数字图像处理(一)—— 傅里叶变换
1. 基本指数信号 设 与 为两个基本指数信号,其中 和 分别为连续时间域和离散时间域的角频率. 1.1 连续时间域 连续时间域中,如果满足 ,则 是周期信号,其周期为 ,: 角频率 越大,信号的振荡 ...
- 在matlab环境中实现图像的傅里叶变换,matlab用傅里叶变换实现图像的低通滤波
低通滤波器指去除图像中的高频成分,而低通滤波器指去除图像中的高频成分. 考虑的有三种低通滤波器:理想滤波器.布特沃斯滤波器和高斯滤波器. 理想低通滤波器:以原点为圆心,D为半径的圆内, 无衰减地通过所 ...
- MATLAB 图像的傅里叶变换
clc; clear all; close all; img=imread('C:/lena.jpg'); f=fft2(img); %对图像进行傅里叶变换 f=fftshift(f); %将频谱中心 ...
- matlab中有趣的图像,MATLAB中有趣的演示实例
MATLAB中有趣的演示实例 MATLAB中也同样有许多有意思的实例,为提高读者对MATLAB和Simulink的兴趣,特举部分以供参考.具体如下,运行的时候只要将":"前面的代码 ...
- matlab画傅立叶变换后相位谱,对一幅图像进行傅里叶变换后,包含频谱(也叫幅度谱)和相位谱两部分,请问那一部分更重要?...
对一幅图像进行傅里叶变换后,包含频谱(也叫幅度谱)和相位谱两部分,请问那一部分更重要? 更多相关问题 [判断题] 抗盐产品切换到中分时,生产线不需要酸洗. [判断题] 机械密封中的载荷系数不是越大越好 ...
- matlab 读取照片imread,利用matlab读取图像
怎样用matlab读取20张图片并依次展示出来 指定路径下 单个文件夹data中所有图像 P = '.\data\';% 图像文件夹路径 img_path_list = dir(strcat(P,'* ...
- matlab实现频域率滤波,基于Matlab的图像的频域滤波实现及研究.doc
摘要:图像的频域滤波是图像增强的一种方法.图像增强是图像处理的方法之一,有频率域法和空间域法.频率域法把图像看成一种二维信号,对其进行二维傅里叶变换的信号增强,采用低通滤波法可以去掉图像的噪声:采用高 ...
最新文章
- 我一哥们,在东莞和五名女孩被抓了.....
- 温故之 “插入排序”
- python 商城api编写_Python实现简单的API接口
- c语言改变doss窗口的颜色,C语言第三次模拟练习题部分解答
- 程序员看不起事业单位员工:一年收入才4万?网友:40岁再比一比,究竟谁更牛逼!!
- excel vlookup用法_Python中也可以写Excel中的“Vlookup”函数?太牛逼了吧!
- php如何对mysql加锁_PHP+MySQL高并发加锁事务处理问题解决方法
- Hindenburg发布亿邦国际做空报告,称其股份增发套现、矿机销量萎靡
- 从酒店服务员到世界500强大数据工程师,月薪4K到年薪40W,我经历了什么?
- 数学建模国赛latex写作模板
- 金融分析与风险管理——投资组合的绩效评估
- r语言决策树c4.5案例,C4.5主要思想与决策树实例
- 三阶齐次线性方程求通解_三阶常系数齐次线性差分方程解的分类
- Python中json.loads()无法解析单引号字符串问题的两种解决方法
- 【PTA】读入一个正整数 n,计算其各位数字之和,用汉语拼音写出和的每一位数字。c。
- 中小企业融资风险分类有哪些
- 98sez资源_Sez You建筑与忍者建筑
- wxpython表格怎么分页_Word表格跨页断行如何排版?Word表格换页脱节怎么办?
- Docker知识点总结
- Java之-springboot
热门文章
- c++游戏编程三国杀
- java实体类包怎么命名,程序那些事
- Python可视化库matplotlib.pyplot里contour与contourf的区别
- 如何恢复小强中被修改的软件包
- html控制两个页面转换,html页面切换过度效果实现方案_蓝戒的博客
- 打印300页的书本胶装需要多少钱
- C语言之write()函数解析:Write Failed Bad address
- 华栖云与阿里云首推“云上电视台”,可实现内容云端一站式制作
- Python Selenium3.141+Win7(64位)+IEDriverServer(32位版本)+调用IE11卡死的解决
- 鼠标移动到的地方一直往右移动的解决办法