黃捷
(福建星網(wǎng)銳捷通訊股份有限公司 福建省福州市 350000)
每個(gè)公司都需要對(duì)出廠的產(chǎn)品進(jìn)行質(zhì)量控制,出廠前需要進(jìn)行產(chǎn)品外觀及性能檢查。特別是帶按鍵的產(chǎn)品進(jìn)行按鍵絲印的檢測(cè),如果按鍵位置裝錯(cuò)或者絲印缺失等,都會(huì)引起客戶的投訴,輕責(zé)需要批量返工,重則需要進(jìn)行大額賠償,進(jìn)而客戶對(duì)公司的品質(zhì)失去信心。目前大多制造工廠依然使用人工目視檢測(cè)的方法,這樣不但效率底下,而且漏檢、誤判等現(xiàn)象時(shí)有發(fā)生。一方面人工成本不斷提升,另一方面是對(duì)品質(zhì)的高度要求,所以使用自動(dòng)化設(shè)備替代人工目視檢查的需求尤為突出[1]。
LabVIEW 是由美國(guó)NI 公司開發(fā),專為工業(yè)生產(chǎn)中的測(cè)試、測(cè)量和控制應(yīng)用而設(shè)計(jì)的圖形化系統(tǒng)工程軟件,可快速訪問硬件和數(shù)據(jù)信息,使用內(nèi)置控件可快速的制作出美觀且實(shí)用的測(cè)試軟件界面。
HALCON 是德國(guó)MVtec 公司開發(fā)的一套完善的標(biāo)準(zhǔn)的機(jī)器視覺算法包,擁有應(yīng)用廣泛的機(jī)器視覺集成開發(fā)環(huán)境。它節(jié)約了產(chǎn)品成本,縮短了軟件開發(fā)周期——HALCON 靈活的架構(gòu)便于機(jī)器視覺的快速開發(fā)。
系統(tǒng)軟件,使用LabVIEW 軟件編寫框架,核心的機(jī)器視覺及缺陷檢測(cè)由Halcon 實(shí)現(xiàn)后被LabVIEW 調(diào)用。
系統(tǒng)硬件(如圖1),主要包括升降系統(tǒng),工業(yè)相機(jī)+鏡頭,LED 光源。
根據(jù)按鍵絲印可能出現(xiàn)的缺陷,例如缺失,按鍵裝錯(cuò),絲印被污染等,需要選擇高分辨率工業(yè)相機(jī),配合無畸變廣角鏡頭,光源需要無頻閃,亮度可調(diào),關(guān)照均勻的白色LED 環(huán)形光源。
系統(tǒng)工作過程(焦距與光源已提前設(shè)置好):
(1)待測(cè)物放置于測(cè)試平臺(tái)上。
(2)工業(yè)相機(jī)采集高清圖像。
(3)計(jì)算機(jī)通過USB 接口讀取時(shí)時(shí)圖像。
(4)軟件進(jìn)行圖像處理與缺陷檢測(cè),并對(duì)缺陷位置進(jìn)行標(biāo)注,同時(shí)后臺(tái)進(jìn)行數(shù)據(jù)統(tǒng)計(jì)[2]。
圖形采集方式有兩種方式,一是通過LabView 視覺模塊的NIIMAQDx 模塊中提供了獲取圖像的各種子VI,包括打開相機(jī),配置相機(jī),啟動(dòng)采集,獲取圖像,關(guān)閉相機(jī)等子VI 模塊,通過對(duì)這些字VI 模塊的調(diào)用及編程實(shí)現(xiàn)對(duì)圖形進(jìn)程采集。
另一種是調(diào)用相機(jī)公司提供的DLL 的動(dòng)態(tài)鏈接庫文件,使用LabView 提供的調(diào)用庫函數(shù)節(jié)點(diǎn)(Call Library Function Node.CLFN)通過對(duì)該節(jié)點(diǎn)的配置實(shí)現(xiàn)DLL 的調(diào)用,調(diào)用時(shí)需根據(jù)該相機(jī)的SDK 文檔正確調(diào)用相應(yīng)的函數(shù),并進(jìn)行函數(shù)輸入輸出的參數(shù)配置,進(jìn)而實(shí)現(xiàn)圖像采集的功能。
在圖像采集過程,由于各種原因總會(huì)引入一下干擾信息,而在圖像分析中,圖像信息的準(zhǔn)確度直接影響識(shí)別算法的設(shè)計(jì)與檢測(cè)效率,因此在圖像分析(特征提取、分割、匹配和識(shí)別等)前,需要進(jìn)行預(yù)處理。圖像預(yù)處理的主要目的是去除圖像中不關(guān)注的信息,重點(diǎn)關(guān)注有用的真實(shí)信息,增強(qiáng)目標(biāo)信息的可檢測(cè)性、最大限度地簡(jiǎn)化數(shù)據(jù),從而提高圖像分析(匹配,識(shí)別等)的可靠性和高效性[3]。
匹配模板的生產(chǎn)過程也就是圖像特征值的提取過程。特征值提取是整個(gè)圖像識(shí)別的重要環(huán)節(jié)。由于是配合生產(chǎn)使用,不但要求準(zhǔn)確度,生產(chǎn)效率也是要重點(diǎn)考慮的。本系統(tǒng)檢測(cè)重點(diǎn)是按鍵絲印,所以需要將感興趣的區(qū)域(也就是ROI)確定出來,ROI 的確定,LABVIEW 提供了一個(gè)方便的VI(IMQA ConstrctROI),可以手動(dòng)確定ROI 區(qū)域,然后使用IMAQ xtract 進(jìn)行圖像分割,分割后才能進(jìn)行下一步模板的建立。
模板匹配[1]是一項(xiàng)用于圖像中快速定位已知參量或基準(zhǔn)模式,是一項(xiàng)關(guān)鍵技術(shù)[2]。以及其模板匹配可以提供一個(gè)圖像中的特定特征值是否存在,以及數(shù)量和位置。通過使用圖像的特征值與待測(cè)圖像進(jìn)行匹配,該部分的完成是整個(gè)系統(tǒng)核心部分[3]。
Halcon 中提供的匹配有基于組件匹配、基于灰度值匹配、基于形狀匹配。這三種匹配的方法各具特點(diǎn),分別適用于不同的圖像特征,但都需要先創(chuàng)建模板,再尋找模板。在目標(biāo)檢測(cè)過程中,常用的方法就是設(shè)置一個(gè)模板,以窗口滑動(dòng)的方式遍歷整幅待檢測(cè)的圖像進(jìn)行匹配。
創(chuàng)建模板的函數(shù):create_shape_model(Template::NumLevels, AngleStart, AngleExtent,AngleStep,Optimization,Metric,Contrast, MinContrast : ModelID ) 。
Template:要建立模板原始圖形,要使用圖形特征鮮明的圖形,但又不能太大。
NumLevels:金字塔的層數(shù),金字塔分層法能有效的提高圖像匹配效率,一般設(shè)為auto,算法會(huì)自動(dòng)計(jì)算金字塔的層數(shù)。
AngleStart:匹配起始角度。
AngleExtent:匹配的角度范圍。
AngleStep:配旋轉(zhuǎn)角度的步長(zhǎng),一般設(shè)為auto,算法將會(huì)基于模板的大小自動(dòng)定義一個(gè)合適的角度步長(zhǎng)。
Optimization:創(chuàng)建模板的方法,一般設(shè)為auto,算法將會(huì)自動(dòng)確定模型的點(diǎn)數(shù)。
Metric:匹配模板的條件, 設(shè)為 'use_polarity',圖像中的目標(biāo)必須和模型具有一樣的對(duì)比度。
Contrast:對(duì)比度,測(cè)量目標(biāo)與背景之間和目標(biāo)不同部分之間局部的灰度值差異。
MinContrast:將模板從圖像的噪聲中分離出來。
ModelID:輸出模板句柄。
模板創(chuàng)建好后,就可以用實(shí)時(shí)采集到的圖像,來進(jìn)行模板匹配。就是在時(shí)時(shí)圖像中找出最佳匹配的模板,函數(shù)返回找到圖像的位置和旋轉(zhuǎn)角度。
模板匹配函數(shù):find_shape_model(Image::ModelID, AngleStart, AngleExtent, MinScore, NumMatches, MaxOverlap, SubPixel, NumLevels, Greediness : Row, Column, Angle,Score) 。
Image:被搜索的圖像。
ModelID:模板句柄,由create_shape_model()生成。
AngleStart:搜索起始角度。
AngleExtent:搜索角度范圍,必須與創(chuàng)建模板時(shí)的有交集。
MinScore:最小匹配值,也就是相似度,當(dāng)相似度大于此設(shè)置值時(shí)才會(huì)輸出結(jié)果。
NumMatches:輸出的匹配的最大個(gè)數(shù)。
MaxOverlap:目標(biāo)存在重疊時(shí)設(shè)置,本系統(tǒng)不允許目標(biāo)重疊,顧設(shè)置為0
SubPixel:計(jì)算精度的設(shè)置,決定是否精確到亞像素級(jí),設(shè)為’interpolation’,這個(gè)模式速度較快,設(shè)為’least_square’,’ lease_square_high’,精度更高,但這樣會(huì)增加額外的時(shí)間,因此,這需要在效率與精度進(jìn)行妥協(xié),本次由于圖像特征明顯,顧設(shè)為’interpolation’。
NumLevels:搜索時(shí)金字塔的層數(shù),一般與create_shape_model()相一致。
Greediness:貪婪度,搜索啟發(fā)式,0-1 之間,在大多數(shù)情況下,在能夠匹配的情況下,盡可能的增大其值,本次設(shè)置為0.8。
Row, Column, Angle, Score:輸出匹配位置的行和列坐標(biāo)、角度、相似度得分。
本系統(tǒng)使用的是基于形狀匹配,為了達(dá)到較好的效果,做了許多測(cè)試,根據(jù)實(shí)際情況做了一些設(shè)置加快搜索匹配:
1,MinScore 值可配置,在系統(tǒng)中實(shí)時(shí)設(shè)置,值越大,速度越快。
2,限定搜索ROI 的區(qū)域,限定允許的旋轉(zhuǎn)范圍和大小范圍,本次圖像的ROI 區(qū)域較多,但是相對(duì)位置與角度都不變,只要找到一個(gè),其他圖像可以根據(jù)坐標(biāo)軸計(jì)算,確定其位置與角度。
通過研究,目前LabView 調(diào)用Halcon 的方法有兩種,但都需要 調(diào) 用halcon.dll,halcondotnet.dll,hdevenginedotnet.dll,這 三 個(gè)DLL 文件。
圖2:構(gòu)建halcon 創(chuàng)建模板函數(shù)圖
一種是labview 使用.Net 構(gòu)造器節(jié)點(diǎn),調(diào)用hal,依據(jù)已經(jīng)寫好的halcon 程序,依次構(gòu)建相關(guān)的halcon 算子,達(dá)到調(diào)用halcon的目的,實(shí)現(xiàn)相關(guān)的halcon 功能,如圖2,為構(gòu)建halcon 的創(chuàng)建模板函數(shù)[4]。
另一種是labview 先構(gòu)建halcon 運(yùn)行環(huán)境,然后直接調(diào)用HDevEngine,也就是直接調(diào)用運(yùn)行使用halcon 已經(jīng)寫好的程序,就不需要像第一種方法那樣重復(fù)進(jìn)行算子構(gòu)建。
第一種方法過程相對(duì)復(fù)雜,無論是BUG 修改還是后續(xù)程序的升級(jí)都相對(duì)繁瑣,但勝在程序的保密性好。
第二種方法過程簡(jiǎn)單,halcon 程序可以直接在文檔修改,但是halcon 程序文檔不是加密文件,故保密性較差,但由于是公司內(nèi)部使用,本系統(tǒng)采用第二種方法。
本文介紹了利用LabView 軟件平臺(tái),通過調(diào)用外部Halcon 的機(jī)器視覺功能,結(jié)合自帶的VISION 實(shí)現(xiàn)對(duì)按鍵絲印的自動(dòng)化檢測(cè),實(shí)際投入生產(chǎn)實(shí)踐表明,此檢測(cè)系統(tǒng)能滿足公司按鍵絲印檢測(cè)要求,有效的提升檢測(cè)效率。