童煒健 方錦樹 余漢泉
(佛山科學(xué)技術(shù)學(xué)院,廣東 佛山 528231)
測(cè)量技術(shù)是現(xiàn)代化工業(yè)的基礎(chǔ)技術(shù)之一。作為工業(yè)發(fā)展的基礎(chǔ),現(xiàn)代化測(cè)量技術(shù)是在現(xiàn)代化生產(chǎn)中保證產(chǎn)品質(zhì)量的關(guān)鍵。測(cè)量的精度和效率在一定程度上決定了制造業(yè)乃至科學(xué)技術(shù)發(fā)展的水平。
目前,一般通過(guò)游標(biāo)卡尺、螺旋測(cè)微器以及三坐標(biāo)測(cè)量等方式測(cè)量相關(guān)參數(shù)。一方面,這類測(cè)量方式都需要接觸零件表面,會(huì)導(dǎo)致零件表面出現(xiàn)一定程度的損傷,而基于機(jī)器視覺(jué)的測(cè)量具有非接觸性、非破壞性、精度高以及速度快等特點(diǎn)。另一方面,人員測(cè)量不可避免地會(huì)出現(xiàn)效率低、因疲勞而導(dǎo)致誤檢等現(xiàn)象,難以滿足如今制造業(yè)實(shí)行的實(shí)時(shí)、快速、在線和非接觸檢測(cè)的要求,而基于機(jī)器視覺(jué)的測(cè)量方法填補(bǔ)了人工檢測(cè)存在的缺陷。運(yùn)用工業(yè)攝像頭和圖像處理方法對(duì)樣品的外觀尺寸(例如外形輪廓、孔徑、高度、面積以及角度等)進(jìn)行非接觸式自動(dòng)化測(cè)量是一種新興測(cè)量技術(shù)。該技術(shù)通過(guò)自動(dòng)化測(cè)量和分析,擺脫因人工操作而產(chǎn)生誤差的影響,具有精度高、檢測(cè)范圍大以及檢測(cè)速度快的特點(diǎn),可以滿足企業(yè)生產(chǎn)對(duì)實(shí)時(shí)在線檢測(cè)、長(zhǎng)時(shí)間以及高精度重復(fù)工作的要求。
測(cè)量裝置的功能價(jià)值需求包括以下3點(diǎn):1) 項(xiàng)目裝置使用顯微攝像頭和動(dòng)態(tài)掃描對(duì)拍攝的樣品圖片進(jìn)行合成,具有智能、高精度、非接觸性、非破壞性、精度高以及速度快等特點(diǎn)。2) 項(xiàng)目裝置使用嵌入式系統(tǒng)代替PC端,大大降低了成本,具有較高的便攜性。3) 項(xiàng)目裝置具有控制調(diào)試手段,且成本較低,系統(tǒng)穩(wěn)定。
針對(duì)以上功能要求,該裝置的功能設(shè)計(jì)如下:以ARM開發(fā)板為核心平臺(tái),與顯微攝像平臺(tái)構(gòu)成一體化功能設(shè)備。首先,由顯微攝像頭對(duì)待測(cè)樣品進(jìn)行圖像采集。其次,由OpenCV圖像處理算法程序在核心板上對(duì)圖像包進(jìn)行拼接整合,得出檢測(cè)數(shù)據(jù)。最后,將所得數(shù)據(jù)轉(zhuǎn)交操作系統(tǒng)平臺(tái)進(jìn)行數(shù)據(jù)可視化,主要功能設(shè)計(jì)如圖1所示。
圖1 主要功能設(shè)計(jì)圖
嵌入式系統(tǒng)初始化后進(jìn)入等待操作模式,操作者單擊屏幕開始操作,嵌入式系統(tǒng)利用移動(dòng)載物臺(tái)和顯微攝像頭對(duì)被測(cè)物體進(jìn)行掃描拍攝并儲(chǔ)存,圖像采集完成后對(duì)采集到的圖片進(jìn)行拼接,使其組成1張能完整顯示被測(cè)物體的圖片,對(duì)樣品圖片進(jìn)行分析計(jì)算,即可得出該樣品的具體參數(shù)并在屏幕上顯示。嵌入式系統(tǒng)初始化后,如果操作者長(zhǎng)時(shí)間未進(jìn)行操作,系統(tǒng)就將進(jìn)入低功耗模式,關(guān)閉屏幕等耗電較大的模塊,等待操作者喚醒系統(tǒng)。主要功能流程如圖2所示。
圖2 精密智能測(cè)量流程圖
該測(cè)量裝置以嵌入式系統(tǒng)為主,是對(duì)攝像頭、顯示屏以及可移動(dòng)載物臺(tái)等各個(gè)硬件模塊進(jìn)行集成的功能一體化設(shè)備,其設(shè)計(jì)外觀如圖3所示。作為核心主控系統(tǒng),ARM嵌入式系統(tǒng)對(duì)各個(gè)功能模塊進(jìn)行連接控制,其具體的功能結(jié)構(gòu)框架如圖4所示。
圖3 裝置外觀設(shè)計(jì)圖
圖4 裝置總體結(jié)構(gòu)框架圖
鑒于OpenCV可以在Linux、Windows、Android和macOS操作系統(tǒng)上運(yùn)行,采用英偉達(dá)Jetson Nano嵌入式開發(fā)板作為上位機(jī),Jetson Nano的CPU是四核ARM A57內(nèi)核,AI算力最高473GFLOPS,在性價(jià)比和主板性能等方面均符合計(jì)劃要求。同時(shí),該開發(fā)板已搭載Ubuntu系統(tǒng),安裝配置即可實(shí)現(xiàn)OpenCV和QT可視化界面的功能。通過(guò)在該開發(fā)板上植入運(yùn)行基于QT所設(shè)計(jì)的用戶操作界面,使用戶可以在該操作界面實(shí)時(shí)操控及掌握檢測(cè)數(shù)據(jù)(替代PC端),在實(shí)現(xiàn)降低成本的同時(shí),大大提高便攜性。
攝像頭使用Linux系統(tǒng)UVC協(xié)議免驅(qū)工業(yè)顯微攝像頭,無(wú)需安裝驅(qū)動(dòng)即可在嵌入式系統(tǒng)中使用,且攝像頭具有無(wú)畸變矯正算法,大大降低了拍攝帶來(lái)的誤差。采用機(jī)器視覺(jué)方法實(shí)現(xiàn)大尺度樣品的精細(xì)測(cè)度測(cè)量存在1組矛盾,即量程和精度要求之間的相互矛盾關(guān)系。如果采用廣角攝像頭實(shí)現(xiàn)大量程的測(cè)量,就意味測(cè)量精度會(huì)降低,而采用顯微攝像頭實(shí)現(xiàn)精密尺度測(cè)量,其量程范圍會(huì)變小。為了解決這一矛盾,該項(xiàng)目提出采用動(dòng)態(tài)掃描顯微攝像頭的方法,既利用顯微攝像頭實(shí)現(xiàn)精密尺度測(cè)量的功能,又利用動(dòng)態(tài)掃描方法來(lái)實(shí)現(xiàn)大尺度樣品全景測(cè)量的功能。
動(dòng)態(tài)掃描的難點(diǎn)在于軌跡運(yùn)動(dòng)速度及范圍,進(jìn)行精準(zhǔn)測(cè)量的目標(biāo)物往往很小,那么就需要準(zhǔn)確的移動(dòng)定位以及移動(dòng)時(shí)間,否則動(dòng)態(tài)掃描就會(huì)出現(xiàn)圖像無(wú)法拼接的問(wèn)題。該測(cè)量裝置通過(guò)利用對(duì)載物臺(tái)的可編程控制,可以把控掃描移動(dòng)速度及距離。
可移動(dòng)載物臺(tái)由STM32F1微控制器、3個(gè)DM420YS驅(qū)動(dòng)器以及3個(gè)28微型步進(jìn)電機(jī)直線滑臺(tái)組成,滑臺(tái)主體如圖5所示。對(duì)STM32F1進(jìn)行C語(yǔ)言編程,控制其高級(jí)控制定時(shí)器TIM1~3通道向3個(gè)驅(qū)動(dòng)器分別輸出3路特定占空比的PWM斬波恒流,從而實(shí)現(xiàn)通過(guò)3個(gè)驅(qū)動(dòng)器對(duì)滑臺(tái)步進(jìn)電機(jī)進(jìn)行驅(qū)動(dòng)的目標(biāo),滑臺(tái)因此得以在平面矩形內(nèi)移動(dòng),可由驅(qū)動(dòng)器的撥碼開關(guān)調(diào)節(jié)細(xì)分?jǐn)?shù)、對(duì)STM32F1定時(shí)器預(yù)分頻器進(jìn)行編程控制以及C語(yǔ)言延時(shí)函數(shù)等方式實(shí)現(xiàn)精準(zhǔn)控制滑臺(tái)移動(dòng)速度及距離的功能。而STM32F1微控制器又通過(guò)USB串口與上位機(jī)主控系統(tǒng)進(jìn)行連接,以實(shí)現(xiàn)數(shù)據(jù)通信,通過(guò)特定字符串命令實(shí)現(xiàn)主控系統(tǒng)實(shí)時(shí)控制載物平臺(tái)的功能。
圖5 滑臺(tái)結(jié)構(gòu)圖
為了呈現(xiàn)拍攝到的物體圖像和物體數(shù)據(jù),特搭配10.1寸電容觸摸屏,單擊屏幕上即可完成對(duì)物體的采集、計(jì)算和數(shù)據(jù)顯示等操作。
作為該測(cè)量裝置關(guān)鍵的測(cè)量應(yīng)用部分,核心圖像處理核心模塊主要分為圖像拼接模塊、圖像預(yù)處理模塊、圖像Canny邊緣檢測(cè)模塊以及圖像輪廓描繪和計(jì)算模塊。
在進(jìn)行測(cè)量時(shí),把被測(cè)物體放置在平移臺(tái)上,使用符合該試驗(yàn)的顯微攝像頭進(jìn)行拍攝,再使用載物臺(tái)移動(dòng)物體并進(jìn)行掃描拍攝,將得到的多張待測(cè)樣品圖例上傳圖像拼接模塊,由其利用特征信息對(duì)拍攝樣品進(jìn)行處理,就可以獲得1張完整的待測(cè)樣品成型圖。但是這張成型的待測(cè)樣品圖例尚存在圖像背景因素和自身因素等干擾,并不能達(dá)到實(shí)際測(cè)量的要求,須經(jīng)圖像預(yù)處理模塊進(jìn)行灰度化轉(zhuǎn)化和形態(tài)學(xué)處理后方可消除大部分無(wú)關(guān)因素的干擾。在此基礎(chǔ)上,將圖例傳給圖像Canny邊緣檢測(cè)模塊,以檢測(cè)明顯的待測(cè)樣品圖例的邊緣輪廓并自動(dòng)在顯示屏上顯示,為測(cè)量者展示直觀的測(cè)量結(jié)果。最終待測(cè)樣品圖例將自動(dòng)交付給圖像輪廓描繪和計(jì)算模塊,在Canny邊緣檢測(cè)圖和原圖上進(jìn)行明顯的輪廓描繪,并計(jì)算符合實(shí)際測(cè)量要求的數(shù)據(jù)。
在實(shí)際開發(fā)中,圖像拼接技術(shù)一般包括5個(gè)部分:圖像特征的尋找和匹配、攝像機(jī)的校準(zhǔn)、圖像的變形、曝光補(bǔ)償以及圖像融合,實(shí)現(xiàn)過(guò)程非常煩瑣。為了適應(yīng)實(shí)際工業(yè)的開發(fā)、應(yīng)用,該文主要把圖像拼接技術(shù)簡(jiǎn)化為特征點(diǎn)的提取、圖像的配準(zhǔn)以及圖像的融合3個(gè)部分,并采用OpenCV中的一個(gè)新模塊Stitching來(lái)對(duì)整體進(jìn)行圖像拼接,它所有的相關(guān)函數(shù)都封裝在Stitcher類中。封裝的Stitcher類底層可以實(shí)現(xiàn)使用魯棒性的加速穩(wěn)健特征(SRUF)算法對(duì)圖像進(jìn)行特征點(diǎn)提取的功能,同時(shí)使用隨機(jī)抽樣一致(RANCAC)算法進(jìn)行圖像配準(zhǔn)、融合,可以提高實(shí)際的開發(fā)效率。
例如,對(duì)待測(cè)樣品進(jìn)行掃描采樣,采樣4張圖(如圖6所示),利用上述的圖像拼接技術(shù)準(zhǔn)確識(shí)別這4張圖片的像素特征點(diǎn),然后將各張圖片兩兩之間進(jìn)行對(duì)比,選取相近的像素點(diǎn)進(jìn)行拼接,最終可以獲得1張拼接成功的圖像,如圖7所示。由此可見(jiàn),利用提取像素點(diǎn)進(jìn)行圖像拼接的方式可以有效保證待測(cè)樣品輪廓的完整度。
圖6 樣品采樣圖
雖然對(duì)拍攝出來(lái)的多張圖片進(jìn)行正確拼接后能得到的1張完整的拼接圖,但是它仍然包括與測(cè)量目標(biāo)無(wú)關(guān)的信息,因此,為了凸顯測(cè)量目標(biāo)信息,必須對(duì)圖像進(jìn)行預(yù)處理。
3.2.1 圖像的灰度圖轉(zhuǎn)化
在圖像處理中,由于顯微攝像頭拍攝的圖像是彩色圖像,圖像的邊緣明顯存在部分微黃的色彩,這會(huì)對(duì)目標(biāo)信息有很大的干擾,因此往往需要對(duì)圖像進(jìn)行圖像灰度化,就是把彩色圖像轉(zhuǎn)化為灰度圖像。
彩色圖像通常包括3個(gè)分量(R、G和B),圖像灰度化就是使彩色圖像的R、G和B相等的過(guò)程,使圖像的每個(gè)像素介于黑色與白色之間的多級(jí)色彩深度中,當(dāng)灰度值越大時(shí),像素點(diǎn)越亮,反之則越暗。而圖像的灰度化值最小為0(黑色),最大值為255(白色)。
在圖像灰度化處理的過(guò)程中,往往涉及RGB顏色空間的轉(zhuǎn)換。需要根據(jù)實(shí)際需求將其顏色空間轉(zhuǎn)換為灰度圖像、二值圖像、HSV和HSI等顏色(其中,HSV為六角模型,由色度(Hue)、飽和度(Saturation)和明度(Value)共同組成,HSI為色彩空間,由色調(diào)(Hue)、色飽和度(Saturation)和亮度 (Intensity或Brightness)組成)。因此,該文主要采用OpenCV中的cvtColor()函數(shù)來(lái)實(shí)現(xiàn)轉(zhuǎn)換的過(guò)程。
OpenCV中的cvtColor()函數(shù)的原函數(shù)類型是cvtColor(src, code[, dst[,dstCn]])。其中,src為輸入需要進(jìn)行顏色空間轉(zhuǎn)換的圖像;dst為輸出轉(zhuǎn)換的圖像;code為轉(zhuǎn)換的代碼或標(biāo)識(shí);dstCn為目標(biāo)圖像通道數(shù),當(dāng)其值為0時(shí),就由src和code決定(其中,src為要輸入的源圖像參數(shù),code為要輸入的圖像標(biāo)識(shí)參數(shù))。該文選擇COLOR_BGR2GRAY通道,可以將圖7中的成型色彩圖轉(zhuǎn)化為圖8的灰度圖。圖7與圖8相比,圖8的色彩變成了單一的灰色,明顯降低了其他色彩的干擾。
圖7 拼接成型圖
圖8 目標(biāo)圖像灰度圖
3.2.2 圖像的形態(tài)學(xué)處理
當(dāng)?shù)玫交叶葓D時(shí),會(huì)發(fā)現(xiàn)目標(biāo)圖像的邊緣總會(huì)是有凹凸不平的細(xì)小部分,甚至經(jīng)過(guò)灰度化后,目標(biāo)圖像邊緣出現(xiàn)了其他無(wú)關(guān)且緊挨邊緣的細(xì)微突起點(diǎn)(如圖9所示),這些突起或存在邊緣周邊的點(diǎn)給邊緣的精確測(cè)量造成了不必要的影響,而使用形態(tài)學(xué)處理方式進(jìn)行腐蝕和膨脹操作可以降低無(wú)關(guān)信息的影響。
圖9 圖像邊緣的像素點(diǎn)
在進(jìn)行目標(biāo)圖像的形態(tài)學(xué)處理前,需要對(duì)灰度化過(guò)的圖像進(jìn)行圖像二值化閾值處理,減少圖像的無(wú)關(guān)數(shù)據(jù),呈現(xiàn)明顯的黑白效果并凸顯目標(biāo)的輪廓。該文對(duì)圖像的二值化閾值處理主要采用OpenCV技術(shù)中的threshold()函數(shù),它的函數(shù)原型是threshold(src,dst,thresh,maxval,type),通過(guò)設(shè)定thresh閾值(0和255)、type通道類型(THRESH_BINARY_INV | THRESH_OTSU)來(lái)獲得目標(biāo)圖像的二值化圖。
OpenCV中有為圖像的形態(tài)學(xué)變換提供了簡(jiǎn)單、快捷的函數(shù)。該文采取最基本的2種形態(tài)學(xué)處理方式:腐蝕(Erosin)和膨脹(Dilation)。
在進(jìn)行目標(biāo)圖像形態(tài)學(xué)操作前,需要獲取類似于卷積和濾波對(duì)圖像進(jìn)行操作的卷積核的結(jié)構(gòu)化元素,因此采用OpenCV中的getStructuringElement()獲取特定形狀、大小的結(jié)構(gòu)元素,函數(shù)原型為getStructuringElement(int shape, Size esize, Point anchor = Point(-1, -1))。當(dāng)結(jié)構(gòu)元素大小定義的一個(gè)像素核矩陣接近一定上限時(shí),能過(guò)濾圖9中目標(biāo)圖像的上邊緣的細(xì)小素點(diǎn)就會(huì)增多;繼而使用morphologyEx()函數(shù)對(duì)圖9的目標(biāo)圖像分別進(jìn)行先腐蝕后膨脹的開操作試驗(yàn)方法或先膨脹后腐蝕的閉操作實(shí)驗(yàn)方法。經(jīng)過(guò)實(shí)際的運(yùn)算測(cè)量,該文決定采用效果較好的閉操作,如圖10所示。而通過(guò)前后對(duì)比可知,圖10過(guò)濾了圖9中邊緣外的無(wú)關(guān)像素點(diǎn)后,圖像的輪廓邊緣更清晰、明了且更易處理。
圖10 閉操作處理圖
在目標(biāo)圖像經(jīng)歷過(guò)形態(tài)學(xué)處理后,圖像的無(wú)關(guān)信息已大大減少,此時(shí)便可采用Canny邊緣技術(shù)檢測(cè)目標(biāo)圖像中較為明顯的像素點(diǎn)的組合,并整合成一定的圖像結(jié)構(gòu)信息,以對(duì)圖像邊緣檢測(cè)進(jìn)行預(yù)處理,得到最好的檢測(cè)效果,如圖11所示。
圖11 Canny邊緣輪廓圖
但是在使用OpenCV中的Canny()函數(shù)進(jìn)行邊緣檢測(cè)時(shí),圖像邊緣非常容易受到噪聲的干擾,因此為了避免檢測(cè)到錯(cuò)誤的邊緣信息,通常需要對(duì)圖像進(jìn)行濾波,以去除噪聲[1]。而經(jīng)過(guò)實(shí)際測(cè)試發(fā)現(xiàn),GaussianBlur()高斯濾波函數(shù)的去噪聲效果更好。同時(shí),使用Canny()函數(shù)時(shí)可通過(guò)設(shè)置一個(gè)臨界值來(lái)剔除存在邊緣圖像內(nèi)的因噪聲而產(chǎn)生的虛邊緣。OpenCV中Canny()函數(shù)原型如下:Canny(image,threshold1,threshold2,[apertureSize[,L2gradient]])。
經(jīng)過(guò)上述的各種圖像處理操作,便可以利用目標(biāo)圖像的結(jié)構(gòu)信息描繪輪廓和計(jì)算。該文主要采用OpenCV中的findContours()函數(shù)尋找輪廓邊緣,用contours數(shù)組來(lái)保存圖像數(shù)據(jù)信息,從而對(duì)輪廓的外邊緣和內(nèi)邊緣進(jìn)行取舍以及對(duì)邊緣輪廓進(jìn)行相關(guān)計(jì)算。并采用drawContours()函數(shù)對(duì)目標(biāo)圖像的邊緣進(jìn)行描繪[2],以獲取目標(biāo)圖像的輪廓成型圖。例如該文中的圖12,在完成Canny邊緣檢測(cè)的基礎(chǔ)上,描繪Canny檢測(cè)邊緣的結(jié)果,便可以直接、清晰地觀察黑白效果下物體的邊緣輪廓??梢愿鶕?jù)Canny圖上描繪的結(jié)果在原圖上選取drawContours()函數(shù)對(duì)原樣品拼接合成圖上進(jìn)行輪廓描繪,原圖描繪的結(jié)果如圖13所示。
圖12 Canny邊緣輪廓描繪圖
計(jì)算時(shí),仔細(xì)觀察圖13中的圖像輪廓可以發(fā)現(xiàn),它并不是平滑整齊的,而是存在不規(guī)則的曲線。因此,需要采用數(shù)學(xué)上的坐標(biāo)軸和格林公式對(duì)曲線和曲面進(jìn)行精確計(jì)算。如圖14所示(源碼示例),創(chuàng)建1個(gè)專門存儲(chǔ)圖像像素點(diǎn)的容器和1個(gè)存放像素點(diǎn)指向方向的容器,利用OpenCV中所封裝的具有計(jì)算曲面周長(zhǎng)和面積功能的arcLength()函數(shù)和contourArea()函數(shù)擬合像素點(diǎn),從而可以求出圖像周長(zhǎng)長(zhǎng)度和面積數(shù)據(jù)。由此可見(jiàn),該文計(jì)算處理過(guò)程對(duì)實(shí)際物體的不規(guī)則輪廓計(jì)算有一定意義。
圖13 原圖輪廓描繪圖
圖14 arcLength()和contourArea()的使用過(guò)程
隨著工業(yè)現(xiàn)代化的進(jìn)一步發(fā)展,精密零部件對(duì)精度的要求也越來(lái)越高,樣品大尺度范圍的高精度尺度精密測(cè)量具有廣泛的科研和工業(yè)應(yīng)用場(chǎng)景,例如陶瓷、玻璃和金屬等板件的缺陷檢測(cè)、尺度測(cè)量,機(jī)械構(gòu)件的尺度精密測(cè)量及其缺陷檢測(cè)等。