MATCOM与VC++混合编程方法在图像处理中的应用
李悦 刘旭 杨晓
(贵州大学 电子科学与信息技术学院,贵州 贵阳 550025)
摘 要 简要分析了MATLAB语言在科学工程计算中的优缺点;介绍了一种MATCOM与VC++结合编程的新方法。通过对一个图像的亮度值进行几何运算,详细研究与剖析在VC编程环境中调用MATCOM 的编程方式。结果表明,VC与MATCOM的混合编程,可以减轻编程的工作量,提高软件开发效率。
关键词 混合编程;VC++;MATCOM;数据处理
1 引言
MATLAB是一种高效的用于科学工程计算的高级编程语言,它具有强大的数值计算、数据处理、系统分析、图形显示以及符号运算等功能,是一个完整的数学平台,借助MATLAB可以大大提高工程计算的效率。但MATLAB强大的功能只能在它所提供的平台上实现,这样就给工程计算带来很大的不便,特别是MATLAB 中使用的行解释方式限制了代码的执行速度。Visual C++是Windows下的主要编程语言之一,它能方便地形成应用软件中所需的各种用户界面和工具,并直接与系统及底层硬件交换数据。用VC++开发的系统具有容易维护升级、界面友好、代码效率高、执行速度快等一系列优点。因此VC++已成为目前应用软件开发中广泛采用的主要工具之一。如上所述,MATLAB的优点在于图像处理方面,而VC++的优点在于可视化界面的编程。由于VC++与MATLAB的各自特点,因此在Windows环境下实现两者的混合编程将是一种极为强大的编程手段,它将更加有效地发挥VC++与MATLAB各自的优点。MATCOM是MATHTOOLS公司推出的世界上第一个由MATLAB到C++的编译开发软件平台,提供对MATLAB程序文件(M文件)的解释执行和开发环境支持。它可将MATLAB的源代码译成同等功能的C++源代码。既保持了MATLAB的优良算法,又保持了C++的高执行效率。MATCOM软件平台本身的功能相当强大,提供近千个MATLAB的基本功能函数,通过必要的设置,就可以直接实现与C++的混合编程,而不必再依赖MATLAB;同时,MATCOM还提供编译转换功能,能够将MATLAB函数或编写的MATLAB程序转换为C++形式的DLL,只需包含必要的LIB、DLL以及H文件,从而可以实现脱离MATLAB环境对MATLAB函数和过程的有效调用,这样就有可能实现对MATLAB强大的工具箱函数的利用。本文通过对一个图像进行几何运算(加、减、乘、除),来说明MATCOM与VC++混合编程的可行性。采用的编译环境为:VC++ 6.0,MATCOM 4.5,Windows XP。
2 运行环境设置
(1)MATCOM编译环境设置。安装MATCOM 4.5与普通Windows程序的安装过程类似。在安装即将结束的时候,MATCOM安装程序会自动搜索本机上的C/C++编译器,MATCOM搜索到Visual C++ 6.0的编译器以后,会弹出提示是否找到CL.EXE文件,点击确认。接着MATCOM会询问计算机是否安装了MATLAB,选否。
(2)VC++ 编译环境设置。以下步骤将说明MATCOM编译得到的源程序在MFC AppWizard (exe)(Dialog Based)工程类型中的使用。①在Visual C++中的“Project/Settings/C/C++/Preprocessor/Additional include directories” 中填入当前MATCOM所处的路径(如“c:\matcom\”);②在Visual C++中的工程窗口处“Project/Add to Project/Files”加入matlib.h,v4501v.lib 库文件;③必须在文件头写# include "matlib.h"。
到此为止,VC++和MATCOM接口实现的准备工作已经完成,只要把在MATCOM平台下编译的文件加入项目即可。
3 应用实例
黑白图像可以应用二维函数f(x,y)表示,x、y是平面的两个轴的坐标,f(x,y) 表示点(x,y)的亮度值(灰度值),范围在0~255之间。本文中的几何运算加减乘除都是对图像的灰度值进行运算。如果运算结果超过255则计255,小于0则计为0。
3.1 MATCOM编译
(1)在MATCOM中新建四个文件,名为:add.m、subtract.m、multiply.m和divide.m。
(2)在MATCOM命令窗口中运行这四个函数。以add.m为例。
function [I1,J1]=add(input)
I=imread(input);
I1=double(I);
J=I1+50;
J1=uint8(J);
imshow( J1);
(3)将生成的add.h、add.cpp、subtract.h、subtract.cpp、multiply.h、multiply.cpp、divide.h、divide.cpp(默认位置为安装目录:\matcom45\Debug)和matlib.h、v4501v.lib(默认位置为安装目录:\matcom45\lib)10个文件拷贝到下面VC++建立的工程IMAGE目录下。
3.2 VC++调用MATCOM生成的组件
(1)建立一个名为IMAGE基于对话框的MFC(exe)工程。
(2)将上面第3步拷贝的10个文件加入到VC工程中:Project/Add to Project/Files,选择刚才拷贝到IMAGE目录下的10个文件。
(3)在IMAGEDlg.cpp中添加头文件:
#include "add.h" #include "subtract.h" #include "multiply.h"
#include "divide.h" #include "matlib.h"
(4)为工程建立界面:添加五个Button按钮控件;添加一个Edit box控件,用于显示图片路径;添加两个Static text控件,一个显示文字,一个显示图片。为控件添加变量和为Button按钮添加响应代码。几何运算中以“加”为例:
void CIMAGEDlg::OnAdd()
{ initM(MATCOM_VERSION);
Mm a1=TM(m_input);
Mm plothandle=drawnow();
add(a1);
UpdateData(FALSE);
exitM(); }
除了创建控制台工程,也可以建立其它类型的工程,只要在需要调用转换后函数的程序中包含matlib.h,并且在响应函数中初始化matlib 库initM (MATCOM _VERSION),结束调用后做结束工作exitM ()就可以了。

图1 选择一幅位图后的IMAGE.exe
(5)进行编译、连接即可生成IMAGE.exe文件。运行程序,选择一幅位图,如图1所示。分别点击“加”、“减”、“乘”、“除”结果如图2~图5所示。
图2 加法结果 图3 减法结果
图4 乘法结果 图5 除法结果
4 结束语
MATCOM提供了MATLAB中m文件与其它高级语言的接口,使复杂的接口变得非常简单,并且使m文件可以编译为脱离MATLAB环境独立执行的可执行性程序,这样,提高了代码的复用率,提高了代码的执行速度,使纯文本的m文件变为二进制的可执行程序,增加了知识保护的安全性。作者使用这种方法来提高程序编写的效率和可视化,取得了非常好的效果。
参考文献
[1]杨高波等.精通MATLAB 7.0混合编程[M].北京:电子工业出版社,2006
[2]刘维.精通Matlab与C/C++混合程序设计.北京:北京航空航天大学出版社,2005
[3]孙祥.MATLAB7.0基础教程[M].北京:清华大学出版社,2005
[4]郎锐.数字图像处理学Visual c++实现[M].北京:北京希望电子出版社,2003
收稿日期:11月24日 修改日期:11月28日
作者简介:李悦(1985-),女,硕士研究生,研究方向:通信网络与信息安全;刘旭(1985-),女,硕士研究生,研究方向:数字信号处理;杨晓(1984-),女,硕士研究生,研究方向:数字图像处理与系统。
|