【信号与系统】如何得到原始图片的频谱图?(Matlab)
图像处理是指对图像进行分析、加工、和处理,使其满足视觉、心理或其他要求的技术。图像处理是信号处理在图像领域上的一个应用。目前大多数的图像均是以数字形式存储,因而图像处理很多情况下指数字图像处理。此外, 基于光学理论的处理方法依然占有重要的地位。 图像处理是信号处理的子类,另外与计算机科学、人工智能等领域也有密切的关系。傅立叶变换是图像处理的核心步骤,通过本门课程中对傅立叶变换的讲授,可以通过 MATLAB 工具对图像进行简单的处理。 数字图像中的频谱,频率对于图像来说就是指图像颜色值的梯度,即灰度 级的变化速度;幅度可以简单的理解为是频率的权,即该频率所占的比例。对 图像而言,图像的边缘部分是突变部分,变化较快,因此反应在频域上是高频分量;图像的噪声大部分情况下是高频部分;图像平缓变化部分则为低频分量。也就是说,傅立叶变换提供另外一个角度来观察图像,可以将图像从灰度分布转化到频率分布上来观察图像的特征。
今天我们就用 MATLAB 来进行仿真,看看如何得到原始图片的频谱图?傅立叶变换在其中起到了什么作用?图片在频域有什么特征?
1、如何得到原始图片的频谱图?
首先,使用imread()函数来读取一幅图像,并以image变量存储。
image=imread('image.png');
读出后紧接着用subplot和imshow联合建立一张坐标域并显示原图。
subplot(2,3,1);imshow(image);title('原图');
在计算频谱时,彩色图像中的每个像素颜色由R、G、B三个分量来决定,而每个分量的取值范围都在0-255之间,这样对计算机来说,彩色图像的一个像素点就会有256*256*256=16777216种颜色的变化范围。而灰度图像是R、G、B分量相同的一种特殊彩色图像,对计算机来说,一个像素点的变化范围只有0-255这256种。彩色图片的信息含量过大,如果此时直接进行傅里叶变换,则频谱图会显示为一片空白或者是密密麻麻的。进行图片识别时,为了提高运算速度,在对RGB图像进行傅里叶变换前要进行类型转换,可以使用im2double将其转换为双精度型,或者使用rgb2gray将其转换为灰度图像。使用不同的函数其变换效果也是不一样的。如使用im2double,进行傅里叶变换后其频谱图呈白色基调,使用rgb2gray其频谱图呈灰色基调,具体情况对比如图1-1、1-2所示。
image_gray=rgb2gray(image);
接下来先对刚刚得到得灰度化的图像进行傅里叶变换。
image_fft=fft2(image_gray); %傅里叶变换
如果图像进行傅里叶转换后立即用imshow函数显示,则在命令行可能会显示:Warning: Displaying real part of complex input(警告: 显示复数输入项的实部)。这是因为经过傅里叶变换后的图像矩阵大多是复数矩阵,包含实部和虚部。此时如要显示图像则需要先用abs取复数矩阵的模,再进行显示。
取模后图像矩阵的数值一般会很大,直接用imshow函数是无法显示的,此时可以用log函数取其对数,如log(abs(image_fft)+1),这样就可以对频谱进行缩放。至于为什么用log(abs(image_fft)+1),是因为对于(0,1)之间的x值经过取对数后会变成负值,而log(x+1)则将所有的x值映射到正数范围内。
image_AM_1=log(abs(image_fft)+1); %取模并进行缩放
之后将image_AM_1图像用imshow显示出来。
subplot(2,3,2);imshow(image_AM_1,[]);title('傅里叶变换幅度谱');
但是以上得到的幅度谱我们会发现其幅度谱的中心是位于四角,而非最中央,解决办法非常简单,进行频域变换即可,我们就可以求得频谱中心在图中央的幅度谱了,后续操作与前面相同。
image_fft_shift=fftshift(image_fft);image_fft_shift=fftshift(image_fft);image_AM_2=log(abs(image_fft_shift)+1);subplot(2,3,4);imshow(image_AM_2,[]);title('频移后的幅度谱');
对于相位谱我们做同样的处理。
image_Phase_1=log(angle(image_fft)*180/pi); %取相位并进行缩放subplot(2,3,3);imshow(image_Phase_1,[]);title('傅里叶变换相位谱');image_Phase_2=log(angle(image_fft_shift)*180/pi);%取相位并进行缩放subplot(2,3,5);imshow(image_Phase_2,[]);title('频移后的相位谱');
最后一个式子进行逆变换,如果开头调用rgb2gray,需将逆转换得到的矩阵先转换为灰度图像(mat2gray将矩阵转换为灰度图像),再将图像类型转换为uint8(im2uint8将图像转换为 8 位无符号整数)。
image_fft_ifft=ifft2(image_fft); %频率域反变换到空间域image_restore=im2uint8(mat2gray(image_fft_ifft));%更改图像类型subplot(2,3,6);imshow(image_restore);title('逆傅里叶变换');
图1-1 使用rgb2gray得到的频谱图
图1-2 使用im2double得到的频谱图
2、傅立叶变换在其中起到了什么作用?
图像的频率是表征图像中灰度变化剧烈程度的指标,是灰度在平面空间上的梯度。灰度变化缓慢的区域,对应的频率值很低;灰度变化剧烈的区域,对应的频率值较高。傅立叶变换在实际中有非常明显的物理意义,设f是一个能量有限的模拟信号,则其傅立叶变换就表示f的谱。从纯粹的数学意义上看,傅立叶变换是将一个函数转换为一系列周期函数来处理的。从物理效果看,傅立叶变换是将图像从空间域转换到频率域,其逆变换是将图像从频率域转换到空间域。换句话说,傅立叶变换的物理意义是将图像的灰度分布函数变换为图像的频率分布函数,傅立叶逆变换是将图像的频率分布函数变换为灰度分布函数。
3、图片在频域的特征?
(1)图像经过二维傅立叶变换后,其变换系数矩阵表明:若变换矩阵Fn原点设在中心,其频谱能量集中分布在变换系数矩阵的中心附近(图中阴影区)。若所用的二维傅立叶变换矩阵Fn的原点设在左上角,那么图像信号能量将集中在系数矩阵的四个角上。这是由二维傅立叶变换本身性质决定的。同时也表明一股图像能量集中低频区域。
(2)变换之后的幅度谱图像在原点平移之前四角是低频,最亮,平移之后中间部分是低频,最亮,亮度大说明低频的能量大(幅角比较大)。
(3)通过观察傅立叶变换后的频谱图,我们可以看出图像的能量分布,如果频谱图中暗的点数更多,那么实际图像是比较柔和的(因为各点与邻域差异都不大,梯度相对较小),反之,如果频谱图中亮的点数多,那么实际图像一定是尖锐的,边界分明且边界两边像素差异较大的。对频谱移频到原点以后,可以看出图像的频率分布是以原点为圆心,对称分布的。
很高兴您能看到这里,文中提到的一些函数如果有不懂可以留言也可以在matlab支持(支持 - MATLAB & Simulink (mathworks.cn))里去查询。希望本文对您学习有所帮助!
【信号与系统】如何得到原始图片的频谱图?(Matlab)相关推荐
- 《信号与系统》连续时间系统零状态响应的 MATLAB 实现
3.5.1 连续时间系统零状态响应的 MATLAB 实现 参考书籍 <信号与系统> Matlab 库函数中的 **lsim()**能对微分方程描述的 LTI 连续时间系统的响应进行仿真. ...
- 《信号与系统》3.5.3卷积积分的 Matlab实现
3.5.3卷积积分的 Matlab实现 Matlab 的库函数 conv()只能计算离散序列 f1 与 f2 的卷积和,构造函数 conv() 实现两连续信号的卷积积分. Y=conv(x,h) 实现 ...
- 《信号与系统》解读 第5章 通信系统中的调制解调:频谱搬移、幅度调制、脉冲调制、频率调制、相位调制、频分复用、时分复用
本文将从时域与频域的角度解读"系统"通过正弦载波信号,对输入的时域基带信号,进行"调制"的过程,并输出调制后的时域混频信号. 解调是调制的反过程,"系 ...
- matlab+nnf.m,中南大学-信号与系统matlab实验报告.doc
中南大学-信号与系统matlab实验报告.doc 实验一 基本信号的生成 1 实验目的 学会 使用 MATLAB 产生各种常见的连续时间信号与离散时间信号: 通过 MATLAB 中的绘图工具对产生的信 ...
- MATLAB信号与系统
目录 1.基本信号的MATLAB表示 1.1.指数信号 1.2.指数序列 1.3.正弦型信号 1.4.抽样函数Sa(t) 1.5.矩形脉冲函数 1.6.三角波脉冲信号 1.7.单位采样序列 1.8.单 ...
- matlab中偶分量怎么表示,matlab信号与系统演示实验
现代教育技术 基于Matlab 的/信号与系统0实验演示系统 金 波 (长江大学电子信息学院,湖北荆州 434023) 摘 要:利用M atlab 的GU I 编程方法研制出/信号与系统0实验演示系统 ...
- 数字信号处理实验三用fft对信号作频谱分析_机器学习中的音频特征:理解Mel频谱图...
如果你像我一样,试着理解mel的光谱图并不是一件容易的事.你读了一篇文章,却被引出了另一篇,又一篇,又一篇,没完没了.我希望这篇简短的文章能澄清一些困惑,并从头解释mel的光谱图. 信号 信号是一定量 ...
- matlab计算信号得频谱,用MATLAB分析离散信号的频谱与信号的采样
<用MATLAB分析离散信号的频谱与信号的采样>由会员分享,可在线阅读,更多相关<用MATLAB分析离散信号的频谱与信号的采样(7页珍藏版)>请在人人文库网上搜索. 1.实验六 ...
- 大牛很通俗地介绍《信号与系统》
第一课 什么是卷积 卷积有什么用 什么是傅利叶变换 什么是拉普拉斯变换 引子 很多朋友和我一样,工科电子类专业,学了一堆信号方面的课,什么都没学懂,背了公式考了试,然后毕业了. 先说" ...
最新文章
- 闲着无聊去体验远程面试,最后竟然被录取了...
- Python基础-第二天
- UVA 536 TreeRocvery 树重建 (递归)
- HDU 4539郑厂长系列故事――排兵布阵(状压DP)
- 对于坐拥海量数据的金融企业来说,大数据治理意味着什么?
- 论文笔记:Integrating Classification and Association Rule Mining (即,CBA算法介绍)
- Ubuntu 14.04 hadoop单机安装
- JavaScript中对象成员的可见性
- 在nodejs中创建cluster
- axure 鼠标样式,Axure8-动态面板+简单鼠标事件实现单页面应用
- urllib2.URLError: urlopen error [Errno 111] Connection refused
- IIC软件模拟-读写EEPROM
- 关于计算机网络与应用的相关片,网络技术与应用作业.doc
- matlab课堂笔记,厦门大学matlab第四次课程笔记 PTB的简单讲解
- mysql的架构及查询sql的执行流程(一)
- Unix操作系统的原理、优点与缺点
- win10系统驱动备份及还原-命令行操作
- 职称计算机个人档案号查询,干部人事档案编号在线查询
- VGA , CVBS , HDMI 三者的区别
- 使用7段数码管实现0到99数码管显示(循环嵌套)