陳甦欣,趙安寧,羅樂文
(合肥工業大學機械工程學院,合肥 230009)
芯片是工業生產中重要元器件,它的辨別主要依靠芯片表面的激光字符,這是由字母和數字組合而成,反映出芯片基本參數。芯片表面字符對于它的分選顯得尤為重要[1]。現在分選的任務主要依靠人眼進行識別,而芯片作為一種微小的元器件,利用人工的方式效率低下且精度不高,無法滿足現代工業生產的需求[2]。
芯片字符區域的定位是分選的前提。為了提高定位的精度和效率,學者們提出了許多針對性的方法[3-9],其中機器視覺作為一種靈活、準確的手段,能夠滿足實際的工業生產需求。楊桂華等[3]通過模板匹配法進行字符定位,基于字符塊和模板的匹配關系,利用形狀匹配出新模板獲得二者的轉換矩陣,最后定位字符區域,但這種方法所針對的實驗對象要具有明顯外部特征。于凱旋等[4]利用輪廓檢測法定位出感興趣區域,提出一種改進的幀插法進行區域匹配,但容易受到外界環境干擾,影響定位精度。鐘彩等[5]提出了一種利用支持向量機的字符定位方法并利用LBF模型進行區域分割,但是定位時間較長且存在一定誤差。朱旋[6]利用一種改進的YOLOv2模型,通過邊界框預測的方式對中文字符快速定位,但是模型訓練成本較高,需要大量數據集支持,難以用于實際工業生產中。潘勇等[7]利用紋理特征和區域灰度變化,實現對區域的定位,但是定位區域對現場光線強度有一定要求。張倩等[8]通過改進概率霍夫變化進行區域粗定位,再利用投影法進行精確字符定位,但是針對直線效果不好的圖像,定位精度有所缺失。巢淵等[9]利用角點提取算法結合凸包檢測算法對芯片字符進行定位,但僅對形狀規則QFN封裝芯片有較高定位精度,應用對象比較有限。
為解決以上問題的缺點,受巢淵等[9]提出的方法啟發,在此基礎上進行優化改進,增加改進的區域生長算法分割芯片圖像,通過最大內接矩形算法對芯片字符區域進行粗定位,再利用一種改進的凸包算法提取完整的字符區域。本文以工業生產中直插芯片為載體,設計了一套基于機器視覺方法定位芯片字符區域的系統。
視覺系統采集平臺與采集芯片圖像如圖1a和圖1b所示。

(a) 實驗采集平臺 (b) 采集的芯片圖像
算法流程為:
(1)圖像預處理階段。為了提高圖像的質量,減少拍攝過程中外界環境的干擾對實驗結果產生的誤差。首先對圖像進行灰度化處理;再進行圖像濾波降噪;最后進行形態學處理去除圖像中的光斑。
(2)圖像分割與提取階段。直插芯片因為引腳的存在,圖像輪廓呈現出不規則的圖形,為了分割圖像和背景,減少實驗干擾并便于字符區域粗定位,利用一種改進的區域生長算法,以改進的Canny算法提取的芯片輪廓邊緣像素點為種子點,以自適應閾值為生長準則將圖像和背景分割。
(3)字符粗定位階段。利用最大內接矩形算法確定芯片表面區域并將區域坐標回傳原芯片圖像,最后實現字符區域粗定位。
(4)字符定位階段。使用一種改進凸包檢測算法,具體流程為:使用Harris角點算法提取字符角點,篩選排除干擾角點,然后提取關鍵角點形成初步凸包線,將外部角點納入區域并修整凸包線,最后使用最小外接矩形算法完成字符區域定位。
由于相機、光源設備等硬件和外部采集環境因素,獲取的圖像會受到噪聲干擾,導致實驗結果有一定的誤差,所以要進行圖片的預處理。為了減少圖像色彩的干擾,提高處理效率,首先進行圖像灰度化處理。利用雙邊濾波去除現場環境的噪聲影響,進一步提高圖像質量,保留邊緣細節。利用伽馬變換對圖像進行增強,提升其對比度。為了能在短時間中獲取目標圖像最佳閾值,減少圖像亮度和對比度的影響,使用最大類間方差法獲取目標的二值化圖像[10]。最后采用形態學操作,去除圖像中的光斑、缺口、空洞等干擾獲取最終的結果,同時調整圖像處理閾值獲取去除字符圖像。預處理圖像如圖2a所示。

(a) 預處理圖像 (b) 8鄰域示意圖
預處理后的圖像仍會存留少量干擾,對后續的算法實驗產生誤差,同時因為芯片引腳存在,導致圖像呈現不規則的形狀,無法用圓或者矩形去約束并分離目標和背景。為了能夠完整的分割芯片圖像和背景圖像,需要采用區域生長法進行分割。但是原有算法以單像素點作為生長點且以8鄰域(如圖2b所示)平均像素值作為生長準則,導致傳統區域生長算法分割效率低,分割效果差。針對如上情況,本文提出一種改進的區域生長算法,主要對①算法種子點選取;②算法生長準則這兩方面進行如下改進。
2.2.1 改進的Canny算法
為解決傳統區域生長算法生長效率問題,本文采用圖像邊緣像素點來代替單個像素點進行區域生長。Canny算法是提取圖像邊緣所廣泛運用的算法,他能夠識別圖像中弱邊緣和強邊緣并結合位置關系,綜合給出圖像整體邊緣信息,但是該算法會識別噪聲點的邊緣,導致圖像出現空洞現象,嚴重影響后續算法處理的效果,如圖3a所示。為消除Canny算法的噪聲空洞,本文采用一種改進的Canny算法。為避免在消除空洞的過程中消除圖像邊緣主干結構,需要對邊緣主干和空洞進行區分。對圖像閉合曲線進行像素值累加計算,其中圖像邊緣主干部分的像素值之和最大,空洞部分像素值之和較小。為進一步篩選圖像邊緣并去除圖像空洞,在改進的算法中引入8連通鏈碼(如圖2c所示)。改進的算法具體步驟為:

(a) Canny算法 (b) 改進的Canny算法
步驟1:首先選定每一個圖像閉合曲線上任一個像素點作為起點,再選定逆時針方向作為追蹤方向,根據選定點的8鄰域像素值,挑選其中緊鄰中心的像素點作為下一次判斷的中心點并使用8連通鏈碼記錄這次選定過程的像素點方位;
步驟2:不斷進行上一步操作并對圖像上每一個閉合曲線的像素點進行累加統計,像素點統計數目為N,根據每次選取下一個像素點的方位記錄8連通鏈碼;
步驟3:設立像素點數目閾值Ny,若N未超過閾值,則將此段標記為圖像空洞,對此處記錄像素點方位的8連通鏈碼反向解碼并按照順序刪除像素點。
使用改進后算法輸出的圖像邊緣完整且無明顯空洞,如圖3b所示。同時將算法獲得的邊緣像素點納入區域生長的堆棧中,邊緣像素點標記為已生長點,邊緣像素點外的點標記為待生長點。
2.2.2 改進的生長準則
傳統的區域生長算法在其生長迭代過程中,根據像素點的8鄰域像素點的平均灰度值決定,容易導致生長不完全問題[11]。為了改善這種現象,使用一種改進的自適應閾值生長算法進行處理。

(1)

(2)

(3)
若滿足式(3),則將區域納入生長區域中,否則不進行生長。分割后圖像如圖3c所示。
芯片是一種微小器件,在沒有固定的條件下,它的角度和位置難以把控,所以需要對芯片字符進行粗定位。芯片去除引腳的表面近似矩形,利用最大內接矩形算法,提取空白芯片表面的最大矩形空間,并回傳實際坐標和偏轉角度給芯片圖像,利用仿射變換算法調整角度并提取字符區域。如圖3d所示。
針對字符區域形狀不規則或者有小角度偏轉角的問題,本文提出了一種利用Harris角點檢測算法和改進的凸包檢測算法來定位字符區域。
2.4.1 Harris角點檢測
圖像中像素值的局部最大峰值構成了Harris角點,它主要用于檢測圖像中線段的端點或者兩條線段交點。本文利用OpenCV函數庫中的cornerHarris()函數進行角點檢測,提高權重系數以增加角點數量,最后形成歸一化的系數圖像。如圖4a所示。

(a) Harris角點圖像 (b) 凸包線形成示意圖
2.4.2 改進的凸包線算法
凸包是圖形學常用概念,將二維平面的點集最外層連接起來構成的凸多邊形稱為凸包。利用凸包可以進行多邊形的逼近,針對于規則或者不規則的圖形都具有良好的效果。Graham算法是常用的凸包檢測算法,該算法會以逆時針的順序找出凸包上的點,但是過多的特征點和過長的運算時間導致精度和效率不高,不能滿足現實工業生產要求。為了解決以上缺點,本文提出了一種改進的凸包檢測算法,具體算法步驟為:
步驟1:干擾角點篩選。粗定位后的圖像存在噪聲干擾,這導致使用Harris角點檢測算法后的圖像不僅擁有字符區域的角點,非字符區域也存在少量干擾角點。為了消除非字符區域的干擾角點,提高定位的精度和效率,利用區域匹配的方法篩選干擾角點。利用構造的區域遍歷整張圖像,當區域中角點數量小于等于設定角點數量N時,刪除該區域中的所有角點。根據獲取圖像大致的像素尺寸比例,設置長寬比為2∶1的3種區域,尺寸分別為:20×10、30×15、40×20。根據實驗效果,最后選擇尺寸為40×20的區域并設定角點數量N為4個;
步驟2:關鍵角點選取。為了提高凸包線形成效率,需要迅速找出凸包線的關鍵角點。將角點分布于坐標軸上,從圖像的上側、下側、左側、右側向圖像中心掃描,直到接觸的第一個角點為關鍵角點,分別為X值最小點Xmin,X值最大點Xmax,Y值最小點Ymin,Y值最大點Ymax。以X值最小點Xmin為基準向圖像中心掃描6列像素列,篩選出6列中Y值最小和最大的點Pxi1和Pxa1,同理再分別以X值最大點Xmax,Y值最大點Ymax和最小點Ymin為基準找到Pxi2、Pxa2、Pyi2、Pya2、Pyi1、Pya1。若有重合位置的點則略過,最后一共能獲得不大于12個關鍵角點。根據點位在坐標系的分布,逆時針順序選取連接,形成初步凸包線。示意圖如圖4b所示;
步驟3:凸包線構成。為了提高凸包線生成效率,減少算法的計算量,以左上側凸包線形成為例。以X值最小點Xmin和Pxi1構成矩形對角線繪制矩形空間。對角線將空間分為左上側區域A和右下側區域B。提取凸包線外側區域A中所有的角點,按照逆時針順序連接,直到區域A中所有的角點納入所包圍區域中,連接方法為:每次將一個角點納入凸包區域中,并且重新構成凸包線,重新篩選出存在于新凸包線外部的角點,繼續上個步驟,最后將左上側凸包線構成。同理完成剩下區域的凸包線,最終所有的角點都在凸包線包圍區域中。如圖4c所示;
步驟4:凸包線擬合。完全形成的凸多邊形應該約束在一個規則的區域中。本文最后利用最小外接矩形算法對整個區域進行擬合,獲取芯片字符定位區域。如圖4d所示。
本文算法主要采用C+ +編程語言并且調用OpenCV庫實現,代碼實現環境為:Ubuntn18.04,Intel Core i9處理器,軟件編譯器為Visual Studio 2017。實驗將使用傳統凸包檢測算法、文獻[9]算法和本文算法進行定位精度和定位時間的對比。實驗圖片來自某公司實驗平臺拍攝圖片,為保證對比實驗結果準確性,減少隨機性帶來的誤差,芯片圖像的拍攝條件應保持一致,偏轉角度保持在-5°~5°之間且進行多組實驗。設立8個組別,每個組別設置10張圖像,其中組別1~4為字符區域規則圖像,5~8組為字符區域不規則圖像,統計8組圖像在3種算法下的定位精度平均值和定位時間平均值。定位精度對比如表1所示。

表1 定位精度結果對比 (pixel×pixel/張)
傳統凸包檢測算法效果圖如圖5a所示,文獻[9]凸包檢測算法效果圖如圖5b所示,本文算法與上述兩種算法的對比效果圖和右上角局部放大圖如圖5c和5d所示。

(a) 傳統凸包檢測 (b) 文獻[9]凸包檢測
分別檢測3種算法在1~8組的定位時間并建立表格。定位時間對比如表2所示。

表2 定位時間結果對比 (ms/張)
實驗結果表明,文獻[9]算法和本文算法在定位精度和定位時間上都優于傳統的凸包檢測算法。根據定位精度對比實驗結果,針對規則字符區域,文獻[9]算法和本文算法都能實現較高精度的定位,但是對于非規則字符區域,本文的算法定位精度較文獻[9]算法定位精度提高約5.3%。在定位時間對比方面,本文算法使用了最多12個關鍵點繪制凸包線比文獻[9]使用4個關鍵點繪制凸包線所使用的時間更少,效率提高約15.4%。綜上所述,本文算法在芯片字符區域的定位中表現出了良好的綜合性能,整體滿足工業生產的實際要求。
為解決芯片分選工作中字符區域的定位精度低、效率低的問題,本文提出了一種改進區域生長算法結合改進的凸包檢測算法進行字符區域分割和定位。開展了如下工作:
(1) 針對獲取圖像進行預處理,利用一種改進的Canny算法提取無空洞圖像邊緣,以芯片邊緣像素點為種子點,改進的12鄰域加權平均灰度值為生長準則將圖像和背景進行分割。
(2)利用最大內接矩形算法提取芯片表面字符區域坐標并提取字符區域,實現字符區域粗定位。
(3)使用Harris角點檢測算法提取區域角點,再利用一種改進凸包檢測算法進行篩選干擾角點、選取關鍵角點、凸包線構成、凸包線擬合。
實驗結果表明,所設計的定位算法能夠定位芯片表面字符區域并擁有一定的精度和效率,能夠滿足現代工業生產需求。