基于matlab的图像分析Word格式文档下载.docx
《基于matlab的图像分析Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《基于matlab的图像分析Word格式文档下载.docx(25页珍藏版)》请在冰豆网上搜索。
参考文献13
附录Ⅰ14
附录Ⅱ18
1引言
MATLAB是矩阵实验室(MatrixLaboratory)的简称,是美国MathWorks公司出品的商数学软件,用于算法开发、数据可视化、数据分析以及数值计算的高级技术计算语言和交互式环境,主要包括MATLAB和Simulink两大部分。
MATLAB的应用范围非常广,包括信号和图像处理、通讯、控制系统设计、测试和测量、财务建模和分析以及计算生物学等众多应用领域。
附加的工具箱(单独提供的专用MATLAB函数集)扩展了MATLAB环境,以解决这些应用领域内特定类型的问题。
它以矩阵运算为基础,把计算、可视化、程序设计融合在一个简单易用的交互式工作环境中,是一款数据分析和处理功能都非常强大的工程适用软件。
它可以将声音文件变换为离散的数据文件,然后利用其强大的矩阵运算能力处理数据,如数据滤波、傅立叶变换、时域和频域分析、声音回放以及各种图的呈现等,它的信号处理与分析工具箱位语音信号分析提供了十分丰富的功能函数,利用这些功能函数可以快捷而又方便的完成语音信号的处理和分析以及信号的可视化。
数字信号处理是MATLAB重要应用的领域之一。
对于有限长序列x(n),若要求其N点的傅里叶变换(DFT)需要经过
次复数乘法运算和N*(N-1)次复数加法运算。
随着N的增加,运算量将急剧增加,而在实际问题中,N往往是较大的,如当N=1024时,完成复数乘法和复数加法的次数分别为百万以上,无论是用通用计算机还是用DSP芯片,都需要消耗大量的时间和机器内存,不能满足实时的要求。
因此,DFT的这种运算只能进行理论上的计算,不适合对实时处理要求高的场合。
因此,研究作为DSP的快速算法的FFT是相当必要的,快速傅里叶变换(FFT)是为提高DFT运算速度而采用的一种算法,快速算法的种类很多,而且目前仍在改进和提高,它是根据离散傅里叶变换的奇、偶、虚、实等特性,对离散傅立叶变换的算法进行改进获得的。
基于本学期所学的DIT-FFT的运算规律和编程思想以及Matlab的学习和使用,本课设要求在Matlab环境下编写基2DIT-FFT算法实现对离散信号的快速傅里叶变换,再与Matlab软件自带的FFT函数实现对离散信号的傅里叶变换进行比较,如果得到的频谱相同,那么我们编写的程序就是正确的。
本次课程设计是实现对选定图片进行FFT计算、还原(IFFT计算),并与系统FFT函数做对比,进行分析。
如果有能力可以选做系统人机对话界面。
用GUI界面完成人机交互方便使用的。
本课程设计主要是对数字信号的分析。
2基于MATLAB的FFT算法实现
2.1系统总体流程图
本设计要求找到一张明暗对比较大的图片;
在Matlab环境下编写基FFT算法;
利用自己编写的算法对已选择的图片信号进行计算,并显示出计算的结果,将计算的结果与Matlab数字信号处理工具箱中自带的fft函数进行对比研究,验证自编算法的正确性。
系统的总体设计流程图如图2-1所示:
图2-1系统的总体设计流程图
2.2FFT运算规律及编程思想
2.2.1图像信号的采集
图像信号最好采用明暗对比比较大的灰度图像进行分析,这样实验结果对比比较明显。
在Matlab中用语句:
[filename,pathname]=uigetfile({'
*.jpg;
*.tif;
*.bmp;
*.gif'
},'
FileSelector'
);
image=imread(strcat(pathname,filename));
用于读取图片的信号,Matlab图像分析支持多种格式的图像信号,用上述语句时,在Matlab中分析图像的时候可以系统自动检索所需分析的图片。
语句:
image=rgb2gray(image);
可以对图像进行灰度处理。
当我们要将图片显示出来的的时候只需要用语句:
imshow(image);
本次课程设计就是分析灰度图像。
通过用两种不同的方法对灰度图像的FFT计算和IFFT计算,来得到我们想要的结果。
采集到图像信号之后,就可以对图像信号进行分析和计算了。
2.2.2DIT-FFT算法的基本原理
快速傅里叶变换(FFT)是为提高DFT运算速度而采用的一种算法。
对一个有限长度序列x(n)的N点的DFT为:
所以,要求N点的DFT,需要N2次的复数乘法运算,N*(N-1)次复数乘法运算算。
随着N的增加,运算量将急剧增加,而在实际问题中,N往往是较大的,如当N=1024时,完成复数乘法和复数加法的次数分别为百万以上,无论是用通用计算机还是用DSP芯片,都需要消耗大量的时间,不能满足实时的要求,,不适合于对实时处理要求高的场合。
为了能实时处理DFT,要想减少DFT的运算量可以有两个途径:
第一是降N,N的值减小了,运算量就减少了;
第二是利用旋转因子的周期性,对称性和可约性。
利用这两个途径实现DFT的快速傅里叶变换(FFT),FFT算法基本上可分为按时间抽取的FFT算法(DIT-FFT)和按频率抽取的FFT算法(DIF-FFT)。
旋转因子的性质:
(1)周期性
(2)共轭对称性
(3)可约性
本次课设要求用用基2的按时间抽取的FFT算法(DIT-FFT)实现FFT功能,设序列x(n)的长度为N,且N满足N=2M,M为正整数。
若N不能满足上述关系,可以将序列x(n)补零实现。
按时间抽取基2-FFT算法的基本思路是将N点序列按时间下标的奇偶分为两个N/2点序列,计算这两个N/2点序列的N/2点DFT,计算量可减小约一半;
每一个N/2点序列按照同样的划分原则,可以划分为两个N/4点序列,最后,将原序列划分为多个2点序列,将计算量大大降低。
按时间下标的奇偶将N点x(n)分别抽取组成两个N/2点序列,分别记为x1(n)和x2(n),将x(n)的DFT转化为x1(n)和x2(n)的DFT的计算。
利用旋转因子的可约性,即:
用蝶形运算可表示为如图2-2所示:
以此类推,还可以把x1(n)和x2(n)按n值得奇偶分为两个序列,这样就达到了降N得目的,从而减少了运算量。
FFT对DFT的数学运算量改进:
直接采用DFT进行计算,运算量为N2次复数乘法和N*(N-1)次复数乘法。
当采用M次FFT时,由N=2M求得M=logN,运算流图有M级蝶形,每一级都由N/2个蝶形运算构成,这样每一级蝶形运算都需要N/2次复数乘法和N次复数加法。
M级运算共需要复数乘法次数为C=N/2*M,复数加法次数为C=N*M。
当N值较大时,FFT减少运算量的特点表现的越明显。
2.2.3FFT算法的运算规律及编程思想
为了编写DIT-FFT算法的运算程序,首先要分析其运算规律,总结编程思想并绘出程序框图。
1.原位计算
对
点的FFT共进行M级运算,每级由N/2个蝶形运算组成。
在同一级中,每个蝶的输入数据只对本蝶有用,且输出节点与输入节点在同一水平线上,这就意味着每算完一个蝶后,所得数据可立即存入原输入数据所占用的数组元素(存储单元),这种原位(址)计算的方法可节省大量内存。
2.蝶形运算
实现FFT运算的核心是蝶形运算,找出蝶形运算的规律是编程的基础。
蝶形运算是分级进行的;
每级的蝶形运算可以按旋转因子的指数大小排序进行;
如果指数大小一样则可从上往下依次蝶算。
点的FFT共有M级运算,用L表示从左到右的运算级数(L=1,2,…,M)。
第L级共有
个不同指数的旋转因子,用R表示这些不同指数旋转因子从上到下的顺序(R=0,1,…,B-1)。
第R个旋转因子的指数
,旋转因子指数为P的第一个蝶的第一节点标号k从R开始,由于本级中旋转因子指数相同的蝶共有
个,且这些蝶的相邻间距为
,故旋转因子指数为P的最后一个蝶的第一节点标号k为:
,本级中各蝶的第二个节点与第一个节点都相距B点。
应用原位计算,蝶形运算可表示成如下形式:
(J)=
(J)+
(J+B)*
(J+B)=
(J)-
总结上述运算规律,可采用如下运算方法进行DIT-FFT运算。
首先读入数据,根据数据长度确定运算级数M,运算总点数
,不足补0处理。
然后对读入数据进行数据倒序操作。
数据倒序后从第1级开始逐级进行,共进行M级运算。
在进行第L级运算时,先算出该级不同旋转因子的个数
(也是该级中各个蝶形运算两输入数据的间距),再从R=0开始按序计算,直到R=B-1结束。
每个R对应的旋转因子指数
,旋转因子指数相同的蝶从上往下依次逐个运算,各个蝶的第一节点标号k都是从R开始,以
为步长,到
(可简取极值N-2)结束。
考虑到蝶形运算有两个输出,且都要用到本级的两个输入数据,故第一个输出计算完毕后,输出数据不能立即存入输入地址,要等到第二个输出计算调用输入数据完毕后才能覆盖。
这样数据倒序后的运算可用三重循环程序实现。
整个蝶形运算流程图如图2-3所示:
3Matlab程序实现
3.1程序运行结果
用图片cj.jpg作为例子,运行调试程序。
图片cj.jpg如图3-1所示:
图3-1原图像
程序运行开始的时候可以先建立一个M_file。
生成M_file方法为:
File->
New->
M-File,或者单击Matlab主界面的空白文档。
如图3-2所示:
图3-2生成M文件
将自行编写的程序写到文件中,然后保存,运行,程序执行之后会自动查询所要处理的图片。
程序开始时要输入的窗口如图3-2所示:
图3-2开始输入程序的界面
将已经编号的程序写到图3-2所示的窗口中保存之后就可以运行了。
用自建的FFT和IFFT运行的结果如图3-3所示:
图3-3程序的运行结果
3.2对比结果分析
如图3-3可以看出自编的FFT算法和系统自带的FFT算法运行结果有所不同,具体体现在三个方面。
一是:
自建的FFT处理后的图片的大小发生了变化,宽度和内置的FFT处理后的结果相同;
高度变小了。
二是:
图像的亮度发生了变化,自建的FFT处理后的图片的亮度比系统自带的FFT处理后的图像的亮度高。
三是:
程序的运行时间不同。
自建的FFT算法运行的时间比系统自带的FFT算法运行的时间要长。
但是不论何种算法实现FFT,它们的进行IFFT后得出的结果相同,和原图片一样。
4系统人机对话界面
4.1GUI简介
图形用户界面(GUI),是一种提供人机交互的工具和方法。
GUI是包含图形对象,如窗口、图标、菜单和文本等图文并茂的用户界面。
4.2界面设计
用MATLAB图形用户界面开发环境设计GUI点的一般步骤是:
1.进行界面设计。
2.设计控件属性。
3.进行M语言编程。
以本设计要求为例介绍。
第一步,该选择本图形用户界面需要的控件:
七个推按钮(Pushbutton),其中六个用来运行所要显示的图片,第七个用来退出程序。
六个轴对象(axes)用来显示原图像,两种不同FFT处理后的图片以及进行IFFT后的图像。
完成人机设计界面如图4-1所示:
图4-1人机界面设计图
第二步,设置控件属性:
双击组件可以设置文本框,推按钮的属性,如显示大小,名称和默认值等。
第三步,