一、 概述
利用工業(yè)數(shù)碼相機(jī)拍攝照片,獲取模擬圖像,再通過(guò)圖像采集卡,對(duì)圖像進(jìn)行離散化 后傳送給計(jì)算機(jī),計(jì)算機(jī)將得到的數(shù)字圖像按一定的圖像文件格式保存;然后調(diào)用該圖像處理系統(tǒng)對(duì)圖像處理分析,根據(jù)需要提取的特征值,最后對(duì)得到的特征數(shù)值進(jìn)行數(shù)據(jù)重構(gòu)分析,獲取精度公差結(jié)果。
二、 該軟件的構(gòu)件關(guān)系
本軟件的設(shè)計(jì)是以VB6.0為客戶(hù),MATLAB6.5與AUTOCAD為服務(wù)器來(lái)共同完成的。利用VB的可視化設(shè)計(jì)構(gòu)建人機(jī)對(duì)話(huà)界面,利用MATLAB的圖形處理功能和強(qiáng)大的編程功能完成軟件核心處理,而后利用AUTOCAD的圖形標(biāo)注和測(cè)量功能完成圖像數(shù)據(jù)的獲得。
對(duì)AutoCAD對(duì)象控制[1]:acaddoc.sendcommand "符合Autocad 的指令" ;該命令可以向AutoCAD發(fā)出指令調(diào)用且執(zhí)行該指令。
對(duì)MATLAB的對(duì)象控制[2]:在將MATLAB作為服務(wù)器利用ActiveX技術(shù)進(jìn)行調(diào)用時(shí),在操作系統(tǒng)的注冊(cè)表中只有以下三個(gè)函數(shù)可以用。
1) matlab.execute “ MATLAB格式的程序”;該句用于執(zhí)行MATLAB的命令
2) matlab.getfullmatrix(“a”, “base”, “mreal”,“mimag”);該句用于執(zhí)行從MATLAB中讀出距陣的數(shù)值,放在數(shù)組a中,mreal為距陣的實(shí)部,mimag為距陣的虛部。
3) matlab.putfullmatrix(“a”, “base”, “mreal”,“mimag”);該句用于執(zhí)行把外部的數(shù)組讀入到MATLAB中距陣的數(shù)值,放在距陣a中,mreal為距陣的實(shí)部,mimag為距陣的虛部。
在VB中應(yīng)用符合MATLAB與AutoCAD的命令,首先必須建立VB與MATLAB,VB與AutoCAD之間的聯(lián)系。這是通過(guò)在VB中書(shū)寫(xiě)公用變量聲名的方式來(lái)實(shí)現(xiàn)的。
其核心程序?yàn)椋?br />
Public matlab As Object ;全局變量聲名
Public acaddoc As Object
Public mdspace As Object
Public acadapp As Object
Public acadutil As Object
On Error Resume Next ;對(duì)于matlab的打開(kāi)、聲明和錯(cuò)誤處理
Set matlab = GetObject( "matlab.application"
If Err Then
Err.Clear
Set matlab = CreateObject("matlab.application"
If Err Then
MsgBox "軟件不能打開(kāi)MATLAB,請(qǐng)重試!"
Exit Sub
End If
End If
以下是autocad的引用,對(duì)AutoCAD的打開(kāi)、聲明和錯(cuò)誤處理
On Error Resume Next
Set acadapp = GetObject(, "autocad.application"
If Error Then
Err.Clear
Set acadapp = CreateObject("autocad.application"
If Err Then
MsgBox "無(wú)法引導(dǎo)AUTOCAD,請(qǐng)檢查是否已安裝了AUTOCAD2000."
End If
End If
Set acaddoc = acadapp.activedocument ;設(shè)置autocad的具體工作情況
Set mdspace = acaddoc.modelspace
Set acadutil = acaddoc.utility
acadapp.Visible = False
三、 軟件的核心算法
1、 灰度圖像的算法
邊緣是指其周?chē)笏鼗叶扔须A躍變化或者屋頂變化的那些要素的集合[4]。求解二維實(shí)函數(shù)的梯度后選擇合適的閾值提取邊緣的方法稱(chēng)為梯度閾值法。這種微分算法運(yùn)算簡(jiǎn)單,但抗干擾能力差。經(jīng)典的邊緣檢測(cè)方法是考察圖像的每個(gè)像素的某個(gè)領(lǐng)域內(nèi)灰度的變化,利用邊緣鄰近一階或二階導(dǎo)數(shù)變化規(guī)律,用簡(jiǎn)單的方法檢測(cè)邊緣,該方法常被稱(chēng)為邊緣檢測(cè)局部算子。
Roberts算子的基本原理:
對(duì)數(shù)字圖像的灰度函數(shù)為Z=f(x,y),x和y分別為像素的坐標(biāo)。若在坐標(biāo)點(diǎn)(x,y)處有邊緣,則利用f(x,y)在x與y方向上的變化率可以算出其變化最快的方向,即梯度方向。
若考慮數(shù)字圖像的離散域,可以直接用圖像的一階差分代替圖像函數(shù)的偏導(dǎo)數(shù),二維離散圖像函數(shù)在x方向與y方向的一階差分分別定義為f(x+1,y)-f(x,1)與f(x,y+1)-f(x,y)。
2、 二值圖像的算法
二值圖像中所有的像素只能從0和1這兩個(gè)值中取值,因此,在MATLAB中,二值圖像用一個(gè)由0和1組成的二維矩陣來(lái)表示。它們分別代表著關(guān)閉和打開(kāi),關(guān)閉表示該像素處于背景,而打開(kāi)表示該像素處于前景。以這種方式來(lái)進(jìn)行操作圖像更容易識(shí)別出圖像的結(jié)構(gòu)特征。
四、 該軟件的操作方法
首先是,原照片圖像的獲取工作??梢允遣噬掌部梢允呛诎渍?,它們都是模擬圖像,如果想要對(duì)其進(jìn)行處理就必須先將其轉(zhuǎn)換為數(shù)字圖像。其次,是圖像的預(yù)處理。用戶(hù)可以通過(guò)該軟件進(jìn)行各種圖像格式的剪裁、翻轉(zhuǎn)、比例調(diào)整、濾波,二值圖像的腐蝕處理、膨脹處理、直方圖的均衡化等等。再次,是灰度圖像的處理。用戶(hù)可以根據(jù)自己的需要通過(guò)比較各種算子的處理結(jié)果來(lái)確定所獲取的圖像,及而是對(duì)灰度果圖像的處理結(jié)果進(jìn)行圖像的擬合重構(gòu)分析。如果用戶(hù)對(duì)灰度圖像的處理結(jié)果不滿(mǎn)意,可以通過(guò)二值圖像操作菜單欄進(jìn)行二值圖像的相關(guān)操作;在這里用戶(hù)可以進(jìn)行,二值圖像的骨架化處理,其精度可以高達(dá)一個(gè)象素級(jí)。接下來(lái),用戶(hù)將進(jìn)行的是圖像幾何尺寸的重構(gòu)和公差的計(jì)算顯示。在此處,用戶(hù)可以通過(guò)點(diǎn)擊菜單欄相應(yīng)的內(nèi)容獲取,其點(diǎn)擊的順序是從上向下依次序點(diǎn)擊。最后,在相關(guān)信息菜單欄用戶(hù)可以通過(guò)點(diǎn)擊獲取已打開(kāi)的圖片信息,圓度公差表以及該軟件的版權(quán)聲明信息。
五、 一個(gè)簡(jiǎn)單的實(shí)例
1.該軟件的安裝
單擊setup.exe,依照一般軟件的安裝方式就可以完成安裝。初始密碼為:111111。 圖1 安裝界面
圖2 初始界面
2.該軟件的操作
依照該軟件的相關(guān)菜單就可以完成操作。其順序?yàn)椋簣D像的預(yù)處理,灰度處理(或二值處理),數(shù)據(jù)重構(gòu),公差獲得。
以一個(gè)茶杯的照片為例:茶杯直徑為35mm;其點(diǎn)陣1024×768像素 圖3 原始圖像 圖4 灰度圖像剪裁(488×488像素) 圖5 該照片的灰度直方圖
圖6 灰度算子獲取輪廓邊界 圖7 圓形的重構(gòu)
結(jié)果分析:外包絡(luò)圓直徑為像素492;內(nèi)包絡(luò)圓直徑為像素486;該茶杯的圓度公差為6個(gè)像素,即0.05mm。該結(jié)果與實(shí)測(cè)結(jié)果基本吻合。
3.注意事項(xiàng)
該軟件要求用戶(hù)系統(tǒng)中必須安裝MATLAB和AUTOCAD;如果沒(méi)用安裝其中的任何一個(gè),本軟件將提示用戶(hù)不可正常工作的原因。
六、 結(jié)束語(yǔ)
通過(guò)以上分析,文中已經(jīng)清晰地構(gòu)建出了該軟件的系統(tǒng)模型。文中同時(shí)給出了核心部分程序的基本算法以及三個(gè)軟件的調(diào)用申請(qǐng)指令;這對(duì)于圖形圖像軟件的開(kāi)發(fā)者來(lái)說(shuō),具有較好的參考價(jià)值。實(shí)踐表明,本軟件運(yùn)行結(jié)果真實(shí)、有效,具有很強(qiáng)的實(shí)用性。
參考文獻(xiàn)
[1] 胡海青等 著.Autocad的設(shè)計(jì)與二次開(kāi)發(fā)[M].北京:化學(xué)工業(yè)出版社,2001,3.
[2] 王曉丹,吳崇明 編著.基于MATLAB的系統(tǒng)分析與設(shè)計(jì)——圖像處理[M].西安:西安電子科技大學(xué)出版社,2004,5.
[3] 張兆禮,趙春暉,梅曉丹. 現(xiàn)代圖像處理技術(shù)及Matlab 實(shí)現(xiàn)[M]. 北京:人民郵電出版社, 2001,5.
[4] 張杰.一種實(shí)用的二值圖像細(xì)化算法[J]. 計(jì)算機(jī)應(yīng)用及軟件,1998,(12):28-32.