毕业设计数字图像处理系统的研制_第1页
毕业设计数字图像处理系统的研制_第2页
毕业设计数字图像处理系统的研制_第3页
毕业设计数字图像处理系统的研制_第4页
毕业设计数字图像处理系统的研制_第5页
已阅读5页,还剩24页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、第一章 绪论前言在社会生产和科研活动中,人们要频繁地接触图片、图画、书报、医学x光片和卫星遥感图像等。图像是人们认识客观世界的重要知识来源,它包含着最原始的巨大信息,人类对这些信息的感受是本能的。视觉是人类感知外部世界的最主要和最直接的途径,科学研究也表明人类所获得的外界信息有70%是通过人的视觉系统,也就是通过图像获得。数字图像处理是指采用计算机处理图像的技术,第一次使用是20世纪60年代美国航空和太空总署(nbsa)的喷气推进实验室使用计算机对太空船发回的大批月球图片进行处理。随着计算机技术的发展。数字图像处理得到了广泛的应用,形成了自己的技术特色和完善的学科体系。本论文的主要内容是在ma

2、tlab环境下调用其函数实现数字图像处理,并通过vc+6.0调用matlab的引擎函数,实现了基本的数字图像处理的功能。在研究的过程中,也进一步了解matlab的功能,并且进一步进行了创新思维,重点在设计界面上和程序的优化上做出了一番努力,完成了gui这样友好化的界面。1.1研究概况matlab (matrix laboratory)是由美国mathworks公司推出的用于数值计算和图形处理的科学计算环境,它集中了日常数学处理中的各种功能,包括高效的数值计算、矩阵运算、信号处理和图形数学处理的各种功能。是集数值计算、图形管理、程序开发为一体的环境。在matlab环境下,用户可以集成地进行程序设

3、计、数值计算、图形绘制、输入输出、文件管理等各项操作。matlab提供了一个人机交互的数学系统环境,该系统的数据结构是矩阵,与利用c语言做数值计算的程序设计相比,利用matlab可以节省大量的编程时间。本次课题主要任务是数字图像处理系统的研制基于matlab数字图像分析、图像增强的设计。利用matlab图像处理工具箱提供的数字图像处理函数,实现对已有的图像进行处理。并通过matlab的api(application programming interface 应用编程接口)实现与vc+的接口应用。1. 2课题特色与发展前景1.2.1课题特色与创新之处1. gui(graphical user

4、interfaces)数字图像处理个性化界面2. 操作过程中集合各种控制与显示技术3. 实现vc+环境下调用matlab引擎函数进行数字图像处理4. 实现视频剪辑播放 (总时间大约8分钟)1.2.2发展前景matlab是近几年来国内外流行的一种用于数值计算及可视化图形处理的工程语言,其语法结构简单,并具有极强的数值计算、图形处理、数据分析、信号处理和仿真等诸多强大功能,集成在gui计算环境之中,因而备受广大工程科研人员和非计算机专业的编程人员的青睐。相信其发展前景应该是非常有价值。正是由于matlab的各种优势和特点,在国外的高等院校里,matlab已经成为大学生、硕士生、博士生必须掌握的基本

5、技能。在设计研究单位和工业部门,matlab已经成为研究和解决各种具体工程问题的一种标准软件。第二章 matlab数字图像处理基本概念2.1数字图像处理学2.1.1数字图像处理的内容数字图像处理工程大体上分为以下几个方面:图像信息获取、图像信息存、图像信息的传送、数字图像处理、图像输出和显示。1) 图像信息获取主要把一幅图像转换成适合输入计算机和数字设备的数字信号,主要包括摄取图像、光电转换及数字化。2) 图像信息存储图像信息的特点就是信息量大,一般作为档案存储主要采用光盘等。为了解决海量存储问题主要研究数据压缩、图像格式及图像数据库技术等。3) 图像信息传送主要分为系统内部传送和远距离传送。

6、4) 数字图像处理数字图像多采用计算机处理,主要包括:几何处理(geometrical image processing)、算术处理(arithmetic processing)、图像增强(image enhancement)图像复原(image restoration)、图像重建(image reconstruction)、图像编码(image encoding)、图像识别(image recognition)、图像理(image understanding)5) 图像输出和显示图像显示的最终目的是为人和机器提供一副更便于解释和识别的图像。因此,图像输出也是图像处理的重要内容之一。2.1.2

7、数字图像处理方法数字图像处理方法大致可以分为两类,即空域法和变换域法。1)空域法这种方法是把图像看作平面中各个像素组成的集合,然后直接对二维函数进行相应处理。空域处理法主要有下面两大类。邻域处理法其中包括剃度运算(gradient algorithm)、拉普拉斯算子(laplacian operator)、平滑算子运算(smoothing operator)和卷积运算(convolution algorithm)。点处理法其中包括灰度处理(gray processing)、面积、周长、体积、重心运算等等。2)变换域法这种方法首先对图像进行正交变换(如傅立叶变换等),得到变换系数阵列,然后对变换

8、后的图像在频域中进行各种再处理(往往相对于空间域内更方便、更快捷),然后把处理结果逆变换到空间域,从而得到处理后的目标图像。2.2 matlab图形对象matlab的图形系统是面向对象的,也就是说图形输出。一般用户不必去关心这些高级matlab命令包含的对象。然而有时需要绘制更精确、更生动、更个性化的图形,matlab图形系统也提供了一些低层图形函数。在matlab中,专门给由这些低层函数绘图函数生成的对象一个名称,叫句柄图形对象(handle graphics objects),对象每一个实例(instance)都有一个唯一的标识符,即句柄。不同对象的句柄不能重复和混淆。他们之间的关系可如下

9、:图2.2句柄图形对象结构树只有弄清楚了各个图形对象的句柄所对应函数关系才能调用matlab数字图像处理函数,否则,再简单的函数,也不能调用正确。本论文中matlab源程序中handles.text就是一个比较典型的示例,找好图形对象的句柄就如同抓住了它的操纵杆一样,随你控制,任你控制个性化界面。2.3图像分析 图像分析是为了有效地研究和分析图像,往往需要对给定的图像及已分割的图像区域用更为简单明确的数值、符号或图形来表示。这些数值、符号或图形是按一定的概念和公式从原图像中提取出来的,它们反映原图像的重要信息及原图像的主要特征。2.3.1图像直方图图像的直方图是图像的重要统计特征,它可以认为是

10、图像灰度密度函数的近似。按照随机过程理论,图像还可以看作是一个随机场,因此具有相应的统计特征,其中最重要的特征是灰度密度函数。通常图像的灰度密度函数与像素所在的位置有关,图像灰度统计直方图是一个一维离散函数:p(s)= k=0,1,.l-1 式中,s是图像f(x,y)的第k级灰度值;是f(x,y)中具有灰度值s的像素的个数;n是图像中像素的总数。由定义可知,p(s)给出了对s出现概率的一个估计,所以直方图表明了图像灰度值的分布情况。因此,可通过改变直方图的形状来达到增强图像对比度的效果。以概率论为基础,常用的是直方图的均衡化。一般来讲,偏暗的图像灰度范围很窄,它的像素较多,因此灰度值低,主要集

11、中在低灰度区间上,其在高灰度区间幅度较小或为0,一般偏左;偏亮的图像灰度范围主要集中在高灰度级上,偏坐标的右边;灰蒙蒙的图像同样是因为灰度范围窄,动态范围小,主要集中在中间灰度级上;正常的图像动态范围大,在各个灰度级上都有像素,从而使图像看起来对比度较大,细节清晰。通常一幅均匀量化的自然图像的灰度直方图在低灰度区间上频率较大,这样的图像较暗区域中的细节常常看不清楚,为使图像变清晰,通常可以通过变换是图像的灰度动态范围变大,并且让灰度频率较小的灰度级经变换后,其频率变得大一些,使变换后的图像灰度直方图在较大的动态范围内趋于均化。事实证明,通过图像直方图修改进行图像增强,并分析图像是一种有效的方法

12、。matlab图像处理工具箱提供了imhist函数来计算和显示图像的直方图imhist(i,n)。2.3.2直方图均衡化直方图均衡有时也称灰度均衡,基本思想是把原来的图像的直方图变换成均匀分布的形式,具体操作是:通过点运算使输入图像转换为在每一灰度级上都有相同的像素点数的输出图像。即让灰度直方图在较大的动态范围内趋于一致,这样就增加了像素灰度值的动态范围,从而达到了增强图像整体对比度的效果。matlab图像处理工具箱提供了histeq函数用于直方图均衡化。2.4 图像增强图像增强(image enhancement)是数字图像处理过程中经常采用的一种方法,指按照特定的需要突出一幅图像中的某些信

13、息,同时,削弱或去除某些不需要的信息的处理方法,其主要目的是处理图像对某些特定的应用比原来的图像更加有效。获取和传输图像的过程往往会发生图像失真,所得到图像和原始图像有某种程度的差别。如果差别太大,就会影响对图像的理解。在许多情况下,人们不清楚引起图像降质的具体物理过程及其数学模型,但却能根据经验估计出使图像降质的一些可能原因,从而有针对性的改善图像的质量。例如,采用增强对比度的方法可以使图像更清晰;运用平滑技术可以消除噪声;还可以使用微分运算突出边界或其他部分可使变糊涂的信号增强。所有这些都使用了图像增强技术。数字图像增强技术主要包括直方图处理、图像平滑处理、图像锐化处理和彩色处理技术等。在

14、实际应用中,常常联合几中方法处理,以便达到预期的增强效果。技术上,图像增强技术基本分两大类:一类是空域处理法、一类是频域处理法。频域处理法的理论基础是卷积定理。它采用修改图像傅立叶变换的方法实现对图像的增强处理。空域处理法是直接对图像中的像素进行处理,基本上是以灰度映射变换为基础的。所用的映射变换取决于增强的目的。2.4.1空域滤波增强1、基本原理空域滤波器工作原理可借助频域进行分析。它们的基本特点都是让图像在傅立叶空间的某个范围的分量受到抑制,而让其他分量不受影响,从而改变输出图像的频率分布,达到增强的目的。使用的空域模板进行的图像处理,被称为空域滤波。模板本身被称为空域滤波器。按空域滤波处

15、理效果来分类,可分为平滑滤波器和锐化滤波器。2、平滑滤波器平滑的目的在于消除混杂图像干扰,改善图像质量,强化图像表现特征。它分为线性和非线性平滑滤波器。 线性平滑滤波器线性低通滤波器是最常用的线性平滑滤波器。这种滤波器的所有系数都是正的。当所用的平滑模板是尺寸增大时,消除噪声的效果增强,但同时所得的图像也变得更模糊,细节的锐化程度逐渐减弱。本软件中所采用的维纳滤波器功能,是典型的线性降噪滤波器,它是一种自适应滤波,它能根据图像的局部方差调整滤波器的输出。局部方差越大,滤波器的平滑作用越强。它的最终目标是使恢复图像f*(x,y)与原始图像f(x,y)的均方误差 最小。matlab 中调用j=wi

16、ener2(i,m,n,noise)函数,详见附录源程序。 非线性平滑滤波器本软件中使用的中值滤波器是最常用的非线性平滑滤波器,其基本原理是把数字图像或数学序列中的一点的值用该点的一个邻域中各点值的中值代换。它是一种邻域运算,类似于卷积,但计算的不是加权求和,而是把邻域中的像素按灰度级进行排序,然后选择该组的中间值作为输出像素值。中值滤波器的主要功能就是让周围像素灰度值的差比较大的像素改取与周围的像素值接近的值,从而可以消除孤立的噪声点。它在衰减噪声的同时不会使图像边界模糊,这是中值滤波器受欢迎的主要原因。matlab中调用b=medfilt2(a,m,n)来实现,详见附录源程序。3、锐化滤波

17、器锐化的目的在于增强图像边缘以便对图像进行识别和处理。常分为线性锐化滤波器和非线性锐化滤波器。 线性锐化滤波器线性高通滤波器是最常用的线性锐化滤波器。这种滤波器的中心系数都是正的,而周围的系数都是负的(如果中心和周围正负交换,则产生边缘锐化的效果),所有的系数之和为0。常用是有拉普拉算子运算h=fspecial(laplacian),本软件中没有应用这种滤波器。 非线性锐化滤波器邻域平均可以模糊图像,因为平均对应积分,所以利用微分可以实现锐化图像。图像处理中最常用的微分方法是利用梯度。对一个二维函数f(x,y),其剃度是一个矢量(需要用两个模板沿x和y方向计算),即 其模(以2为模,对应欧氏距

18、离)为 上述这些组合的方法本身都是非线性的。常用的空域微分算子有sobel算子、prewitt算子、log等。本图像处理中,正是应用了这些算子。在matlab中,调用函数为:h1=fspecial(sobel);h2=fspecial(prewitt),h3=fspecial(log).2.4.2 频域滤波增强常用的频域增强方法有低通滤波器和高通滤波器。1、低通滤波器图像的能量大部分集中在幅度谱的低频和中频部分,而图像的边缘和噪声对应于高频部分。因此能降低高频成分幅度的滤波器就能减弱噪声的影响。本论文采用butterworth低通滤波器实现图像处理。它是一种物理上可以实现的低通滤波器,n阶截断

19、频率为d0的butterworth低通滤波器转移函数为2、高通滤波器高通滤波器也称高频滤波,它的频值在0频率处为单位1,随着频率的增加,传递函数的值逐渐增加;当频率增加到一定的值之后,传递函数的值又回到0值或者降低到某个大于1的值。在前一种情况下,高频增强滤波器实际上是一种带通滤波器,只不过规定0频率处的增益为单位1。n 阶截断频率d0的butterworth高通滤波器的转移函数为本gui界面中图像处理是采用butterworth高通滤波器。但一般经过滤波后图像比较昏暗,很多细节看不清,这是因为图像大部分能量集中在低频区域,而高通滤波使得图中各区域的边界得到较明显增强的同时滤掉了低频分量,使得

20、图中原来比较平滑的区域内部的灰度动态范围被压缩,因而整幅图比较昏暗。第三章 基于matlab的gui界面开发设计图形用户界面(graphical user interfaces)在matlab程序开发中起着举足轻重的作用。一个好的界面不仅有利于用户快速掌握程序的操作流程,有效地使用程序,也有利于开发者展示matlab平台下的开发技术。gui在科研实践和工程实践中有着广泛的应用,尤其是在图像处理技术、人工智能技术等方面。用户也许对此深有体会;在matlab的演示示例中,每一个实例都是gui成功应用的例子。一个栩栩如生的demo实例逐步引导用户了解、熟悉matlab的使用。既然gui在matlab

21、中有如此神秘的奥秘,那么,怎么样创建gui?什么样的gui才是比较成功的?一个成功的gui必须建立在精巧的设计之上。本论文接下来介绍开发环境、开发流程、以及实现过程。侧重分析gui设计时开发者必须遵循的设计原则以及回调函数的编写。相信只要遵循这些原则,你也会成为一名编程高手,你所开发的界面也会很容易为用户所接受。3.1 guide开发环境的介绍既然能够用matlab求解数学问题,当然也可以用matlab把图形用户界面画出来。首先必须要了解matlab中的guide。对于第一次使用guide,只要在matlab命令行中输入guide及出现开发界面,而对于已经存在的界面,需要再次修改时,需要gui

22、de+文件名。guide实际上是一套matlab工具集,它由五个部分组成:属性编辑器(property editor)、控制面板(control panel)、回调函数(callback function)、调整工具(adjust tools)和菜单编辑器(menu edit)。图3.1 guide环境有了这些工具,就可以设计一个漂亮的gui。当然,这只是问题的第一步。一旦有了界面,后面的工作便是通过guide的回调函数编辑器编写相应的函数代码,来响应用户界面的操作。3.2 gui设计原则根据要求不同,设计出来的界面也就千差万别。但是,自从人们开始设计图形界面以来,界面设计的标准是不变的。简单

23、来说,一个好的界面应该遵循以下三个原则:简单性(simplicity)、一致性(consistency)、熟悉性(familiarity)。 简单性简洁明了是图形用户界面设计的最主要的目标。一个简洁的gui看起来清晰明了,给人一种完整和谐的感觉。其实,在构建gui时,要为它添加各种功能是很简单的,但是如果添加的功能不是真正必须的,就应当除掉。尽量避免屏幕一团混乱,所设计的gui只要能完成任务即可。 一致性所谓一致性有两层含义:一是,读者自己开发的界面风格要尽量一致;二是,新设计的界面要与其他已有的界面风格不要截然相反。 熟悉性设计的界面应尽量使用人们熟悉的标志和符号。比如vc的对话框风格、视图

24、风格、matlab的figure风格。这样用户操作起来就容易上手,误操作率比较低。除了这些还要注意界面的动态性能,响应时间要迅速等。总之,用户应该是设计者心中的上帝。3.3 开发流程设计包括编写代码之前的所有工作。设计者必须重视设计工作,不要急于编写代码。否则,编程员思路不清晰,开发过程中会走很多弯路,因而开发效率低下,并且设计出的gui也不一定让人满意。成功的设计必须从两个角度予以探讨:一方面设计gui的指导原则,另一方面介绍设计过程中应遵循的步骤。设计既然遵循了这样一个比较好的设计原则,如果再有一个比较清晰的思路,设计起来可谓如鱼得水。首先,进行需求分析,了解要实现的功能,以及软件所能为用

25、户提供的哪些功能,以一种高屋建瓴的姿势对软件有个整体的把握,初步绘制界面布局。其次,完成各个分模块的设计,包括怎么样放置,采用什么样的操作方法,这一点本人在设计过程中均做了大量的策划和实践。最后,测试相关软件代码,完成整体设计,把各个分模块之间进行软件的衔接,修改语法错误,最大限度的确保软件的可操作性。设计流程如下图 3.3设计流程图3.4 dbj1.fig总体方案的设计从工程的角度而言,对于软件开发,先创建一个良好合适的系统构架对于保障开发的可行性、开发成本和软件质量都是至关重要的。关键就是合理布局,使用灵活,操作方便的人机交互环境,其次才是软件各功能模块的实现。因此,根据设计流程设计步骤如

26、下:,3.4.1 设计要求(1) 利用matlab图像处理工具箱实现图像分析功能,包括查看直方图、傅立叶谱等。(2) 利用matlab图像处理工具箱实现图像图像增强功能,包括直方图均衡化、平滑滤波降噪、图像锐化。(3) 设计gui界面3.4.2 布局设计结合gui设计的原则以及开发流程,初步方案设计布局如下图所示:本软件操作界面采用两个坐标窗口显示,左边的是调出图像显示,右边为经过相关处理之后的图像,实现相关的操作均在窗口下边进行。对于一些图片,有可能不同的用户需要不同的功能,因此,为满足用户的要求,特设计弹出式的菜单。经过放大,剪切、滤波、锐化、添加色彩等图像均能实现保存,供用户工程研究需要

27、。由于软件编程水平有限,因此,某些方面还不够完善,在以后的实践中,会不断改进和提高。3.4.3功能实现本软件标题栏中file包含有open、load、save、print、exit等菜单,部分菜单还设置快捷键。edit中有cut、rotate、clear用于清除变量,其中rotate分别设置60,98,170度等参数。opinion中色彩控制设置了坐标颜色和色图,选择缺省颜色中的选项将改变图像显示坐标的背景,色图将是对当前图像的色图做循环旋转变化,可以循环设置时间spinmap(t);figurecolor主要是对界面整体进行着色,选择不同的颜色将会改变窗口的颜色。window设有三维,二维视

28、角,还有网格显示,坐标框的显示,图像放大设置等。help中设置了常用的帮助对话栏。除此之外,本软件图像处理的方法之多,主要就是采用弹出式菜单,既节约空间布局又能达到处理的效果,用户也能随时查看demo中的演示示例。还创建了一些对话框,比如,为了防止用户误关闭,在用户关闭时会提醒用户是不是确定退出。设计的提示性对话框,当操作出现错误或者不知所措时,系统也会弹出提示消息。总之,在做好软件的基础之上,进一步的完善了软件的功能。当然,软件中也不可能实现所有的功能,只能是实现部分典型的功能,要使软件功能更强大,还有待日臻完善。 图1. cut后的图 图2. 均衡化后的直方图 图3. 锐化后的图形 图4.

29、 图形的直方图3.5 gui总体实现实现gui设计需要在编写代码之前做相当大的设计工作,设计时必须重视界面整体的设计工作,不要急于编写代码。否则,编程思路不清晰,开发过程中会走很多弯路,导致开发效率低下,而且设计出的gui也不一定让人满意。成功的设计必须从两个角度予以探讨:设计阶段和实现阶段。一个好的设计是成功的一半,设计是第一步。而且现在的工程大都重视开发文档的建立,创造性的劳动是在设计阶段进行的,开发文档便是对这些思想的记录,因此设计千万不要忽视设计阶段。本论文所设计的数字图像处理系统正体现了这样的思想,通过本次的开发实践过程,总结以下几点:第一、找好相关句柄,找准句柄,然后根据你要实现的

30、功能加以编程控制,如本程序中,set(handles.text,visible,off)等程序。第二、回调函数是关键,回调函数的完整性决定着程序运行的好坏,比如说:本软件在选择高斯噪声系数时,开始出现选一个参数,但再选另一个参数,就不能实现排斥的作用,后来结合张志涌的精通matlab 6.5版当中的程序设计,对回调函数进行了添加和改进,通过设定函数执行选择时的on和off,最终解决了这个问题。良好的操作界面,最终离不开对程序的精心优化。第三、具有良好的界面风格,所设计的界面最终都需要交给别人看,如果只有良好的程序,却没有新颖的界面风格,这样的工作是不彻底的,所以,在完成好底层设计之后,还不要忘

31、记外观的完美设计。综上所述,人人都能成为编程高手,人人都能开发出独特的软件界面。本论文在做好小小的模块的基础之上,经过编程的控制,最终实现整个gui界面。图5. gui界面布局图设计主界面图5.1功能说明图第四章 visual c+ 与matlab接口matlab强大的科学计算与可视化功能,简单易用的开放式可扩展环境以及多达30多个面向不同领域的工具箱(toolbox)支持,使得matlab在许多科学领域中成为计算机辅助设计与分析、算法研究和应用开发的基本工具和首选平台。但是由于其编译器采用伪编译方式,在matlab中编写的程序无法脱离其工作环境而独立运行。针对这个问题,mathworks公司

32、为matlab提供了应用程序接口,允许matlab和其他应用程序进行数据交换,并且提供了c/c+数学和图形函数库,为在其他程序设计语言中调用matlab的高效算法提供了可能。首先,visual c+与matlab之间有3种接口方法,即:1) 在visual c+程序中利用matlab engine调用matlab函数;2) 将matlab程序编译成mex文件;3) 在visual c+程序中利用matlab c+数学库调用matlab函数。其中,通过方式1,2生成的程序只有在安装了matlab系统上才能运行。而由方式3生成的程序则没有这样的要求,它能够以独立执行程序的形式运行,即使在客户没有安

33、装matlab系统下也能运行。方式3唯一的缺点就是不能利用matlab中丰富的图形句柄处理函数,但是对于visual c+等开发工具而言,这不是一个很严重的问题。因此方式3是实现功能和效率兼顾的最好接口方法。本论文着重解决visual c+调用matlab引擎函数。4.1 matlab引擎技术介绍4.1.1 matlab引擎概念和应用 matlab计算引擎应用程序的思想和matlab的mex文件相反,mex文件是在matlab环境下调用c或者fortran语言程序的手段,而matlab计算引擎则是在c或者fortran语言环境下调用matlab函数的方法。 matlab的计算引擎应用实际就是利

34、用matlab提供的一组应用接口函数(api)在用户开发的c语言或者fortran语言应用程序中,通过某种通信机制后台调用matlab应用程序以完成复杂的系统任务。计算引擎应用程序是在matlab环境之外的可执行应用程序,在它们运行的进程中需要利用某种通信机制和另外一个matlab进程(会话)交互数据。在不同系统平台上,应用程序使用的通信体制是不一样的,在windows平台中,这种通信体制是利用com应用接口iengine来完成。图4.1.1表示了计算引擎在windows系统中的情况 com客户端 计算引擎服务器 matlab客户端应用程序如:c语言iengine接口图4.1.1windows

35、平台上的计算引擎应用程序在windows平台上,用户开发的c语言应用程序作为com应用的客户端,是整个应用程序的前端,而matlab作为com应用的服务器运行在后台。两者利用matlab提供的计算引擎接口函数进行交互,例如在客户端从matlab进程中能够获取数据,或者在客户端调用matlab的指令等。在c语言内中使用matlab计算引擎应用集成matlab的算法与其它的集成方法比较,计算引擎应用程序有如下优势:1、调用matlab数学函数完成繁重的数学计算,例如对一个矩阵进行转置或者计算快速傅立叶变换,充分发挥matlab在数值计算上的强大优势,通过c语言编写的gui来调用后台的matlab数

36、学计算功能,仅仅几行语句就可以完成任务,提高了效率,从而节约了开发时间。2、避免将庞大的matlab函数库链接到客户应用程序中,利用matlab compiler打包的函数库时,需要将matlab的数学库或者图形库都连接到客户应用程序中,这样的操作会使客户应用程序变得庞大,而matlab计算引擎函数库仅仅采用十几个函数就可以完成这些复杂的操作了。3、不是所以的matlab函数都可以使用matlab compiler或者com builder打包成为函数库或者com组件,而使用matlab计算引擎则没有此类限制,引擎提供matlab功能支持是最全面的,它可以完成任何计算和绘图操作,对所有的数据结

37、构提供完全支持。相比之下,matlab计算引擎也有缺点,matlab计算引擎不能脱离matlab环境使用,运行matlab计算引擎应用程序的windows平台上必须安装有matlab,否则计算引擎程序无法使用,因此matlab计算引擎不是一种真正脱离matlab的独立可执行应用程序,而利用其它的集成方法是可以开发出真正脱离matlab环境的应用程序的。4.1.2 引擎函数的编写matlab计算引擎应用是用c语言编的可执行应用程序,它不能使用在mex函数文件中,为了方便开发计算引擎应用程序,matlab提供了相应的接口函数eng函数,这些函数都是以eng前缀开始的,这些eng函数将辅助程序完成启

38、动计算引擎、获取matlab的计算结果等工作。(1)调用matlab引擎的源程序的一般结构#include “stdafx.h” /预编译头文件#include “engine.h” /定义matlab引擎应用中所必需的数据类型、宏、函数等#include /用于标准i/o程序定义和申明的头文件/*主函数*/void cdigitalimageprocessiondlg() engine *ep; /定义参数变量,并且把从键盘输入的值赋给变量 int status=0; ep=engopen(null); if(!(ep=engopen(null) /*打开matlab计算引擎*/messag

39、ebox(null,”cannot open the engine of matlab”);exit(-1);/*下面是执行matlab指令*/engevalstring(ep,” matlab指令函数; ”); /执行一个用字符串表示的matlab表达式engsetvisible(ep,0);status= engclose(ep); /关闭matlab引擎if(status!=0) /返回0表示执行成功,否则1,printf(“ 无法正常关闭matlab计算引擎n”);exit(-1);printf(“n matlab计算引擎因用完毕!/n”)4.2 visual c+ 调用matlab引

40、擎vc是通过使用matlab引擎函数engevalstring 向matlab发出计算指令的,matlab环境中的参数(数字图像处理设计的参数)要通过matlab引擎函数engputarray把变量写入matlab工作空间,matlab计算的结果要通过matlab的引擎库函数enggetaaary输入到vc环境中去。4.2.1 visual c+ 环境下配置建立一个matlab引擎程序,首先必须在某个编辑器中进行源代码的编写,然后存盘回到matlab的工作环境中去进行编译,若有错,则必须回到原来的文件编辑器,按照matlab的错误指示,逐行修改,直到程序没有错误,一个matlab的引擎程序才算

41、成功。在vc+ 6.0集成环境中建立和调试mtlab引擎程序基本步骤如下:第一步,启动visual c+6.0集成环境,选择file下拉菜单中new选项,这时弹出4.2.1图所示对话框建立mfc appwizard exe类型工程。在project name输入程序名称digital image processing,点击确定即可。具体操作详见下图:图6.新建文件图第二步,在下面弹出的屏幕中,选择single document选项,接下去的四个屏幕都接受默认参数。第三步,在项目工程创建完毕之后,选择下拉菜单tool中的菜单选项opinion,如图4.2.1.2所示,在弹出opinion对话框中

42、,选择其中的directories属性页,在其中show directories for下拉式选项中分别选择include files 和library file,在下部编辑框中输入以下路径:matlabexternincludematlabexternlibwin32microsoftmsvc60然后选择ok按扭。具体操作参见下图:图7.添加路径图第四步,在这一步将把matlab中的libmx.def、libeng.def、libmat.def三个文件转化为三个静态链接库,这样就可以进行静态链接了。生成静态链接库并链接的方法是在dos命令下,进入用户安装microsoft vc+6.0的目录

43、,如d;microsoft visualstudiovc98,并且进入该目录的子目录bin,按照下面的格式运行该目录下的命令lib:lib/def:%matlab%externincludelibmx.def/machine:ix86/out:libmx.lib/nologolib/def:%matlab%externincludelibeng.def/machine:ix86/out:libeng.lib/nologolib/def:%matlab%externincludelibmat.def/machine:ix86/out:libmat.lib/nologo执行完三条命令后,就得到三个

44、静态链接库文件,分别为libmx.lib、libeng.lib 和libmat.lib 。命令中%matlab%代表本机上安装matlab的根目录,在执行这些命令个过程中,必须加以替换,一旦生成了三个静态链接库文件,就可以反复使用,而无需对每个项目重新建立。选择下拉式菜单project中的菜单项setting,打开工程设置属性页,选择link,在object/library modules编辑框中,添加libmx.lib libeng.lib 其中libmat.lib非常重要,否则引擎不能工作,对于这一点,本人在最初的调试程序中深有体会。图8. 添加库函数图第五步,选择下拉菜单project中

45、的菜单项add to project file将第四步生成的三个lib库文件添加到当前项目中,同时将用户编写的matlab引擎程序engine.h的源文件也添加到当前项目中,此文件可以在matlab的安装目录下的matlabexterninclude中找到,拷贝到自己的工程中即可。在调用enginestring()等接口函数时不要忘记#include “engine.h”完成以上五步之后,用户就可以在vc+中编写优美的界面,同时对matlab引擎程序进行编译和调试。这就完成vc环境下的配置。 vc+环境下的界面:图9.vc+中的可执行图标图10.vc环境下的gui界面4.2.2 matlab环

46、境下配置在matlab命令窗口中输入mbuild setup命令,然后根据提示选择y即可实现matlab环境下的配置工作,最后还要将matlab安装路径中matlabexternlibwin32microsoftmsvc60目录下的libeng.lib libmx.lib libmat.lib三个文件复制到你所做的工程文件中;将matlabexterninclude目录下的engine.h mat.h matrix.h tmwtypes.h 复制到你所做的工程文件中。将matlabbinwin32目录下libeng.dll libmat.dll libmx.dll libut.dll四个文件复

47、制到你所做的工程文件中。最后在vc+环境下编译链接,即可生成可执行文件.exe。直接运行即可。以上设置均完成之后,调用执行后的界面如下: 图11.调用成功的图形界面控制第五章 结 束 语本文应用了matlab数字图像处理工具箱中的基本函数,进行了gui开发的深入探讨,并把其实现功能集成在较新的gui界面上,为新的使用环境带来了富有创新意识的开发,并在创作的过程中体现了个人的审美观点,特别是把本人的设计内容以视频的形式录制下来,这是可喜之处!通过将近两个月的艰苦工作,不仅掌握了matlab编程的基本知识,更重要的是运用已学的新知识,在基于matlab的环境下开发的数字图像处理gui界面研制之后,还对本次论文工作进行了分析,并得出以下结论:对于一幅图像首先要能通过系统调用进来,然后根据所要得到的信息对其加以处理,比如说图像某些特征不够突出,需要对其锐化和边缘检测等等,从而确保数字图像处理的实用价值。本次课题不足之处问题是:所有操作进行中要保证实时

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论