VC++与Matlab混合编程之引擎操作详解.pdf
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
用VB与MATLAB混合编程方式实现图像处理
任少斌1,李元宗2
1太原理工大学理学院计算机基础教学部,太原 (030024)
2太原理工大学机器人研究所,太原 (030024)
Email: rsb_long@
摘 要:阐述了如何使用MATLAB与VB编程工具相结合的手段开发图像处理研究软件的方法。以直方图计算的分析为例,用VB与MATLAB 编写程序,实现对直方图特性变化的分析,并给出可视化的结果。通过一个具体的程序证明VB与MATLAB混合编程可以有效的提高了程序的设计效率。
关键词:VB;MATLAB;DDE;混合编程;图像处理
1 引言
VB(Visual Basic)由Microsoft公司推出并广泛应用的可视化面向对象编程工具,它功能丰富,简单易学,既是一种编程语言,也是一个强大的集成开发环境。利用VB能够迅速编制各种风格而且界面良好的软件,它是目前Windows平台上主力编程语言之一。VB的主要缺点是运算速度慢,不适合进行大型的数值计算和图形处理。
MATLAB是由美国MathWorks公司开发的软件工具,它具有强大的数值运算能力,适用于大量科学与工程计算,具有先进的视觉化功能。在控制系统、图像处理、信号处理、神经网络等方面有应用广泛。但MATLAB的是一个命令式交互系统,功能模块比较分散,要求使用者具有较高的计算机应用素质,并且熟悉MATLAB的环境[1]。
2 混合编程概念引入
C++是一种传统的被公认为可以用于图像处理的程序设计语言,但面对C++编程过于繁琐和抽象的特点,使很多人对使用它进行程序设计敬而远之。而MATLAB利用单独函数功能处理图像处理的优势,VB在交互界面设计中的方便灵活的特点,使人们开始尝试将这两种语言相互结合用于图像处理,即混合编程的概念。MATLAB与VB都是基于Windows环境中的编程平台,其中MABLAB有十分强大的图像处理工具箱,它支持丰富的图像文件格式。它提供的15 类图像处理函数,涵盖了几乎所有的常见图像处理方法[1]。利用这些图像处理工具箱,再结合MA TLAB6.5自身的强大数据处理功能,可以不必关心图像文件的格式、读写、显示等细节,而把精力集中在算法研究上,使得工作效率大大提高。在测试这些算法时既可方便地得到统计数据,同时又可得到直观图示[2],如图3 所示。
VB与MATLAB混合编程的主要思想来自客户机/服务器应用程序开发模式。随着应用程序开发模块化以及互联网的广泛应用,很多软件系统都提供了这种技术支持。MATLAB 和VB同时具备这项功能。实现方式主要有四种。ActiveX方式、使用MatrixVB、调用DLL 动态链接库和DDE方式。四种方法各有特点,在很多文献中都有阐述[3]。其中使用Matrix VB
相对简单,不需要额外调用其他函数和文件,但能够用于图像处理的功能有限; 通过DLL 动态链接库,将MATLAB 的函数转换为VB 中可以调用动态链接库,使用ActiveX方式对于设计人员要求较高相应的难度较大;使用DDE方式主要利用剪贴板功能传递数据,相对容易实现。本文重点介绍使用DDE方式与MATLAB混合编程。
3 动态数据交换DDE(Dynamic Data Exchange)
动态数据交换简单的解释,就是采用的是内存共享方式用于给两个不同的程序做通讯工作。而通讯交换实际上指利用剪贴板在不同应用程序之间传递数据。Windows支持多进程通信机制,包括Windows剪贴板、动态链接库中的共享内存和ActiveX等。其中动态数据交换DDE(Dynamic Data Exchange)属多进程通信机制之一。DDE的功能没有ActiveX强大,但其在使用时比较方便,容易实现[4]的特点。
3.1 DDE传递机理
DDE是基于windows的消息机制,两个Windows程序之间可以通过相互传递消息进行“对话”,这两个程序形象地被称为“服务器”和“客户”(如图1所示)。DDE服务器是一个维护其它Windows程序而使用的数据程序,而DDE客户则是从DDE服务器获得这些数据的程序。在Windows中的应用程序具有双重身份,它既可以是一个程序的客户,也可以是另一个程序的服务器。因此在程序设计中需要明确对话环境,当客户发出相应的消息之后,它同时也说明了需要的服务类型。DDE对话由客户程序发出,客户程序将一条称为WM_DDE_INITIATE的消息发到目前所有运行的Windows程序,它同时指明了客户程序所需要的数据类型,而拥有这些数据的DDE服务器可以响应这条消息并开始对话。混合编程中的DDE在发出对话的指定了需要响应的服务器是MATLAB。因此只有MATLAB会根据对话的要求产生动作。
3.2 DDE工作方式
当一个客户端的应用程序初始化一个DDE对话时,必须指定两个由服务器定义的DDE 参数:服务器应用程序名称 (service name)和对话主题 (topic)。如图2所示。当一个服务器收到一个支持的对话请求后,便接受这个请求,建立一个DDE对话。一个服务器应用程序和一个对话主题共同构成唯一的对话。当MATLAB作为客户程序时,它只支持文本格式的数据传输。它作为服务器时,除支持文本格式外,还可以支持图元文件(MetaFilepict)格式和XLTable格式。本文的数据传递就是基于图元文件格式进行传递的。
3.2.1 客户和服务的交互过程
DDE总是发生在客户应用程序和服务应用程序之间。DDE客户应用程序通过建立和服务程序的会话来发送事务(transaction)来实现数据交换。一个事务是对数据或服务的请求。DDE服务应用程序通过提供数据或服务来响应客户程序的请求。一个服务程序同时可以和
多个客户程序建立会话;一个客户程序也能同时从多个服务程序中获取数据。一个应用程序即可以是客户程序,也可以是服务程序。客户或者服务程序都可以在任意时刻结束已经建立的会话。
3.2.2 服务名、主题名和事务名
DDE服务器使用三层结构(服务名、主题名和数据项名)来唯一地标识一个在会话中被交换的数据单元。其中服务名是一个在客户程序试图同服务器建立会话时服务应用程序用来响应的字符串。为了同服务器建立会话,客户程序必须指定服务名。虽然一个服务器可以响应多个服务名,但是大多数服务器一般只响应一个服务名。主题名是一个用来标识逻辑数据上下文的字符串。对于那些操作基于文件处理的服务器,主题名通常是文件名;其它的则是由应用程序指定的字符串。除了服务名,一个客户程序如果试图建立一个会话,则必须指定主题名。数据项名是一个用来标识服务器传递给客户程序的数据单元的字符串。
3.2.3 系统主题
系统主题提供了一个让任何DDE客户程序得到感兴趣信息的上下文。VB在调用MATLAB时指定服务器主题是Topic。确认由Topic下的数据项对VB的请求产生动作。
3.2.4 建立连接
在调用DDE之前首先需要确保它与其它的服务器没有联系,因此客户联接模式为vbLinkNone。然后再建立与MATLAB的联系MATLAB| Engine。当一项任务完成之后,需要将建立的联接断开。释放系统分配给应用程序的资源。
图1描述作为服务器的MATLAB与作为客户的VB之间通信的概念,它们之间的通信载体是其中的DDE模块,VB通过DDE函数将请求发出,MATLAB则通过DDE模块接受相应的对话要求。图2说明了MATLAB中的对话主题与具体的内容。
图1 MA TLAB服务器原理图图2 MA TLAB DDE结构图MATLAB中的具体数据类型如下:
EngEvalString:它表示采用文本内容进行DDE数据交换
EngStringResult:它表示将执行的结果回传到客户。
EngFigureResult:它表示将运行结果中的图形内容通过剪贴板回传客户。
mxtrix name:它表示将运算的结果通过矩阵方式传递给客户。
在具体的实现过程中,客户需要根据需要建立与MATLAB的联系,并分别指定不同的