張俊生,王明泉,郭晉秦,樓國紅
(1.太原工業學院,太原 030008;2.中北大學信息與通信工程學院,太原 030051)
BGA(Ball Grid Array)作為一種電子元件封裝技術,主要特點是采用位于芯片底部的球形或柱狀焊球取代引腳,使得封裝芯片體積更小、引腳數更多、引腳間距更大、電氣性能更優,被廣泛使用于大規模集成電路芯片中[1]。由于BGA器件的焊球位于芯片底部,焊接到電路板上時焊點全部隱藏不可見,焊接質量只能由微焦點X射線成像系統來檢測[2]。常見的BGA焊點缺陷包括漏焊、連焊、虛焊、焊球氣泡和焊球移位等,其中焊球氣泡缺陷是由焊接過程中產生的氣體未能及時逸出而導致,檢測標準是焊球內的氣泡總量不能超過焊球本身的某個閾值,如在二維X射線檢測中一般規定焊球內單個氣泡的投影面積不能超過焊球投影面積的25%,多個氣泡的投影面積總和不能超過焊球投影面積的20%[3]。BGA焊點氣泡缺陷的檢測由原來的人工手動測量逐步過渡到現在的算法自動判定,國內外諸多學者對此展開了研究[4-5]。
閾值分割算法作為圖像分割算法中的一類,被最早研究和使用,具有分割結果物理意義明確、分割算法易于實現、實時性好等優點,廣泛應用于工業檢測中的圖像缺陷提取、目標識別等實際應用領域[6]。閾值分割算法按照不同的分類標準有不同的分類結果,如按照閾值選取函數的不同可分為最大熵法、最大類間方差法(也稱OTSU法)、交叉墑法、最小誤差法等;按照閾值個數的不同可分為單閾值法和多閾值法等。動態閾值分割算法屬于多閾值法,通過對原始圖像和平滑圖像的差圖像設定閾值來分割目標物體,對于光照不均、對比度較低等圖像具有較好的分割效果,適合于BGA焊點X射線圖像的氣泡缺陷分析。
動態閾值分割算法也稱自適應閾值分割算法,與單閾值法最大的區別在于圖像分割時每個像素使用的閾值取決于自身周邊區域局部的灰度變化情況,而不是一個全局的固定值。假設待分割的原始圖像為f(x,y),該圖像的平滑圖像為g(x,y),分割后的二值圖像為B(x,y),使用公式來表示動態閾值分割算法如下:

其中,T為對f(x,y)與g(x,y)的差圖像進行分割時設定的閾值。從式(1)中直觀來看,T為算法分割過程中的固定閾值,但這個閾值是對差圖像而言的,對于需要分割的原始圖像f(x,y)而言,實際閾值為平滑圖像 g(x,y)與 T 之和,如式(2)所示:

平滑圖像g(x,y)一般通過均值濾波、中值濾波、高斯濾波等模板卷積運算得到,灰度值g主要取決于像素點(x,y)處的原始灰度值f及其周邊區域像素點的灰度,如平滑運算時采用9×9大小的均值濾波,則平滑圖像g(x,y)中每一點的灰度值為該點灰度和周邊80個像素灰度的平均值,相當于原始圖像f(x,y)在9×9動態窗口下得到的局部背景圖像。由于圖像的局部背景是動態變化的,f(x,y)在二值化時的閾值也隨局部背景變化而變化,所以這種算法命名為動態閾值分割算法,閾值T用來指定想要分割的目標物體比局部背景亮多少。
使用動態閾值分割算法也可以提取灰度比周邊區域暗的物體,分割時使用的公式如式(3)所示:

式(3)與式(1)唯一的區別在于求解差圖像的過程不同,提取亮物體用原始圖像減去平滑圖像,提取暗物體用平滑圖像減去原始圖像。
BGA焊點連接電路板和BGA芯片,在X射線檢測時吸收大量射線,圖像上表現為黑色圓形區域,比局部背景要暗;氣泡缺陷吸收X射線較少,在焊球的黑色區域內表現為灰白色,比局部背景要亮。實驗過程中首先提取BGA焊點區域,然后再提取氣泡缺陷區域,最后將二者提取的結果相結合,實現氣泡缺陷的準確分割。

圖1 BGA焊點的動態閾值分割
BGA焊點的灰度比局部區域暗,如圖1(a)所示,使用式(3)來進行焊點區域的分割。對圖1(a)使用9×9大小的均值濾波算子進行平滑,閾值T設定為5,分割結果如圖1(b)所示。圖1(b)中4個焊點的黑色邊緣被準確提取出來,形成閉合的圓環圖形,同時電路板上的過孔、內部連線等黑色區域也被提取了出來。使用數學形態學中的區域填充算法對圖1(b)進行填充,閉合的圓環圖形被填充為白色區域,然后再根據區域的面積大小設定閾值去除干擾,本例中設定面積小于900的全部被去掉,得到的最終結果如圖1(c)所示。
最大類間方差法(OTSU法)由日本學者大津展之于1979年首先提出[7],基于圖像的直方圖將待處理圖像分為前景和背景兩類,通過尋找這兩類像素間的最大方差來達到最佳的分割效果,是實際工業應用中使用較廣的一種圖像二值化處理方法,成為事實上的閾值分割標準。使用OTSU閾值分割算法對圖1(a)進行處理,分割結果如圖1(d)所示,4個焊球區域也被準確提取,產生的部分干擾可以通過數學形態學中的開閉運算去除。可見,對于分割焊球這類面積較大、在整幅圖像上所占比例較大的區域,動態閾值分割算法和OTSU分割算法效果相當,都能較好地提取目標區域。
焊點內部的氣泡缺陷區域灰度值比焊點區域的灰度值大,屬于局部亮目標,使用式(1)來進行提取。使用15×15的均值濾波算子對圖1(a)進行平滑,閾值T設定為0,分割結果如圖2(a)所示。可見,焊球內部的氣泡缺陷被提取出來,同時焊球外部邊緣、電路板上的過孔走線的外部邊緣做為亮目標也被提取了出來。使用圖1(c)的分割結果和圖2(a)進行邏輯與運算,得到的結果如圖2(b)所示,僅有焊球區域內部的分割結果被保留了下來。對圖2(b)進行區域填充運算,然后去掉面積小于20的噪聲干擾區域,得到的最終分割結果如圖2(c)所示。可見,焊球內的氣泡缺陷被全部提取了出來。

圖2 氣泡缺陷的動態閾值分割
使用OTSU算法對圖1(a)進行分割,同時使用圖1(d)的焊球提取區域作為模板相與運算,得到的結果如圖2(d)所示。由于氣泡缺陷區域在圖像中所占比例較低,無法在圖像直方圖上形成明顯峰值,OTSU算法確定的閾值提取不出氣泡區域來。可見,使用動態閾值分割算法,通過選擇不同大小的濾波算子和閾值,可以準確提取焊點區域和焊點內部缺陷,優于使用OTSU算法的提取效果,可以在工業應用中取代OTSU算法。
將圖1(c)和圖2(c)的分割結果提取邊緣,在圖1(a)上用圖形的方式標注出來,如圖3所示。圖3中紅色的曲線表示焊球區域,同時按照順序進行編號,黃色的曲線表示焊球氣泡區域,可以明顯看到焊球被準確提取,焊球內部的氣泡缺陷也被準確提取。

圖3 BGA焊點分割結果的標注
對圖3中的標注區域進行定量分析,每個焊球的面積、焊球內部氣泡個數及其總面積、氣泡面積比如表1中所示。按照常規撿測標準,焊球內存在多個氣泡時,氣泡的投影面積總和不能超過焊球投影面積的20%,圖1(a)中的4個焊球編號為2的焊球不合格,氣泡面積占到了22.21%,編號為1的焊球處于臨界狀態,氣泡面積達到了19.94%。

表1 BGA焊點氣泡缺陷的分割結果
BGA焊點在進行X射線檢測時,受芯片、電路板材料不同或X射線源電壓波動等因素影響,采集到的圖像質量也有所差異。圖1(a)中所示的BGA焊點圖像質量較好,對比度適中,焊點、氣泡缺陷和電路板都清晰可見,圖4(a)中所示的BGA焊點圖像質量較差,對比度偏低,部分缺陷淹沒焊點區域內很難分辨,圖5(a)中所示的BGA焊點圖像質量也較差,對比度偏高,電路板區域變成了一片白色。動態閾值分割算法著眼于圖像的局部灰度變化,可以很好地適應圖像質量的波動,其最終的分割結果如圖4(b)和圖5(b)所示,所有缺陷都被提取了出來。

圖4 對比度較差的BGA焊點分割

圖5 對比度較高的BGA焊點分割
BGA焊點的氣泡缺陷在整幅圖像中所占比例較低,無法通過全局閾值分割的方法準確提取,阻礙了缺陷的自動判定。動態閾值分割算法著眼于圖像的局部灰度變化,通過對原始圖像和平滑圖像的差圖像設定閾值來分割目標,算法簡潔明了,可彌補全局閾值分割算法的不足,較好地實現了BGA焊點氣泡缺陷的準確提取,具有較強的魯棒性。