VC与MATLAB混合编程在图像识别中的应用

2014-03-11 08:07陈玉华林来宾洛阳师范学院信息技术学院西门子中国有限公司机械传动部
经济技术协作信息 2014年22期
关键词:图像识别调用引擎

陈玉华林来宾/洛阳师范学院信息技术学院;西门子(中国)有限公司机械传动部

VC与MATLAB混合编程在图像识别中的应用

陈玉华1林来宾2/1洛阳师范学院信息技术学院;2西门子(中国)有限公司机械传动部

详细描述了在VC环境下利用Matlab进行图像识别、提取的方法。本文以一个成像光斑的识别为例,介绍了Matlab引擎的设置,从而使VC和Matlab之间进行通信,实现图像的快速识别。

混合编程;引擎;matlab

引言:MATLAB强大的科学计算与可视化功能,简单易用的开放式可扩展环境,使MATLAB在许多学科领域中成为计算机辅助设计与分析、算法研究和应用开发的基本工具和首选平台。但由于其编译器采用伪编译的方式,在MATLAB中编写的程序无法脱离其工作环境而独立运行。针对这个问题,Mathworks公司为MATLAB提供了应用程序接口,允许MATLAB和其他应用程序进行数据交换,并且提供了C/C++数学和图形函数库,为在其他程序设计语言中调用MATLAB的高效算法提供了可能。

VC++是微软公司利用C++的底层机理开发的编译器,与其他一些C++编译器相同,都以C++语言为编译对象。

一、VC与matlab接口方式的选择

VC与MATLAB之间的接口方式有3种:1)在VC中利用MATLABEngine调用MATLAB函数;2)将MATLAB程序编译成MEX文件;3)在VC程序中利用MATLAB C++数学库调用MATLAB函数。方法1是采用引擎方式,可以在非MATLAB为主的应用程序中使用MATLAB功能,该方法不需连接整个MATLAB,只需在VC中嵌入必要的MATLAB Engine,便可以调用MATLAB中几乎所有的函数或命令,无需编译成C或C++程序;方法2是在以MATLAB为主的应用程序中,需要在MATLAB应用程序中调用其他语言的情况下使用,方法3的缺点是不能够利用MATLAB中丰富的图形句柄处理函数。本文采用的是引擎调用的方法。

二、VC调用matlab引擎

MATLAB引擎是一组函数,通过这组函数,用户可以在自己的应用程序中实现对MATLAB的控制,来完成计算和图形绘制等任务,这相当于把MATLAB当成一个计算引擎。在开发一个专业的应用程序时,可以采用VC开发用户界面,而分析部分采用MATLAB编程实现,这样可以利用MATLAB强大的分析功能,缩短程序开发周期。

MATLAB引擎的操作是通过启动一个独立于应用程序的进程来实现的。这样只需要把少量的引擎通信库函数连接到应用程序,因为应用程序和引擎是两个独立的进程,它们之间的通信机制与开发环境相关。MATLAB提供了一个函数库来实现对MATLAB的控制,这个函数库的主要功能有:启动和结束MATLAB进程;从MATLAB发送的接收数据;向MATLAB发送命令。与其他接口方式相比,引擎提供的MATLAB功能支持是最全面的,它可以完成任何计算和绘图操作,对所有的数据结构提供完全支持。

三、VC调用matlab引擎设置

要在VC中成功编译MATLAB程序,必须包含引擎头文件Engine.h并引入MATLAB对应的库文件:libeng.lib,libmat. lib,libmx.lib,libmex.lib。具体的设置方法如下(以VS2005为例),打开一个工程后:

1.通过菜单工具/选项,打开设置属性页,进入Directories页面,在目录下拉列表框中选择Include files,添加路径:“C: matlabexterninclude”(假定matlab安装在C:matlab目录)。

2.选择Library files,添加路径:C:matlabexternlibwin32microsoftmsvc60,该步只需设置一次。

3.通过菜单工程/设置,打开工程设置属性页,进入Link页面,在Object/library modules编辑框中,添加文件名libmx.lib libmat.lib libmex.lib libeng.lib。

该步每个工程都要单独设定,因为每个工程所使用的MATLAB函数库可以不一样,因此,设置可能不同。上面只设定了libmx.lib libmat.lib libmex.lib libeng.lib,如果使用了其它的库函数,则需要添加相应的库文件。

四、VC调用MATLAB实现图像识别

在VC中编译代码时,必须对头文件“engine.h”进行包含,这个头文件非常重要。“engine.h”中包含了MATLAB引擎库中所有函数及其相关数据类型的定义,缺少了它,将无法使用MATLAB引擎。如果不加入这个头文件,在程序编译时就会出现“调用没有定义的MATLAB引擎函数”的错误提示。

接着启动引擎。定义一个引擎指针ep,该指针首先指向函数engOpen(),然后开始VC与MATLAB通信。结合一个光斑图像提取的例子。

打开引擎后进行进行通信,在VC环境下,只需把MATLAB环境下的。m文件转换为引擎调用即可。主要代码如下:

最后,通信完毕后关闭matlab引擎即可。

程序识别的图像前后对比如下所示:

图1 识别前图像

图2 识别后图像

五、结论

VC和matlab在编程和计算上各有自己的优缺点,将它们结合起来,可以开发出来数值计算功能强大、界面友好的程序来。

[1]苏金明等,Matlab与外部程序接口[M].,电子工业出版社,2004。

[2]袁林等,VC与MATLAB混合编程在图像处理中的应用 [J].微计算机信息,2008第24卷第4-3期

本文为河南省科技攻关项目项目编号:102102210479。

陈玉华1976.11~,女,讲师,硕士,研究方向为图像处理

猜你喜欢
图像识别调用引擎
核电项目物项调用管理的应用研究
基于Resnet-50的猫狗图像识别
高速公路图像识别技术应用探讨
LabWindows/CVI下基于ActiveX技术的Excel调用
图像识别在物联网上的应用
图像识别在水质检测中的应用
蓝谷: “涉蓝”新引擎
基于系统调用的恶意软件检测技术研究
无形的引擎
基于Cocos2d引擎的PuzzleGame开发