陳甦欣,趙安寧,羅樂文
(合肥工業(yè)大學(xué)機(jī)械工程學(xué)院,合肥 230009)
芯片是工業(yè)生產(chǎn)中重要元器件,它的辨別主要依靠芯片表面的激光字符,這是由字母和數(shù)字組合而成,反映出芯片基本參數(shù)。芯片表面字符對于它的分選顯得尤為重要[1]。現(xiàn)在分選的任務(wù)主要依靠人眼進(jìn)行識別,而芯片作為一種微小的元器件,利用人工的方式效率低下且精度不高,無法滿足現(xiàn)代工業(yè)生產(chǎn)的需求[2]。
芯片字符區(qū)域的定位是分選的前提。為了提高定位的精度和效率,學(xué)者們提出了許多針對性的方法[3-9],其中機(jī)器視覺作為一種靈活、準(zhǔn)確的手段,能夠滿足實(shí)際的工業(yè)生產(chǎn)需求。楊桂華等[3]通過模板匹配法進(jìn)行字符定位,基于字符塊和模板的匹配關(guān)系,利用形狀匹配出新模板獲得二者的轉(zhuǎn)換矩陣,最后定位字符區(qū)域,但這種方法所針對的實(shí)驗(yàn)對象要具有明顯外部特征。于凱旋等[4]利用輪廓檢測法定位出感興趣區(qū)域,提出一種改進(jìn)的幀插法進(jìn)行區(qū)域匹配,但容易受到外界環(huán)境干擾,影響定位精度。鐘彩等[5]提出了一種利用支持向量機(jī)的字符定位方法并利用LBF模型進(jìn)行區(qū)域分割,但是定位時(shí)間較長且存在一定誤差。朱旋[6]利用一種改進(jìn)的YOLOv2模型,通過邊界框預(yù)測的方式對中文字符快速定位,但是模型訓(xùn)練成本較高,需要大量數(shù)據(jù)集支持,難以用于實(shí)際工業(yè)生產(chǎn)中。潘勇等[7]利用紋理特征和區(qū)域灰度變化,實(shí)現(xiàn)對區(qū)域的定位,但是定位區(qū)域?qū)ΜF(xiàn)場光線強(qiáng)度有一定要求。張倩等[8]通過改進(jìn)概率霍夫變化進(jìn)行區(qū)域粗定位,再利用投影法進(jìn)行精確字符定位,但是針對直線效果不好的圖像,定位精度有所缺失。巢淵等[9]利用角點(diǎn)提取算法結(jié)合凸包檢測算法對芯片字符進(jìn)行定位,但僅對形狀規(guī)則QFN封裝芯片有較高定位精度,應(yīng)用對象比較有限。
為解決以上問題的缺點(diǎn),受巢淵等[9]提出的方法啟發(fā),在此基礎(chǔ)上進(jìn)行優(yōu)化改進(jìn),增加改進(jìn)的區(qū)域生長算法分割芯片圖像,通過最大內(nèi)接矩形算法對芯片字符區(qū)域進(jìn)行粗定位,再利用一種改進(jìn)的凸包算法提取完整的字符區(qū)域。本文以工業(yè)生產(chǎn)中直插芯片為載體,設(shè)計(jì)了一套基于機(jī)器視覺方法定位芯片字符區(qū)域的系統(tǒng)。
視覺系統(tǒng)采集平臺與采集芯片圖像如圖1a和圖1b所示。
(a) 實(shí)驗(yàn)采集平臺 (b) 采集的芯片圖像
算法流程為:
(1)圖像預(yù)處理階段。為了提高圖像的質(zhì)量,減少拍攝過程中外界環(huán)境的干擾對實(shí)驗(yàn)結(jié)果產(chǎn)生的誤差。首先對圖像進(jìn)行灰度化處理;再進(jìn)行圖像濾波降噪;最后進(jìn)行形態(tài)學(xué)處理去除圖像中的光斑。
(2)圖像分割與提取階段。直插芯片因?yàn)橐_的存在,圖像輪廓呈現(xiàn)出不規(guī)則的圖形,為了分割圖像和背景,減少實(shí)驗(yàn)干擾并便于字符區(qū)域粗定位,利用一種改進(jìn)的區(qū)域生長算法,以改進(jìn)的Canny算法提取的芯片輪廓邊緣像素點(diǎn)為種子點(diǎn),以自適應(yīng)閾值為生長準(zhǔn)則將圖像和背景分割。
(3)字符粗定位階段。利用最大內(nèi)接矩形算法確定芯片表面區(qū)域并將區(qū)域坐標(biāo)回傳原芯片圖像,最后實(shí)現(xiàn)字符區(qū)域粗定位。
(4)字符定位階段。使用一種改進(jìn)凸包檢測算法,具體流程為:使用Harris角點(diǎn)算法提取字符角點(diǎn),篩選排除干擾角點(diǎn),然后提取關(guān)鍵角點(diǎn)形成初步凸包線,將外部角點(diǎn)納入?yún)^(qū)域并修整凸包線,最后使用最小外接矩形算法完成字符區(qū)域定位。
由于相機(jī)、光源設(shè)備等硬件和外部采集環(huán)境因素,獲取的圖像會受到噪聲干擾,導(dǎo)致實(shí)驗(yàn)結(jié)果有一定的誤差,所以要進(jìn)行圖片的預(yù)處理。為了減少圖像色彩的干擾,提高處理效率,首先進(jìn)行圖像灰度化處理。利用雙邊濾波去除現(xiàn)場環(huán)境的噪聲影響,進(jìn)一步提高圖像質(zhì)量,保留邊緣細(xì)節(jié)。利用伽馬變換對圖像進(jìn)行增強(qiáng),提升其對比度。為了能在短時(shí)間中獲取目標(biāo)圖像最佳閾值,減少圖像亮度和對比度的影響,使用最大類間方差法獲取目標(biāo)的二值化圖像[10]。最后采用形態(tài)學(xué)操作,去除圖像中的光斑、缺口、空洞等干擾獲取最終的結(jié)果,同時(shí)調(diào)整圖像處理閾值獲取去除字符圖像。預(yù)處理圖像如圖2a所示。
(a) 預(yù)處理圖像 (b) 8鄰域示意圖
預(yù)處理后的圖像仍會存留少量干擾,對后續(xù)的算法實(shí)驗(yàn)產(chǎn)生誤差,同時(shí)因?yàn)樾酒_存在,導(dǎo)致圖像呈現(xiàn)不規(guī)則的形狀,無法用圓或者矩形去約束并分離目標(biāo)和背景。為了能夠完整的分割芯片圖像和背景圖像,需要采用區(qū)域生長法進(jìn)行分割。但是原有算法以單像素點(diǎn)作為生長點(diǎn)且以8鄰域(如圖2b所示)平均像素值作為生長準(zhǔn)則,導(dǎo)致傳統(tǒng)區(qū)域生長算法分割效率低,分割效果差。針對如上情況,本文提出一種改進(jìn)的區(qū)域生長算法,主要對①算法種子點(diǎn)選取;②算法生長準(zhǔn)則這兩方面進(jìn)行如下改進(jìn)。
2.2.1 改進(jìn)的Canny算法
為解決傳統(tǒng)區(qū)域生長算法生長效率問題,本文采用圖像邊緣像素點(diǎn)來代替單個(gè)像素點(diǎn)進(jìn)行區(qū)域生長。Canny算法是提取圖像邊緣所廣泛運(yùn)用的算法,他能夠識別圖像中弱邊緣和強(qiáng)邊緣并結(jié)合位置關(guān)系,綜合給出圖像整體邊緣信息,但是該算法會識別噪聲點(diǎn)的邊緣,導(dǎo)致圖像出現(xiàn)空洞現(xiàn)象,嚴(yán)重影響后續(xù)算法處理的效果,如圖3a所示。為消除Canny算法的噪聲空洞,本文采用一種改進(jìn)的Canny算法。為避免在消除空洞的過程中消除圖像邊緣主干結(jié)構(gòu),需要對邊緣主干和空洞進(jìn)行區(qū)分。對圖像閉合曲線進(jìn)行像素值累加計(jì)算,其中圖像邊緣主干部分的像素值之和最大,空洞部分像素值之和較小。為進(jìn)一步篩選圖像邊緣并去除圖像空洞,在改進(jìn)的算法中引入8連通鏈碼(如圖2c所示)。改進(jìn)的算法具體步驟為:
(a) Canny算法 (b) 改進(jìn)的Canny算法
步驟1:首先選定每一個(gè)圖像閉合曲線上任一個(gè)像素點(diǎn)作為起點(diǎn),再選定逆時(shí)針方向作為追蹤方向,根據(jù)選定點(diǎn)的8鄰域像素值,挑選其中緊鄰中心的像素點(diǎn)作為下一次判斷的中心點(diǎn)并使用8連通鏈碼記錄這次選定過程的像素點(diǎn)方位;
步驟2:不斷進(jìn)行上一步操作并對圖像上每一個(gè)閉合曲線的像素點(diǎn)進(jìn)行累加統(tǒng)計(jì),像素點(diǎn)統(tǒng)計(jì)數(shù)目為N,根據(jù)每次選取下一個(gè)像素點(diǎn)的方位記錄8連通鏈碼;
步驟3:設(shè)立像素點(diǎn)數(shù)目閾值Ny,若N未超過閾值,則將此段標(biāo)記為圖像空洞,對此處記錄像素點(diǎn)方位的8連通鏈碼反向解碼并按照順序刪除像素點(diǎn)。
使用改進(jìn)后算法輸出的圖像邊緣完整且無明顯空洞,如圖3b所示。同時(shí)將算法獲得的邊緣像素點(diǎn)納入?yún)^(qū)域生長的堆棧中,邊緣像素點(diǎn)標(biāo)記為已生長點(diǎn),邊緣像素點(diǎn)外的點(diǎn)標(biāo)記為待生長點(diǎn)。
2.2.2 改進(jìn)的生長準(zhǔn)則
傳統(tǒng)的區(qū)域生長算法在其生長迭代過程中,根據(jù)像素點(diǎn)的8鄰域像素點(diǎn)的平均灰度值決定,容易導(dǎo)致生長不完全問題[11]。為了改善這種現(xiàn)象,使用一種改進(jìn)的自適應(yīng)閾值生長算法進(jìn)行處理。
(1)
(2)
(3)
若滿足式(3),則將區(qū)域納入生長區(qū)域中,否則不進(jìn)行生長。分割后圖像如圖3c所示。
芯片是一種微小器件,在沒有固定的條件下,它的角度和位置難以把控,所以需要對芯片字符進(jìn)行粗定位。芯片去除引腳的表面近似矩形,利用最大內(nèi)接矩形算法,提取空白芯片表面的最大矩形空間,并回傳實(shí)際坐標(biāo)和偏轉(zhuǎn)角度給芯片圖像,利用仿射變換算法調(diào)整角度并提取字符區(qū)域。如圖3d所示。
針對字符區(qū)域形狀不規(guī)則或者有小角度偏轉(zhuǎn)角的問題,本文提出了一種利用Harris角點(diǎn)檢測算法和改進(jìn)的凸包檢測算法來定位字符區(qū)域。
2.4.1 Harris角點(diǎn)檢測
圖像中像素值的局部最大峰值構(gòu)成了Harris角點(diǎn),它主要用于檢測圖像中線段的端點(diǎn)或者兩條線段交點(diǎn)。本文利用OpenCV函數(shù)庫中的cornerHarris()函數(shù)進(jìn)行角點(diǎn)檢測,提高權(quán)重系數(shù)以增加角點(diǎn)數(shù)量,最后形成歸一化的系數(shù)圖像。如圖4a所示。
(a) Harris角點(diǎn)圖像 (b) 凸包線形成示意圖
2.4.2 改進(jìn)的凸包線算法
凸包是圖形學(xué)常用概念,將二維平面的點(diǎn)集最外層連接起來構(gòu)成的凸多邊形稱為凸包。利用凸包可以進(jìn)行多邊形的逼近,針對于規(guī)則或者不規(guī)則的圖形都具有良好的效果。Graham算法是常用的凸包檢測算法,該算法會以逆時(shí)針的順序找出凸包上的點(diǎn),但是過多的特征點(diǎn)和過長的運(yùn)算時(shí)間導(dǎo)致精度和效率不高,不能滿足現(xiàn)實(shí)工業(yè)生產(chǎn)要求。為了解決以上缺點(diǎn),本文提出了一種改進(jìn)的凸包檢測算法,具體算法步驟為:
步驟1:干擾角點(diǎn)篩選。粗定位后的圖像存在噪聲干擾,這導(dǎo)致使用Harris角點(diǎn)檢測算法后的圖像不僅擁有字符區(qū)域的角點(diǎn),非字符區(qū)域也存在少量干擾角點(diǎn)。為了消除非字符區(qū)域的干擾角點(diǎn),提高定位的精度和效率,利用區(qū)域匹配的方法篩選干擾角點(diǎn)。利用構(gòu)造的區(qū)域遍歷整張圖像,當(dāng)區(qū)域中角點(diǎn)數(shù)量小于等于設(shè)定角點(diǎn)數(shù)量N時(shí),刪除該區(qū)域中的所有角點(diǎn)。根據(jù)獲取圖像大致的像素尺寸比例,設(shè)置長寬比為2∶1的3種區(qū)域,尺寸分別為:20×10、30×15、40×20。根據(jù)實(shí)驗(yàn)效果,最后選擇尺寸為40×20的區(qū)域并設(shè)定角點(diǎn)數(shù)量N為4個(gè);
步驟2:關(guān)鍵角點(diǎn)選取。為了提高凸包線形成效率,需要迅速找出凸包線的關(guān)鍵角點(diǎn)。將角點(diǎn)分布于坐標(biāo)軸上,從圖像的上側(cè)、下側(cè)、左側(cè)、右側(cè)向圖像中心掃描,直到接觸的第一個(gè)角點(diǎn)為關(guān)鍵角點(diǎn),分別為X值最小點(diǎn)Xmin,X值最大點(diǎn)Xmax,Y值最小點(diǎn)Ymin,Y值最大點(diǎn)Ymax。以X值最小點(diǎn)Xmin為基準(zhǔn)向圖像中心掃描6列像素列,篩選出6列中Y值最小和最大的點(diǎn)Pxi1和Pxa1,同理再分別以X值最大點(diǎn)Xmax,Y值最大點(diǎn)Ymax和最小點(diǎn)Ymin為基準(zhǔn)找到Pxi2、Pxa2、Pyi2、Pya2、Pyi1、Pya1。若有重合位置的點(diǎn)則略過,最后一共能獲得不大于12個(gè)關(guān)鍵角點(diǎn)。根據(jù)點(diǎn)位在坐標(biāo)系的分布,逆時(shí)針順序選取連接,形成初步凸包線。示意圖如圖4b所示;
步驟3:凸包線構(gòu)成。為了提高凸包線生成效率,減少算法的計(jì)算量,以左上側(cè)凸包線形成為例。以X值最小點(diǎn)Xmin和Pxi1構(gòu)成矩形對角線繪制矩形空間。對角線將空間分為左上側(cè)區(qū)域A和右下側(cè)區(qū)域B。提取凸包線外側(cè)區(qū)域A中所有的角點(diǎn),按照逆時(shí)針順序連接,直到區(qū)域A中所有的角點(diǎn)納入所包圍區(qū)域中,連接方法為:每次將一個(gè)角點(diǎn)納入凸包區(qū)域中,并且重新構(gòu)成凸包線,重新篩選出存在于新凸包線外部的角點(diǎn),繼續(xù)上個(gè)步驟,最后將左上側(cè)凸包線構(gòu)成。同理完成剩下區(qū)域的凸包線,最終所有的角點(diǎn)都在凸包線包圍區(qū)域中。如圖4c所示;
步驟4:凸包線擬合。完全形成的凸多邊形應(yīng)該約束在一個(gè)規(guī)則的區(qū)域中。本文最后利用最小外接矩形算法對整個(gè)區(qū)域進(jìn)行擬合,獲取芯片字符定位區(qū)域。如圖4d所示。
本文算法主要采用C+ +編程語言并且調(diào)用OpenCV庫實(shí)現(xiàn),代碼實(shí)現(xiàn)環(huán)境為:Ubuntn18.04,Intel Core i9處理器,軟件編譯器為Visual Studio 2017。實(shí)驗(yàn)將使用傳統(tǒng)凸包檢測算法、文獻(xiàn)[9]算法和本文算法進(jìn)行定位精度和定位時(shí)間的對比。實(shí)驗(yàn)圖片來自某公司實(shí)驗(yàn)平臺拍攝圖片,為保證對比實(shí)驗(yàn)結(jié)果準(zhǔn)確性,減少隨機(jī)性帶來的誤差,芯片圖像的拍攝條件應(yīng)保持一致,偏轉(zhuǎn)角度保持在-5°~5°之間且進(jìn)行多組實(shí)驗(yàn)。設(shè)立8個(gè)組別,每個(gè)組別設(shè)置10張圖像,其中組別1~4為字符區(qū)域規(guī)則圖像,5~8組為字符區(qū)域不規(guī)則圖像,統(tǒng)計(jì)8組圖像在3種算法下的定位精度平均值和定位時(shí)間平均值。定位精度對比如表1所示。
表1 定位精度結(jié)果對比 (pixel×pixel/張)
傳統(tǒng)凸包檢測算法效果圖如圖5a所示,文獻(xiàn)[9]凸包檢測算法效果圖如圖5b所示,本文算法與上述兩種算法的對比效果圖和右上角局部放大圖如圖5c和5d所示。
(a) 傳統(tǒng)凸包檢測 (b) 文獻(xiàn)[9]凸包檢測
分別檢測3種算法在1~8組的定位時(shí)間并建立表格。定位時(shí)間對比如表2所示。
表2 定位時(shí)間結(jié)果對比 (ms/張)
實(shí)驗(yàn)結(jié)果表明,文獻(xiàn)[9]算法和本文算法在定位精度和定位時(shí)間上都優(yōu)于傳統(tǒng)的凸包檢測算法。根據(jù)定位精度對比實(shí)驗(yàn)結(jié)果,針對規(guī)則字符區(qū)域,文獻(xiàn)[9]算法和本文算法都能實(shí)現(xiàn)較高精度的定位,但是對于非規(guī)則字符區(qū)域,本文的算法定位精度較文獻(xiàn)[9]算法定位精度提高約5.3%。在定位時(shí)間對比方面,本文算法使用了最多12個(gè)關(guān)鍵點(diǎn)繪制凸包線比文獻(xiàn)[9]使用4個(gè)關(guān)鍵點(diǎn)繪制凸包線所使用的時(shí)間更少,效率提高約15.4%。綜上所述,本文算法在芯片字符區(qū)域的定位中表現(xiàn)出了良好的綜合性能,整體滿足工業(yè)生產(chǎn)的實(shí)際要求。
為解決芯片分選工作中字符區(qū)域的定位精度低、效率低的問題,本文提出了一種改進(jìn)區(qū)域生長算法結(jié)合改進(jìn)的凸包檢測算法進(jìn)行字符區(qū)域分割和定位。開展了如下工作:
(1) 針對獲取圖像進(jìn)行預(yù)處理,利用一種改進(jìn)的Canny算法提取無空洞圖像邊緣,以芯片邊緣像素點(diǎn)為種子點(diǎn),改進(jìn)的12鄰域加權(quán)平均灰度值為生長準(zhǔn)則將圖像和背景進(jìn)行分割。
(2)利用最大內(nèi)接矩形算法提取芯片表面字符區(qū)域坐標(biāo)并提取字符區(qū)域,實(shí)現(xiàn)字符區(qū)域粗定位。
(3)使用Harris角點(diǎn)檢測算法提取區(qū)域角點(diǎn),再利用一種改進(jìn)凸包檢測算法進(jìn)行篩選干擾角點(diǎn)、選取關(guān)鍵角點(diǎn)、凸包線構(gòu)成、凸包線擬合。
實(shí)驗(yàn)結(jié)果表明,所設(shè)計(jì)的定位算法能夠定位芯片表面字符區(qū)域并擁有一定的精度和效率,能夠滿足現(xiàn)代工業(yè)生產(chǎn)需求。