孫 進(jìn),曹肖偉
(揚(yáng)州大學(xué) 機(jī)械工程學(xué)院,江蘇 揚(yáng)州 225127)
由于VB提供了標(biāo)簽、文本框、命令按鈕等可視化控件,可以輕松設(shè)置各控件的大小、位置等屬性,并自動生成相關(guān)代碼,所以使用VB在不太大的編寫代碼的工作量下能夠?qū)崿F(xiàn)內(nèi)容豐富的軟件界面。但是如果用VB來進(jìn)行復(fù)雜的運(yùn)算和圖像處理,則不僅運(yùn)算速度慢而且編程繁瑣而復(fù)雜。而MATLAB是一種由解釋性語言組成的命令行式交互式系統(tǒng),其圖像處理工具箱[1]在圖像處理和矩陣運(yùn)算處理上具有很大的優(yōu)勢,它提供了大量的自帶圖像處理算法函數(shù),包括空間變換、區(qū)域變換、噪聲去除、圖像分析和增強(qiáng)等;然而MATLAB的GUI功能較差,且開發(fā)出的界面不夠美觀,MATLAB程序不能脫離其環(huán)境運(yùn)行,MATLAB的實(shí)時效率低。VB長于界面設(shè)計(jì),弱于圖像處理,而MATLAB則與之相反,因此有必要將MATLAB與VB集成進(jìn)行混合編程,就可開發(fā)出界面簡潔同時圖像處理方便的軟件。
由于MATLAB與VB集成進(jìn)行混合編程有其獨(dú)特的優(yōu)越性,因此可以在享受高效圖像處理運(yùn)算庫的同時,實(shí)現(xiàn)與VB開發(fā)環(huán)境的無縫連接。目前,兩者集成的常用方法有:MatrixVB、編譯M文件、ActiveX技術(shù)等。
MatrixVB是Math Works公司針對VB開發(fā)的COM庫,共計(jì)有600多個函數(shù)。它可以不依賴于MATLAB的環(huán)境而又能對MATLAB函數(shù)和過程進(jìn)行有效調(diào)用。但是MatrixVB提供的圖形圖像處理函數(shù)僅具備了基本的圖像讀寫操作,無法勝任更加復(fù)雜的圖像處理任務(wù)。
MATLAB產(chǎn)生的M文件不能直接在VB中調(diào)用,MATLAB工具M(jìn)ATLAB COM Builder將M文件轉(zhuǎn)換成DLL,然后在VB集成開發(fā)環(huán)境中直接調(diào)用該DLL可實(shí)現(xiàn)VB+MATLAB的無縫集成。
有如.exe和.dll文件之類的遵循ActiveX規(guī)范編寫的可執(zhí)行代碼的ActiveX部件是VB工具箱的擴(kuò)充部分。同時ActiveX技術(shù)的自動化服務(wù)又為MATLAB所支持,因此在VB語言環(huán)境中,可以對MATLAB的圖像處理庫進(jìn)行調(diào)用。
相比較而言,MatrixVB由于提供的函數(shù)太少,因此無法勝任復(fù)雜的圖像處理任務(wù);借助編譯的M文件相當(dāng)于是函數(shù)的調(diào)用,該函數(shù)的輸入及輸出參數(shù)一旦確定,就無法修改;而ActiveX技術(shù)雖安裝MATLAB,但不啟動MATLAB,在VB應(yīng)用程序中可直接將MATLAB作為ActiveX部件進(jìn)行調(diào)用,具有實(shí)現(xiàn)二者無縫銜接的優(yōu)越性,為此在本課題研究中,作者將基于ActiveX技術(shù)的VB+MATLAB混合編程應(yīng)用于項(xiàng)目軟件設(shè)計(jì)中。
本文所研制的物料運(yùn)動圖像處理系統(tǒng)利用VB制作界面,然后在VB中通過ActiveX自動化MATLAB,通過調(diào)用MATLAB中的圖像處理函數(shù)實(shí)現(xiàn)對數(shù)字圖像的處理。
系統(tǒng)采用模塊化設(shè)計(jì)的思想,將系統(tǒng)分拆成多個子模塊,如圖1所示。物料運(yùn)動圖像處理系統(tǒng)由顯示區(qū)、命令區(qū)和提示區(qū)3個子模塊所組成。命令區(qū)又劃分為二維軌跡和三維軌跡獲取兩個子模塊。這兩個子模塊又可以細(xì)分為相機(jī)標(biāo)定、標(biāo)定模型選擇、圖片數(shù)據(jù)的輸入和處理、軌跡的獲取和存儲等一系列子模塊。每個子模塊與子模塊間進(jìn)行封裝,相互獨(dú)立,同時又可以通過接口進(jìn)行模塊之間的數(shù)據(jù)傳輸。子模塊的集成就形成了一個完整的物料運(yùn)動圖像處理系統(tǒng)。
圖1 圖像處理系統(tǒng)模塊化設(shè)計(jì)架構(gòu)
“MATLAB.Application”是MATLAB在VB應(yīng)用程序中的ActiveX對象名,其ActiveX對象的創(chuàng)建通過CreateObject函數(shù)來實(shí)現(xiàn)。
如圖2所示為物料運(yùn)動圖像處理系統(tǒng)的界面設(shè)計(jì),在命令區(qū)中輸入有關(guān)的命令,在提示欄中顯示有關(guān)命令的含義和用法,并在顯示區(qū)顯示所要操作的圖像。按照提示欄中的提示進(jìn)行相關(guān)圖像的輸入、區(qū)域的預(yù)處理和結(jié)果輸出存盤。
圖2 圖像處理系統(tǒng)的界面設(shè)計(jì)
通過使用相關(guān)函數(shù)可以實(shí)現(xiàn)MATLAB程序的調(diào)用,具體如下:
(1)將MATLAB中處理得到的圖像傳輸?shù)絍B應(yīng)用程序中。首先用uigetfile函數(shù)打開要處理的數(shù)字圖像,在利用MATLAB有關(guān)圖像處理函數(shù)進(jìn)行處理后,運(yùn)用MATLAB.Execute函數(shù)將處理后的圖像存為一個文件,然后使用LoadPicture函數(shù)實(shí)現(xiàn)在VB應(yīng)用程序中的調(diào)用。
(2)將VB文本框的內(nèi)容傳輸?shù)組ATLAB中。首先用SetText函數(shù)獲取VB文本框的內(nèi)容,然后運(yùn)用MATLAB.Execute函數(shù)將VB文本框的內(nèi)容傳輸?shù)組ATLAB中。
(3)調(diào)用MATLAB程序操作時,有時會產(chǎn)生多余的窗口,通過運(yùn)用PostMessage向所需要關(guān)閉的窗口發(fā)送WM_CLOSE消息即可關(guān)閉該多余窗口。
(1)獲取二維軌跡的操作流程。先按下“單目相機(jī)標(biāo)定”按鈕,選擇事先準(zhǔn)備好的標(biāo)定板(每行為4個直徑Φ40mm的實(shí)心圓,每列為2個直徑Φ40mm的實(shí)心圓,每行和每列的相鄰圓圓心距都為80mm)進(jìn)行數(shù)字圖像的采集,然后運(yùn)用標(biāo)定程序進(jìn)行標(biāo)定;調(diào)用MATLAB函數(shù)進(jìn)行圖像的預(yù)處理,包括圖像二值化、圖像校正去除光照不均、自適應(yīng)中值濾波去除噪聲、用最大類間方差法進(jìn)行圖像分割提取目標(biāo),并將標(biāo)定模型存為.mat格式。接著按下“選擇標(biāo)定模型”按鈕,選擇剛才的mat文件;輸入要處理的圖片數(shù)量,依次讀取后,按下“獲取物料二維軌跡”按鈕就會出現(xiàn)其二維軌跡,如圖3所示。
圖3 物料運(yùn)動的二維軌跡
(2)獲取三維軌跡的操作流程。先按下“雙目相機(jī)標(biāo)定”按鈕,選擇事先準(zhǔn)備好的標(biāo)定板(同上),按下相機(jī)上的同步器對標(biāo)定板進(jìn)行拍攝,完畢后沿篩面長度方向等距離(40mm)移動標(biāo)定板后繼續(xù)進(jìn)行拍攝,采集左右相機(jī)標(biāo)定用五組數(shù)字圖像。啟動MATLAB進(jìn)行圖像的預(yù)處理獲取每個標(biāo)定圓的二維坐標(biāo)值作為輸入,調(diào)用BP神經(jīng)網(wǎng)絡(luò)標(biāo)定程序進(jìn)行標(biāo)定,輸出值為該圓的三維坐標(biāo)值。如果網(wǎng)絡(luò)收斂,則說明左右標(biāo)定圓的二維坐標(biāo)值與其三維坐標(biāo)值形成了二維到三維的空間映射標(biāo)定模型。將標(biāo)定模型存為.mat格式。接著按下“選擇標(biāo)定模型”按鈕,選擇剛才的mat文件;輸入要處理的圖片數(shù)量,依次讀取后,按下“獲取物料三維軌跡”按鈕就會出現(xiàn)其三維軌跡,如圖4所示。
圖4 物料運(yùn)動的三維軌跡
程序編好后,可以利用VB自帶的Packge &Deployment工具進(jìn)行打包,將工程文件編譯成可執(zhí)行文件(后綴為.exe)??蓤?zhí)行文件可以脫離VB環(huán)境,在任何一臺安裝有MATLAB程序的計(jì)算機(jī)上運(yùn)行,但自定義MATLAB函數(shù)需要隨機(jī)拷貝。
編寫了物料顆粒在清選篩上運(yùn)動軌跡圖像處理軟件,其中運(yùn)用了VB應(yīng)用程序啟動并控制MATLAB的技術(shù):即利用VB實(shí)現(xiàn)可視化的圖像處理界面,又運(yùn)用作為ActiveX自動化服務(wù)器的MATLAB來處理二維數(shù)字圖像序列,包括圖像的預(yù)處理、二維軌跡的求取、三維軌跡的求取,并對開發(fā)遇到的關(guān)鍵問題及其解決進(jìn)行了簡要介紹。結(jié)果表明:基于ActiveX技術(shù)實(shí)現(xiàn)VB和MATLAB混合編程,既實(shí)現(xiàn)了人機(jī)交互的友好界面,又便捷了數(shù)字圖像處理,提高了軟件系統(tǒng)的整體性能。
[1]李春娥,李明.基于VB和MATLAB的醫(yī)學(xué)圖像處理系統(tǒng)設(shè)計(jì)[J].計(jì)算機(jī)技術(shù)與發(fā)展,2013,23(11):239-241.
[2]李茂寬,劉超.基于VB與MatrixVB的最優(yōu)分類超球面實(shí)現(xiàn)[J].現(xiàn)代電子技術(shù),2011,34(2):35-38.
[3]宋廣東,劉統(tǒng)玉,王昌,等.基于COM組件的VB與MATLAB混合編程實(shí)現(xiàn)振動信號處理[J].山東科學(xué),2010,23(1):32-35.
[4]李曉竹,尹玉萍,魏林.VB與MATLAB間的無縫集成及其在故障診斷中的應(yīng)用[J].計(jì)算機(jī)與數(shù)字工程,2007,35(3):92-93.
[5]孫進(jìn).基于高速攝像的風(fēng)篩式清選裝置中物料運(yùn)動規(guī)律的研究[D].鎮(zhèn)江:江蘇大學(xué),2007:42-52.