MATCOM与VC++混合编程方法在图像处理中的应用

作者:    更新时间:2009-3-26 10:26:58
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-),女,硕士研究生,研究方向:数字图像处理与系统。

 

 

上一篇:品牌服装企业数据仓库的构建及数据挖掘设计
下一篇:BP算法在钢铁裂纹电磁无损检测中的研究
站内搜索
无忧学术网 | 论文写作研究网 | 支付宝 | 电子工程师论坛 | 上海交通大学 | 东南大学 | 复旦大学 | 同济大学 | 浙江大学 | 清华大学 | 北京大学 | 承运天成 | 搜狐 | 百度 | google | 搜狗 | 雅虎 | 新浪 | 网易 | 麻省理工学院 | 中华英才网 | 无忧工作网 | 智联招聘 | 爱词霸 | 淘宝网 | 阿里巴巴 | 校友录 | 哈佛大学 | 耶鲁大学 | 腾讯 |
代写硕士论文 | 代写工程硕士论文 | 上海代写硕士论文 | 上海代写论文 | 职称论文 | 代写研究生论文 | 代写MBA论文 | 代写MPA论文 | 代写论文网