VC++和Matlab混合编程在图像处理中的应用.doc
文本预览下载声明
VC++和Matlab混合编程在图像处理中的应用
第22卷第2期
2005年2月
计算机应用与软件
ComputerApplicationsandSoftware
Vo1.22,No.2
Feb.20o5
VC++和Matlab混合编程在
图像处理中的应用
谢永华傅德胜
(南京气象学院计算机科学与技术系江苏南京210044)
摘要本文在分析了Matlab函数运算慢的基础上,提出了一种运用Vc++直接调用采用Matlab编译生成的Mex文件,从而实现
图像快速处理的方法,并将该方法应用于数字图像处理中,取得了良好的实验结果.
关键词Matlab混合编程Mex文件
HYBRIDPROGRAMMINGBETWEENVC++ANDMArII.AB
ANDITSAP]PLICⅡoNDGEI.RoCESSING
XieYonghuaFuDesheng
(ofComputerSci~weandTechnology,NIM,Nanjing脚Ⅱ210044,‰)
AbstractInthispaper,WefirstlyanalyzethelimitationofMatlabfunctionsinslowcomputingspeed,thenproposedaquickimageprocessing
methodofapplyingtheVC++languagetodirectlycalltheMexfilecompliedwithMatlabAPIfunctions.Consequently.weappliedtheefficiemmethod
inimageprocessingandreceivedsatisfactoryresults.
KeywordsMatlabHybridprogrammingMexfde
1引言
Matlab是一个跨平台的科学计算环境,它以强大的计算和
绘图功能,大量稳定可靠的算法库,简洁高效的编程语言,成为
数学计算工具方面事实上的标准.尤其在图像处理领域,Matlab
语言带有丰富的图像处理函数库,具有强大的矩阵运算功能,因
此可以方便地进行图像变换,图像显示,甚至在程序调试过程中
也能随时观察图像的变化和处理结果….然而,由于Matlab程
序是解释执行的,对程序只能解释一句执行一句,因此运行速度
很慢,尤其在做循环运算,处理诸如遥感图像等信息量很大的图
像的时候,问题显得尤为严重.
VC++是Microsoft公司开发的Windows编程工具J,具有很
高的编码效率,可以快速地开发出Windows环境下功能强大,图
形界面丰富的应用软件系统,然而Vc++在数值计算方面却不
如Madab,尤其在进行图像处理时,每一个算法都需要添加大量
的程序代码.考虑到由于Matlab预留了与C/C++之间的软件接
口,因此本文提出了运用VC++调用Matlab编译生成的Mex文
件的方法来解决这个问题,并将其应用于数字图像处理中,取得
了良好的效果.
2Mex文件及执行流程
2.1Mex文件
Mex文件是用C语言编写的,由Matlab解释器自动调用并
执行的动态链接文件.由于Mex文件可以像Madab普通函数一
样被调用,而且是二进制程序,因此具有很快的执行速度.另
外,Mex文件可以方便地将使用c语言编写的函数弓l入Matlab
环境中使用,避免了重复的程序设计,而且可以使用c语言为
Madab定制特殊要求的目的函数,以完成使用Matlab不易实现
的任务.
2.2Mex文件执行流程
Matlab调用执行Mex文件的步骤:
(1)给Mex源程序Ioading.c传递入口参数;
(2)入口子例行程序mexFuncfion接受计算所需数据;
(3)计算子例行程序I_mding对输入数据进行处理;
(4)计算结果返回入口子例行程序.
当Matlab对一个Mex文件的源程序I_oading.C进行编译后,
如果成功即可以得到与源程序名相同的DLL文件,同时建议将
源程序的取名与程序中计算子例行程序的名字保持相同,这样
比较直观而且易于使用和记忆J.
结合一个实现图像边缘检测的Mex文件来说明其执行过程
中的参数传递.
首先使用c语言编辑实现图像边缘检测的源程序loading.
c,并且在文件开始必须包含头文件Mex.h;然后对源文件进行
编译,可以得到文件名为I_oading.dll的动态链接库,同时在Mat.
1ab命令提示符下输人命令:Y=Loading(A,B);接着在Matlab环
境下进行编译,Matlab解释器将对各参数进行赋值如下:nlhs:
1;nrhs=2;plhs~-NULL;prhs一(Y,B);最后调用人口子例行程序
收稿13期:2003一l】一27.谢永华,讲师,主研领域:数字图像处理与
模式识另Ⅱ.
显示全部