孫 進,曹肖偉
(揚州大學 機械工程學院,江蘇 揚州 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)??蓤绦形募梢悦撾xVB環境,在任何一臺安裝有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.