孙 进,曹肖伟
(扬州大学 机械工程学院,江苏 扬州 225127)
由于VB提供了标签、文本框、命令按钮等可视化控件,可以轻松设置各控件的大小、位置等属性,并自动生成相关代码,所以使用VB在不太大的编写代码的工作量下能够实现内容丰富的软件界面。但是如果用VB来进行复杂的运算和图像处理,则不仅运算速度慢而且编程繁琐而复杂。而MATLAB是一种由解释性语言组成的命令行式交互式系统,其图像处理工具箱[1]在图像处理和矩阵运算处理上具有很大的优势,它提供了大量的自带图像处理算法函数,包括空间变换、区域变换、噪声去除、图像分析和增强等;然而MATLAB的GUI功能较差,且开发出的界面不够美观,MATLAB程序不能脱离其环境运行,MATLAB的实时效率低。VB长于界面设计,弱于图像处理,而MATLAB则与之相反,因此有必要将MATLAB与VB集成进行混合编程,就可开发出界面简洁同时图像处理方便的软件。
由于MATLAB与VB集成进行混合编程有其独特的优越性,因此可以在享受高效图像处理运算库的同时,实现与VB开发环境的无缝连接。目前,两者集成的常用方法有:MatrixVB、编译M文件、ActiveX技术等。
MatrixVB是Math Works公司针对VB开发的COM库,共计有600多个函数。它可以不依赖于MATLAB的环境而又能对MATLAB函数和过程进行有效调用。但是MatrixVB提供的图形图像处理函数仅具备了基本的图像读写操作,无法胜任更加复杂的图像处理任务。
MATLAB产生的M文件不能直接在VB中调用,MATLAB工具MATLAB COM Builder将M文件转换成DLL,然后在VB集成开发环境中直接调用该DLL可实现VB+MATLAB的无缝集成。
有如.exe和.dll文件之类的遵循ActiveX规范编写的可执行代码的ActiveX部件是VB工具箱的扩充部分。同时ActiveX技术的自动化服务又为MATLAB所支持,因此在VB语言环境中,可以对MATLAB的图像处理库进行调用。
相比较而言,MatrixVB由于提供的函数太少,因此无法胜任复杂的图像处理任务;借助编译的M文件相当于是函数的调用,该函数的输入及输出参数一旦确定,就无法修改;而ActiveX技术虽安装MATLAB,但不启动MATLAB,在VB应用程序中可直接将MATLAB作为ActiveX部件进行调用,具有实现二者无缝衔接的优越性,为此在本课题研究中,作者将基于ActiveX技术的VB+MATLAB混合编程应用于项目软件设计中。
本文所研制的物料运动图像处理系统利用VB制作界面,然后在VB中通过ActiveX自动化MATLAB,通过调用MATLAB中的图像处理函数实现对数字图像的处理。
系统采用模块化设计的思想,将系统分拆成多个子模块,如图1所示。物料运动图像处理系统由显示区、命令区和提示区3个子模块所组成。命令区又划分为二维轨迹和三维轨迹获取两个子模块。这两个子模块又可以细分为相机标定、标定模型选择、图片数据的输入和处理、轨迹的获取和存储等一系列子模块。每个子模块与子模块间进行封装,相互独立,同时又可以通过接口进行模块之间的数据传输。子模块的集成就形成了一个完整的物料运动图像处理系统。
图1 图像处理系统模块化设计架构
“MATLAB.Application”是MATLAB在VB应用程序中的ActiveX对象名,其ActiveX对象的创建通过CreateObject函数来实现。
如图2所示为物料运动图像处理系统的界面设计,在命令区中输入有关的命令,在提示栏中显示有关命令的含义和用法,并在显示区显示所要操作的图像。按照提示栏中的提示进行相关图像的输入、区域的预处理和结果输出存盘。
图2 图像处理系统的界面设计
通过使用相关函数可以实现MATLAB程序的调用,具体如下:
(1)将MATLAB中处理得到的图像传输到VB应用程序中。首先用uigetfile函数打开要处理的数字图像,在利用MATLAB有关图像处理函数进行处理后,运用MATLAB.Execute函数将处理后的图像存为一个文件,然后使用LoadPicture函数实现在VB应用程序中的调用。
(2)将VB文本框的内容传输到MATLAB中。首先用SetText函数获取VB文本框的内容,然后运用MATLAB.Execute函数将VB文本框的内容传输到MATLAB中。
(3)调用MATLAB程序操作时,有时会产生多余的窗口,通过运用PostMessage向所需要关闭的窗口发送WM_CLOSE消息即可关闭该多余窗口。
(1)获取二维轨迹的操作流程。先按下“单目相机标定”按钮,选择事先准备好的标定板(每行为4个直径Φ40mm的实心圆,每列为2个直径Φ40mm的实心圆,每行和每列的相邻圆圆心距都为80mm)进行数字图像的采集,然后运用标定程序进行标定;调用MATLAB函数进行图像的预处理,包括图像二值化、图像校正去除光照不均、自适应中值滤波去除噪声、用最大类间方差法进行图像分割提取目标,并将标定模型存为.mat格式。接着按下“选择标定模型”按钮,选择刚才的mat文件;输入要处理的图片数量,依次读取后,按下“获取物料二维轨迹”按钮就会出现其二维轨迹,如图3所示。
图3 物料运动的二维轨迹
(2)获取三维轨迹的操作流程。先按下“双目相机标定”按钮,选择事先准备好的标定板(同上),按下相机上的同步器对标定板进行拍摄,完毕后沿筛面长度方向等距离(40mm)移动标定板后继续进行拍摄,采集左右相机标定用五组数字图像。启动MATLAB进行图像的预处理获取每个标定圆的二维坐标值作为输入,调用BP神经网络标定程序进行标定,输出值为该圆的三维坐标值。如果网络收敛,则说明左右标定圆的二维坐标值与其三维坐标值形成了二维到三维的空间映射标定模型。将标定模型存为.mat格式。接着按下“选择标定模型”按钮,选择刚才的mat文件;输入要处理的图片数量,依次读取后,按下“获取物料三维轨迹”按钮就会出现其三维轨迹,如图4所示。
图4 物料运动的三维轨迹
程序编好后,可以利用VB自带的Packge &Deployment工具进行打包,将工程文件编译成可执行文件(后缀为.exe)。可执行文件可以脱离VB环境,在任何一台安装有MATLAB程序的计算机上运行,但自定义MATLAB函数需要随机拷贝。
编写了物料颗粒在清选筛上运动轨迹图像处理软件,其中运用了VB应用程序启动并控制MATLAB的技术:即利用VB实现可视化的图像处理界面,又运用作为ActiveX自动化服务器的MATLAB来处理二维数字图像序列,包括图像的预处理、二维轨迹的求取、三维轨迹的求取,并对开发遇到的关键问题及其解决进行了简要介绍。结果表明:基于ActiveX技术实现VB和MATLAB混合编程,既实现了人机交互的友好界面,又便捷了数字图像处理,提高了软件系统的整体性能。
[1]李春娥,李明.基于VB和MATLAB的医学图像处理系统设计[J].计算机技术与发展,2013,23(11):239-241.
[2]李茂宽,刘超.基于VB与MatrixVB的最优分类超球面实现[J].现代电子技术,2011,34(2):35-38.
[3]宋广东,刘统玉,王昌,等.基于COM组件的VB与MATLAB混合编程实现振动信号处理[J].山东科学,2010,23(1):32-35.
[4]李晓竹,尹玉萍,魏林.VB与MATLAB间的无缝集成及其在故障诊断中的应用[J].计算机与数字工程,2007,35(3):92-93.
[5]孙进.基于高速摄像的风筛式清选装置中物料运动规律的研究[D].镇江:江苏大学,2007:42-52.