VC++与Matlab 混合编程及其在轮辋裂纹检测中的应用

上传人:ba****u6 文档编号:158505026 上传时间:2022-10-05 格式:DOCX 页数:5 大小:61.99KB
收藏 版权申诉 举报 下载
VC++与Matlab 混合编程及其在轮辋裂纹检测中的应用_第1页
第1页 / 共5页
VC++与Matlab 混合编程及其在轮辋裂纹检测中的应用_第2页
第2页 / 共5页
VC++与Matlab 混合编程及其在轮辋裂纹检测中的应用_第3页
第3页 / 共5页
资源描述:

《VC++与Matlab 混合编程及其在轮辋裂纹检测中的应用》由会员分享,可在线阅读,更多相关《VC++与Matlab 混合编程及其在轮辋裂纹检测中的应用(5页珍藏版)》请在装配图网上搜索。

1、VC+ 与 Matlab 混合编程及其在轮辋裂纹检测中的应用刘亚楠 , 郭三华 ,涂铮铮 , 罗斌( 安徽大学计算智能与信号处理教育部重点实验室,合肥 230039) 摘要:本文结合轮辋裂纹检测系统介绍了几种 VC+ 与 Matlab 混合编程的方式,并具体分析了它们在轮辋 裂纹检测中的可行性,得出了在轮辋裂纹检测中可以采用 Matlab 引擎的结论。最后结合边缘检测、形态学 运算、最优阈值分割等多种方法,采用Matlab引擎较好地实现了轮辋裂纹检测,取得了理想的效果。实验 表明该方法在轮辋裂纹检测系统的开发中大大提高了编程效率。关键字: 混合编程 裂纹检测 Matlab 引擎Mixed Pr

2、ogramming of VC+ with Matlab and Its Applicationin Wheel Crack Detection SystemYanan Liu Sanhua Guo Zhengzheng Tu Bin Luo(Key lab of Intelligent Computing and Signal Processing of Anhui University, Hefei 230039) Abstract: This paper introduces several mixed programming methods of VC+ and Matlab base

3、d on the wheel crack detection system, and concretely analysises the feasibility of them in wheel crack detection system, eliciting the conclusion of using Matlab engine in crack detection system. To realize the wheel crack detection system ,we use the method of Matlab engine combined with edge dete

4、ction algorithm, morphological operation,optimal threshold segmentation ,etc, and get the perfect effect. The experiments indicate that the programming efficiency is improved in the development of the wheel crack detection system using the proposed method .Keywords: mixed programming, crack detectio

5、n, Matlab engine1 引言Matlab 是当今最优秀的科技应用软件之一,它具有高效的科学计算功能与可视化功能, 又有强大的图像处理功能。它简单易用,不需要用户有高深的数学知识和程序设计能力,也 不需要深刻了解算法及编程技巧,具有开放式可扩展的工作环境。Mat lab语句功能十分强 大,一条语句可完成十分复杂的任务。Matlab软件中所包含的Matlab源代码相当于70万 行C代码。特别是所附带的30多种面向不同领域的工具箱支持,使它成为许多科学领域的 基本工具和首选平台。但是,它是以解释方式运行的高级语言,执行效率低;同时,Ma tlab 程序不能脱离其环境运行,不能被用于开发商

6、用软件。而对于另一种程序设计工具VC+6.0, 它具有较高的编码效率,可以快速的开发出Windows环境下图形界面丰富的应用软件系统, 但是,在进行较复杂的图像处理时,需要编出大量的代码。本文通过Mat lab与VC+语言的 接口,可以实现两种语言的混合编程,优势互补,提高编程效率,会大大地加快一些算法的 实现,同时其可靠性也很高,可以开发出高质量的图象处理软件。轮網裂纹检测系统采用数字图像处理技术,利用CCD摄像头摄取车轮轮網的运动图像, 将其数字化后送往计算机处理,提取裂纹的特征,实现车轮轮辋表面裂纹的在线检测。如图 1 所示:依据裂纹检测相关算法,我们采用Mat lab与VC+语言混合编

7、程来进行轮網裂纹检测系 统的开发,Matlab与VC+混合编程存在以下几种主要方式,我们根据这几种方式的各自特 点来分析在轮辋裂纹检测系统中应该采用哪种方式来实现处理。作者简介:刘亚楠(1984 -),女,硕士研究生,山东济宁人,研究方向为数字图像处理。郭三华,男,硕士 研究生。涂铮铮,女,硕士研究生。罗斌,男,教授,博士生导师,研究方向为数字图像处理 与模式识别。图 1 系统原理框图2 VC+与Matlab混合编程的几种方法(1) 利用Mat lab编译器实现与VC的连接这种方法需要编辑一个m文件,并且它必须是一个函数文件,而不能是一个脚本文件。 假设为lyn.m。利用Mat lab提供的m

8、cc编译器命令将.m文件转化为VC+下可以调用的动态 链接库文件。这里需要注意的是由于Matlab 6.5下的编译器版本是3.0的,而在Matlab 7.0 下编译器版本是 4.1 的,所以,所用编译器命令不一样,并且生成的文件也不一样。具体区 别如下:在Mat lab 6.5中mcc编译器命令为:mcc -t -W libhg:lyn03 -T link:lib -h libmmfile.mlib lyn.m生成的文件中包含lyn.c lyn.h及.m文件中调用的函数所对应的头文件和源文 件。所要调用的函数定义如下:extern mxArray * mlfLyn(void); extern

9、void lyn03Initialize(void);extern void lyn03Terminate(void);在 Matlab7.0 中 mcc 编译器命令为:mcc - W lib:lyn03 - T link:lib lyn.m生成的文件中已经不再包含lyn.c lyn.h。而且,对于所有.m文件都只生成8个文件。.m 文件内所包含的函数对应的源文件和头文件都被封装起来,大大节省了存储空间。所要调用的函数定义也有很大的不同,主要表现在mlfLyn ()函数上,函数定 义如下:extern void mlfLyn(int nargout,mxArray * y);其中nargout

10、为所有函数的输出变量数目,y为输出变量。对于一般只涉及到数 学库函数的.m文件只调用这三个函数即可。但是,对于包含图象处理工具箱中 的函数的.m文件,在Matlab6.5下是不能编译的。故在轮網裂纹检测系统中不能采 用这种方式。(2) 利用 matcom 实现与 VC 的连接有两种方法可以实现这种连接:运行MIDEVA,在主界面上直接打开.m文件,在菜单中选 择compile to dll,输入lyn,找到lyn.cpp lyn.h加入工程;点击VC菜单项Tools-Customize。在弹出的对话框中选择Add-ins and Macro files,点击Browse,选择插 入文件类型为.

11、dll文件,在Mat com的bin目录下找到mvcide.dll,点击OK, VC的工具栏 上就会出现新的工具栏。采用第二种方法点击工具栏上的按钮就可以把.m文件以及与它 相关函数的的源文件、头文件、库文件v4501v.lib自动加入工程中,非常方便。Mat com提供了 mat lab中.m文件与其他高级语言的接口,使.m文件可以编译为脱离 matlab环境独立执行的可执行性程序,这样提高了代码的复用率,提高了代码的执行速度。 使纯文本的.m文件变为二进制的可执行程序,增加了知识保护的安全性。它提供了近千个 数学函数,对于其他高级语言编译器来说,提供了一个丰富的数学库,在matlab上能用

12、的 常用函数基本上都可以在高级语言中直接调用。所以对于涉及数学函数的m文件来说,采 用这种接口方法很方便。但是需要注意的是由于在 m文件中所调用的函数文件也要与该.m 文件在同一目录下,同时进行编译。而对于轮辋裂纹检测系统,它的算法中调用的函数文件 有很多,要把这些函数都放在同一个目录下需要一定的时间,另外,Matlab中的图形、图 象显示函数不能被调用,需要通过VC编程实现,所以,这种方法在轮網裂纹检测系统中并 不方便实现。(3) 用 Matlab 引擎调用 Matlab 函数Matlab引擎采用客户/服务器计算方式。在运用中,C+语言的程序作为前端客户机,向 Mat lab引擎传递命令和数

13、据信息,并从Ma tlab引擎接收数据信息。这种方式下,Ma tlab 相当于一个计算引擎。它以独立进程的形式工作在后台,有以下优点3: Matlab引擎可以与应用程序运行在网络中不同的机器上,这样就能够将计算任 务繁重的引擎程序放置到网络上计算速度较快、计算能力较强的机器上,充分 利用网络资源,加快这个系统的速度,在另外的机器上实现应用程序的用户界 面。 由于应用程序和引擎是两个独立的进程,Matlab引擎不需要将整个庞的Matlab 系统与程序连接,只需要把小部分的引擎通信库与程序相连,节省了大量的资 源。另外,和以上所介绍的接口方式相比较来说Ma tlab引擎所提供的Mat lab功能最

14、全面, 可以完成任何计算和图象处理工作,而且利用Matlab引擎调用工具箱中的函数可节省大量 的系统资源,虽然不可脱离Matlab的环境运行,但是应用程序整体性能较好并且它的设置 很简单,只需要在源文件中加A#include “engine.h”,把libeng.lib libmx.lib引入工 程即可。所以在轮辋裂纹检测系统中这种方法可行。下面我们就用这种方式来实现轮辋裂纹 检测系统。3实例分析本文基于VC+6.0和Ma tlab7.0利用mat lab引擎实现对轮網裂纹检测。裂纹检测方法是: 首先利用Canny算子检测图像边缘,从而可以提取连续而完整的边缘,然后用形态学的二值膨胀消除双边缘

15、之间的间隙,再用腐蚀、细化算法平滑、细化粗边缘,使得边缘在宽度上更接近原始目标,得到第一个处理结果图;对原图进行傅立叶变换处理,再用最优阈值分割5 得到第二个处理结果图;然后将两个结果图做点乘运算,最后使用模板去除残留的噪点6, 得到最终的裂纹检测结果。Matlab实验中所用文件:tanshang.m。在把 libeng.lib libmx.lib 引入工程时可以采用方法:在C:MATLAB701externlibwin32microsoftmsvc60 目录下找到 libeng.lib libmx.lib 引 入工程。也可以采用3中的方法:利用命令lib/def: Mat lab 的安装路径

16、C:MATLAB701externinclude*.def/machine:ix86/out:*.lib来生成程序所需的静态链接库libeng.lib libmx.lib,将libeng.lib libmx.lib所在的目 录加入VC+project/link/object/library modules目录下即可。本文采用第一种方法。主要代码如下:Engine *ep;if (!(ep=engOpen(NULL) fprintf(stderr,n Cant start MATLAB enginen); exit(-1); engEvalString(ep,a=imread(tansh.bmp

17、);); engEvalString(ep,x=mat2gray(a);); engEvalString(ep,M,N=size(x);); engEvalString(ep,x=fenge(x,M,N);); engEvalString(ep,x=quban(x,M,N);); engEvalString(ep,imwrite(x,kk1.bmp);); engEvalString(ep,BW1 = edge(a,canny,0.5);); engEvalString(ep,se1 = strel(line, 4,90 );); engEvalString(ep,se2 = strel(li

18、ne,4,0 );); engEvalString(ep,BWsdil = imdilate(BW1, se1 se2);); engEvalString(ep, y=imread(kk1.bmp);); engEvalString(ep,z=y&BWsdil;);engEvalString(ep,z=qugudian(z,M,N);); engEvalString(ep,figure;);engEvalString(ep,imshow(z);engEvalString(ep,close;);其中fenge()、quban()、qugudian()为自定义的函数,分别实现分割、去斑、去孤点算

19、法。函数定义如下:Function x=fenge(x,M,N)Function x=quban(x,M,N)Function z=qugudian(z,M,N)以上可以看出需要在VC下编很多代码才能实现的算法,用引擎就只需要几行,另外, 也可以把整个tanshang.m文件封装成一个函数文件func tion z二t anshang(),在lyn.m中 直接调用,上述代码就减为一条: engEvalString(ep,z=tansh();这样更能看出使用Mat lab引擎的优势,节省了在VC下编码的时间,提高了工作效率。 实验结果如下:图 2 原始图像4 结束语VC+和Matlab混合编程,

20、弥补了单个软件开发应用程序功能上的不足,是一种时间、效 率上的极好的折衷,它使得我们可以将更多的时间放在项目关键问题的思考上,而不是放在 算法的实现和程序的编码中。通过上述实例很好的应用了 VC+和Matlab的混合编程,实现了轮網裂纹检测算法,在 实际应用中取得了理想的效果。参考文献1 刘志俭,MATLAB应用程序接口用户指南M,科学出版社,20002 苏金明,黄国明,刘波,MATLAB与外部程序接口 M,电子工业出版社,20043 飞思科技产品研法中心,MATLAB7基础与提高,电子工业出版社M, 20054 张友兵,田漫柳,基于Mat com与VC混合编程的数字图象处理方法研究J,湖北汽车 工业学院学报, 2005,19(1):38-415 Milan Sonka, Vaclav Hlavac, Roger Boyle, Image Processing, Analysis, and Machine Vision .Second EditionM. United States of America.Thomson Learning and PT Press.20036 周军,彭培欣,自动磁粉探伤系统中的图像技术,仪器仪表学报J,2003,24(4):461-462

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

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!