陈自立,刘红林
(中国计量大学 光学与电子科技学院,浙江 杭州 310018)
工业上一般用X光检测LED晶元的焊接质量[1],传统的方式是人工肉眼观察X光图像,检测焊接不良晶元,不仅效率低,而且还容易产生眼疲劳导致错误率变高,因此迫切需要用图像处理技术自动检测晶元,降低劳动强度,提高检测效率。同时由于X光相机的视场有限、分辨率不够高,无法拍摄完整的零件图像,一次只能拍摄到部分零件图像,需要多次采集,因此采集到的图像之间难免会有重复。这样,在检测之前首先要用图像算法实现晶元定位、删除重复的晶元区域,然后才能进行后续的晶元检测。
近年来,研究人员提出了许多晶元的定位方法。李良和廖圣龙[2-3]提出模版匹配的方法,基于灰度或者边缘信息,设置多重阈值,提高算法的效率;Kong Y[4]等人提出单模和混合模式下的模式识别方法,采用模版匹配对晶元图像重叠区域进行定位和分类;但模版匹配的方法需要逐点匹配,计算量大,匹配效率低。传统上也有一些基于特征的SURF、SIFT、角点检测等算法,自动计算特征,然后进行匹配,但选取的特征点仍然比较多,计算量偏大,运算速度仍然偏低[5-6]。由于本论文需要检测的晶元图像周期性很强,采用上述算法进行图像配准容易造成误匹配的现象,导致图匹配精度差,而且还需要后续算法去除误匹配的特征,计算速度也会比较慢。
本文在结合国内外最新研究成果的基础上,结合待检测零件的特征,提出了一种基于特征的LED晶元图像定位与检测的方法。根据图像的特征,确定将晶元组上的铜柱作为特征,选取的特征少,计算速度快。首先用阈值分割和边缘查找的方法提取这些特征的位置;然后利用晶元组和特征的几何关系,实现晶元组的定位;再利用晶元在晶元组中的几何位置和图像分割技术实现晶元的提取和检测。检测完毕后,利用晶元组的定位关系,实现整个图像的拼接,显示全部晶元组和各个晶元的检测结果,方便最后人工复核。
我们要检测的是一整板零件,每个底板包括多个晶元组,每个晶元组上又焊接了多个晶元。典型的零件如图1,该零件含有7×23个晶元组,而每个晶元组上又焊接了6个晶元。图2是用X光相机单次采集的局部图像。从中可以看出,每个晶元组包含4个铜柱。在零件中,铜柱最厚,所以X光图像中铜柱的灰度最小。因此可以利用这一点,用晶元组上的铜柱作为特征,实现晶元组的定位[7]。
图1 整板的晶元图像Figure 1 Image of the whole assembly
图2 晶元图像特征分析Figure 2 Image of one shot
图像处理的流程如图3,包含图像采集、图像预处理、晶元组定位、晶元定位和晶元检测五个部分。X光相机采集的图像传入电脑后,首先对图像进行预处理,主要是用高斯滤波去除噪点;然后用阈值分割和边缘提取的方法提取特征的位置,利用特征的几何关系定位晶元组区域;再对晶元组采用自适应阈值分割和轮廓提取的方法,对晶元组中的晶元进行定位与检测。
图3 算法处理流程Figure 3 Flow chart of the algorithm
首先采用阈值分割提取铜柱,然后用边缘查找方法提取铜柱边缘,确定铜柱位置[8-9]。
由于铜柱的灰度最小,为了能够提取到全部的铜柱,查找图像中灰度的最小值,将灰度最小值加上一个容差,作为阈值,对图像进行二值化。然后用边缘查找的方法确定铜柱的位置,如图4。
图4 阈值分割后的图Figure 4 Image after thresholding
从图4可以看出,有28(7行和4列)个铜柱,先对铜柱进行从上到下,从左到右的排序。铜柱的中心坐标用(x00,y00),(x01,y01)…(x35,y35),(x36,y36)表示;计算每一行中相邻铜柱之间的距离,通过排序找出距离的最大值,利用距离最大的两个铜柱,就可以初步确定晶元组的左右边界。以图5(a)的图像为例,晶元左右边界铜柱的位置和铜柱之间的距离可以用下式表示:
(1)
用同样地方式,计算每一列中相邻铜柱之间的距离,找出最大值。因为晶元组不止一列,所以选取距离与最大值相差小于一定容限的相邻铜柱,从而确定晶元组的上下边界。如图5(a)的图像为例,晶元组上下边界的铜柱和晶元组的高度H可以用下式表示:
(2)
通过边界铜柱的位置和铜柱之间的位置可以实现晶元组的粗定位[10]。因为4个铜柱之间包含的晶元组并不是完整的,所以需要对特征包含的晶元组进行适当地扩张,得到3个完整的晶元组区域,如图5(b)。
图5 晶元组定位Figure 5 Located part
通过第3节的方法实现了晶元组的定位。在这种情况下,晶元组上都焊接有晶元,但有时也会出现故障,没有焊接晶元,造成晶元缺失,这两种情况如图6。
图6 晶元正常和缺失Figure 6 Normal parts and defected parts
晶元定位的方法如下所述:首先采用自适应的阈值分割方法实现晶元与背景的分离[11-12],从阈值分割后图7(a)和图7(b)中可以看出,晶元与晶元之间有连通区域,不利于查找完整的晶元轮廓。接着用闭运算去除连通区域[13-14],其效果如图7(c)和图7(d)。从中图7(d)可以看出,第2和第3、第4和第5的位置中间会有连通区域,无法实现区域之间的分离,将这种情况判定为晶元缺失。
定位晶元组之后,查找出晶元轮廓后,根据晶元的几何关系,实现晶元的精确定位如图7(e)。如果为晶元缺失,则标记整个晶元组为不良,如图7(f)。
图7 晶元定位Figure 7 Chips located
在晶元定位的基础上,对每个晶元的焊接质量进行检测。从图8(a)中可以看出,对比焊接良好的晶元区域,焊接不良区域的颜色要浅一些,灰度值会大一些。对晶元组中的每一个晶元进行自适应阈值分割处理,通过轮廓查找识别不良区域,结果如图8(b)。
图8 不良晶元Figure 8 Defected chips
在Windows10、CPU i7和16G内存的电脑上,采用C++语言调用opencv库编写程序实现了前述算法,对X光相机采集到7行8列的部分图像进行定位与检测。最后还将所有提取的晶元组按照顺序拼接为一张图像[15-16],方便人工复核。最后的检测结果如图9。从图中可以看出,成功实现了晶元组的定位,成功检测到了晶元缺失和晶元焊接不良的情况。
图9 检测结果Figure 9 Test result
程序的运行效率比较高,对7×23个晶元组定位时间为0.7 s,再加上晶元检测,总计运行时间为12.4 s,检测效果良好。通过对10整板的零件进行检测,检测到的晶元个数为8 720个(一整板的晶元个数为966个),定位错误的只有10个晶元,晶元组定位的准确率超过了98%;检测错误的晶元为65个,准确率超过了90%。少数定位和检测错误的情况,在实际生产中通过人工复核修正。6 结 论针对自动获取特征算法存在的计算量大,而且容易出现误匹配的现象,根据待检测零件图像的特征,人工选择特征,提出了基于特征的晶元自动定位与检测方法。通过对晶元图像的特征进行分析,确定采用铜柱作为特征;用阈值分割和边缘提取的方法,实现铜柱的定位;再利用铜柱之间的几何关系,实现晶元组定位;最后利用自适应阈值分割和轮廓提取的方法实现晶元定位与检测。实现晶元组定位后,再对晶元进行定位和检测,能够检测出晶元缺失的晶元组和焊接不良的晶元。程序运行效率高,整个零件中晶元组定位时间为0.7 s,加上晶元检测,总计时间为12.4 s。检测效果良好,晶元组定位和晶元不良检测的准确率分别大于98%和90%,可以满足实际生产的需要。编写的程序现已成功应用于宁波升谱光电有限公司的实际生产。