张俊生,王明泉,郭晋秦,楼国红
(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焊点气泡缺陷的准确提取,具有较强的鲁棒性。