PCB 焊点及芯线端头识别
2022-11-18刘翰林张荣福
刘翰林,张荣福
(上海理工大学 光电信息与计算机工程学院,上海 200093)
引言
随着科学技术的不断发展,过去人们在焊接电路板过程中通过人眼直接观察识别印刷电路板(PCB) 焊点及被焊芯线的方式逐渐被现代人工智能技术所取代,焊接质量也逐渐受到人们的重视[1]。焊点和被焊接芯线的识别精度直接影响着最终的焊接质量,焊点和芯线端头识别方法因实际情况而异。本文对同一视野内不同位置的焊点和芯线端头的颜色、形状等特征信息的分析进行识别算法思路的构建。为了提高效率,达到实时性要求,本文视觉系统硬件采用LED 光源、工业镜头、显微镜和计算机组成。软件主要利用计算机视觉库OpenCV 配置VS2017 完成图像算法处理[2]。基于该环境下提出基于颜色阈值分割的焊点识别算法和基于灰度特征的芯线端头识别算法。焊点和芯线端头皆通过预处理、图像分割、特征提取等完成识别过程。但由于焊点和芯线端头不同的特征信息,细节处理算法也有所差异。
目前已有对焊点及芯线相关识别算法的研究,比如朱文杰等[3]以机器视觉为基础对焊点进行定位,通过Hough 圆检测拟合焊点边缘轮廓并确定中心点位置;张玉登等[4]采用基于HSV 颜色空间下的焊点检测技术,通过选取HSV 空间下的V 通道结合大津法(Otsu)完成焊点分割。杨懿[5]采用大津法计算图像焊点阈值转为二值图像,对轮廓进行有效提取,改进Hough 变换精确计算焊点圆心对应位置。本文焊点识别是基于HSV 空间下的处理,根据HSV空间下的色系设定上下限阈值进行阈值分割,相较于已有的采用HSV 单通道焊点的分割算法而言,本文的焊点识别方法更直观、快速且识别准确率相对较高。
1 图像预处理
1.1 图像去噪
通过图像采集设备采集到的是RGB 空间下的彩色图像,环境干扰、光照不均匀等原因使采集到的图像不可避免地存在噪声[6],从而影响人们对图像信息的接收。因此在提取待测物特征信息之前需进行噪声的抑制。平滑滤波处理能有效地抑制图像中的噪声,图像的空间域中进行的图像处理操作即为空间滤波。图像滤波既可以在空域滤波也可以在频域滤波。频域滤波算法计算复杂且实时性较差,而空域滤波不需要任何变换便可直接对像素点进行处理,大大缩短处理时间,性能也得到了很好的提升,因此本文选用空域滤波算法完成去噪过程。
去噪作为一种重要的预处理,其效果好坏直接影响后续的图像处理工作[7]。常见的空域滤波方法有均值滤波、中值滤波、高斯滤波[8-9]。均值滤波是用一片图像区域的各个像素值的均值来代替原图像的像素值,需对目标像素给出一个内核模板,用模板中全体像素的平均值来代替目标像素。中值滤波是将模板对应的邻域像素的灰度值先进行统计排序,然后将统计结果作为模板中心对应像素的输出值。高斯滤波是对图像进行加权平均的过程,每一个像素点的值都由其本身和邻域内的其他像素值加权平均后得到,不同位置的像素赋予的权重比例不同。高斯分布函数决定其滤波模板。为分析不同滤波算法去噪效果,本文统一采用大小为5 的模板作为内核参数设定。图1 和图2 分别为焊点和芯线端头滤波效果图。
图2 芯线端头原图及滤波效果图Fig.2 Images of original core wire end and filtering effect
从结果可以看出不同滤波算法的处理效果各有差异,对于焊点而言三种滤波效果差别细微,而对于芯线端头则有较为明显的区别。中值和高斯滤波处理后的端头模糊程度较高,轮廓识别度降低,不利于后续分割。在实际应用时,应根据期望的图像和边缘特征等来选择合适的滤波方法,这样才能发挥图像滤波的最大优点。因此结合实验结果,本文选择保边效果较好的中值滤波对焊点进行预处理,对芯线端头采用均值滤波,为后续感兴趣区域提取及识别提供基础。
1.2 图像特征分析
去噪完成后需对目标进行特征分析方便后续特征提取和分割处理。彩色图像的分割关键在于如何利用丰富的色彩信息来达到分割目的[10],所以本文从焊点及芯线端头特征入手。
张熊楚等[11]通过大津法(Otsu)分别对RGB颜色空间下的2G-R-B 分量的灰度图像进行阈值分割。刘波等[12]将图像转换至其他颜色空间下,将该颜色空间各分量分离出来,并对其进行二值化处理。对彩色图像进行分割,选择符合人眼视觉特性的颜色空间对于后续分割至关重要。HSV 颜色空间在用于指定颜色分割时作用比较大,运行速度较快且其三要素相互独立,是比较接近人眼对色彩感知的颜色空间。因此,为了便于色彩处理和识别感兴趣区域(ROI)的目标焊点,本文将在HSV 空间下对焊点进行图像算法的处理。
焊点在H、S、V 颜色通道模型中会呈现不一样的图形基本特性[13]。HSV 是Alvy Ray Smith 根据颜色的直观特性创建的一种颜色空间。这种颜色空间在各种图像分析任务中多有应用,例如可以用来作肤色区域分割[14]等。RGB空间与HSV 空间的转换关系如下:
式 (1) 中H的值在0°~360°之间,S和V的值在0~1 范围内变化。如图3 所示,HSV 模型可用圆柱坐标系中的一个圆锥形子集来表示。
图3 HSV 颜色空间模型Fig.3 HSV color space model
根据原图对感兴趣区域的焊点进行空间转换,得到HSV 空间下单个焊点的颜色分布情况,如图4 所示。
图4 ROI 单个焊点HSV 图Fig.4 HSV image of ROI single solder joint
根据图4 结果可知,HSV 空间下的焊点色系易辨别,其色系之间相对分明,能较好体现其颜色特征。所以本文考虑基于OpenCV 的HSV颜色体系结合HSV 颜色参数列表完成焊点后续分割及识别。
同样对芯线端头进行HSV 空间的转换,结果如图5 所示。根据结果可知,HSV 下的芯线端头颜色信息相对混杂且所属色系不易区分,在这种情况下对其颜色特征进行分析比较困难,若直接根据HSV 颜色参数列表进行阈值分割可能会出现芯线端头区域存在部分缺失的情况,给后续识别带来不便。
图5 ROI 芯线端头HSV 图Fig.5 HSV image of ROI core wire end
由于HSV 空间下的颜色分析对于芯线端头难度较大,因此可根据其他特征对芯线端头进行分析。假设将芯线当作前景,其余部分为背景,则从原图可以看出芯线与背景之间的颜色及形态差异比较大,所以考虑依照灰度特征的变化来提升前后背景对比度差异,从而实现芯线端头分割。
每一张图片都是由红色(Red),绿色(Green),蓝色(Blue)三原色组合而成,不同颜色在这三个分量上的分布特点是不一样的,颜色差异直接影响其在分量间的分布规律。为体现出颜色分量间的差异性,本文基于OpenCV 下的split 函数对RGB 空间下芯线端头原图进行分离得到R、G、B 单通道图。芯线端头单通道显示如图6 所示。
图6 RGB 单通道图Fig.6 RGB single channel images
对比图6 结果可知,G 通道下的芯线与背景灰度差异较大。为了更直观地感受图像对比度差异,突显芯线端头有用的特征信息并提高辨识度,本文提出一种基于RGB 单通道下图像增强的方法完成芯线端头的后续分割及识别。
综上所述,通过对焊点及芯线端头的颜色等特征进行分析,制定了较为合理的分割前预处理方案,有利于后续的分割及识别过程。
2 焊点识别算法
通过上一节对焊点和芯线端头的颜色特征分析及分割方案的制定,本节主要描述焊点和芯线端头的详细分割过程及后续识别算法。
基于HSV 空间的焊点识别算法流程如图7所示。首先通过颜色空间转换对照HSV 颜色参数列表完成对焊点的阈值分割,可以分割出焊点所在区域,然后根据分割后图像中的噪点位置结合原图像特征,利用掩膜方式去掉噪点部分,再通过轮廓检测算法完成对焊点轮廓的检测及提取,最后对焊点轮廓所在位置显示其中心点像素坐标,完成焊点的识别过程。
图7 焊点识别算法流程Fig.7 Process of the soldering joint recognition algorithm
焊点识别算法步骤如下。
1)对预处理后的焊点图像进行颜色空间转换并结合HSV 颜色空间参数列表进行阈值分割。在OpenCV 算法实现过程中,H被量化为0~180,V和S被量化为0~255。观察焊点感兴趣区域,根据焊点显示的暗黄色颜色特征,结合HSV 颜色参数列表进行目标焊点颜色提取,选定合适的阈值。HSV 颜色空间参数列表如表1所示。筛选颜色特征可参照表上各颜色参数分布情况及实验获得,确定待识别的焊点颜色范围在橙色和黄色之间,分割效果如图8 所示。
表1 HSV 颜色空间参数列表Tab.1 HSV color space parameter list
图8 焊点分割结果图Fig.8 Image of soldering joint segmentation result
2)观察分割结果可知白色噪点主要位于PCB板和背景的交界处及其左边部分区域,且原图像板子与背景交界处泾渭分明,如图9(a)所示。考虑利用掩膜对白色噪点进行抑制。首先对预处理后的原图像进行灰度二值化处理,再进行形态学滤波处理。二值化阈值为人工调试结合分割效果得到,如图9(c)所示。
图9 Mask 图实现步骤Fig.9 Implementation steps of mask image
形态学滤波基本操作有膨胀、腐蚀、开启和闭合[15]。膨胀是通过结构元扫描方式对边界进行外扩,腐蚀则是对边界进行收缩。两者用公式可表示为
其中B为结构元,E是被处理空间。通过B对E中的每一点像素进行扫描,膨胀的结果就是B扫描后与E的交集非空的点构成的集合,腐蚀就是B扫描后包含于E的所有点构成的集合。结构元参数选取根据所要提取物体的形状特征来设定,本文算法选取矩形结构元。形态学方式选择闭操作,即先膨胀后腐蚀,目的是去除图9(c)中存在的小型黑洞。滤波后生成的mask图用于掩膜,完成对白色噪点的抑制,图9 为mask 图的实现步骤。
3)图像掩膜是用选定的图像、图形及物体对被处理图像进行全局或局部的遮掩,使图像处理的区域被控制的过程,通过位之间的相“与”运算实现感兴趣区域的提取。其主要应用于对感兴趣区域的提取、屏蔽效果、结构特征的提取及特殊形状的图像制作方面。掩膜运算过程示意图如图10 所示。
图10 图像掩膜Fig.10 Mask image
形态学滤波次数N的取值会不同程度地影响掩膜结果,结果对比如图11 所示
图11 掩膜结果Fig.11 Mask results
实验结果表明N的取值大于或等于4 时对白色噪点区域抑制效果较好,且随着次数增加处理效果无明显差异,因此该部分算法选取N=10作为滤波次数参数设定。
4)对掩膜后的图像进行轮廓检测。首先通过轮廓查找结合内循环进行遍历检测,获得检测到的轮廓上的所有点的最大最小横纵坐标值(xmax,xmin,ymax,ymin),最大最小横纵坐标的中值近似为闭合轮廓的中心点坐标。图12 所示为确定中心点的示意图。
图12 轮廓中心点示意图Fig.12 Schematic of contour center point
然后用红色实心圆点来标记轮廓中心点,最后显示识别到的中心点的像素坐标。以原图左上角的4 个焊点为例,识别结果如图13 所示。
图13 焊点识别结果Fig.13 Solder joint recognition results
从识别结果来看,基于HSV 颜色空间的焊点识别算法能有效地识别出焊点大致位置并显示中心点像素坐标。
3 芯线端头识别算法
基于RGB 单通道处理的芯线端头识别算法框图如图14 所示。首先单通道处理后获得G 通道下图像,然后通过图像增强算法结合对比度增强结果,从人眼直观角度来选择合适的通道作为基础进行后续处理,接着通过形态学滤波对图像细节进行处理,根据实验得到的阈值完成芯线端头分割,最后通过连通域分析结合芯线形态特征完成芯线端头的识别过程。
图14 芯线端头识别算法框图Fig.14 Flowchart of core wire end recognition algorithm
芯线端头识别算法步骤如下。
1)原图经预处理后,首先分离得到单通道下的图像,然后通过图15 所示的A、B 两图像自乘方法实现对比度增强,增大亮暗图像像素点之间的差距。图16 为三个通道的图像自乘后的结果,考虑到乘积溢出情况,该算法使用饱和运算机制将小于0 的通道值置位0,大于255 的置位255。
图15 图像乘法运算Fig.15 Image multiplication
图16 对比度增强效果图Fig.16 Contrast enhancement effect
对比R、G、B 通道下的对比度增强处理,可看出在G 通道下对芯线端头图像处理后的灰度变化较大,可看出明显的差异性。传统图像增强方法直方图均衡化也可达到图像增强目的,其原理是通过原灰度直方图求出每个像素点发生的概率,对于每个像素点概率乘以动态范围向下取整后得到均衡化后的图像。直方图均衡化处理效果如图17 所示。
图17 直方图均衡化Fig.17 Histogram equalization
对比两种图像增强算法的实验结果,可以看出直方图均衡化对于芯线端头与背景区域的对比度区分效果不太理想,处理后仍有些许噪点,不利于后续分割。而基于RGB 单通道处理再进行图像自乘后的处理效果能明显体现出芯线端头与背景的对比度差异。
2)图像增强后进行灰度形态学滤波。这是对灰度图像的形态学滤波操作,处理形式与二值化后的形态学滤波操作相同,通过开或闭操作来对芯线端头的边缘细节进行扩大或缩小,目的是尽量得到较为完整的轮廓边缘信息。结构元根据芯线端头形态特征选择矩形核,图18 为形态学滤波中开闭运算处理效果图。
图18 形态学滤波Fig.18 Morphological filtering
从形态学处理效果来看,开运算处理后的感兴趣区域的芯线端头图像边缘特征较闭运算而言更为完整,有利于后续的轮廓提取。因此使用形态学滤波算法中的开运算完成芯线端头的细节处理。
3)形态学滤波后进行阈值分割。通过实验调试结合分割效果进行阈值参数thresh 的设定,参考阈值最大值maxval 设置为255(白色),选择合适的阈值分割类型结合式(3)完成二值化处理:
式(3)表示大于设定阈值的像素灰度值为0,其他像素点值为最大值255。不同参数设定分割效果差异性较大,经多次实验后对比不同阈值下分割效果可选定阈值为40 进行二值化处理,效果较为理想。二值化分割与HSV 阈值分割及自适应算法分割结果相比较,如图19 所示。
图19 分割结果比较Fig.19 Comparison of segmentation results
对比分割结果可看出,HSV 阈值分割使感兴趣区域的芯线端头部分区域缺失,自适应阈值分割削弱了芯线端头轮廓特征,而二值化分割结果与前两种方式相比,感兴趣区域的芯线端头的边缘特征保留相对完整。
4)通过连通域分析对分割后的图像进行轮廓提取、面积判断并排序,最后识别芯线端头的像素坐标。连通区域一般是指图像中具有相同像素值且位置相邻的前景像素点组成的图像区域,连通区域分析是指将图像中的各个连通区域找出并标记,通常对二值化后的图像进行处理。
该部分算法流程如图20 所示,首先通过轮廓函数查找所有边缘轮廓,然后提取连通域的边缘,再对连通域面积大小排序,找出最大面积连通域并标记,接着保留最大面积连通域边缘轮廓点的值,取右侧较大的3~5 个点求其坐标的平均值,忽略干扰。与传统的冒泡排序法相比,为了优化时间性能,提升运算速度,提高效率,此处使用直接排序法,实现类型为升序。
图20 连通域分析算法框图Fig.20 Flowchart of connected domain analysis algorithm
芯线端头识别结果如图21 所示。
图21 芯线端头识别结果Fig.21 Core wire end recognition result
4 实验结果分析
为了验证本文算法的焊点和芯线端头识别结果与人工识别结果的有效性与准确性,需事先进行定标。定标是以标准物件来确定其误差。为了确保数据测量的精确性和可靠性,本文选用高精度圆点标定板进行定标,对焊点及芯线端头识别结果进行验证与误差分析。标定板规格参数如表2 所示,定标结果如图22 所示。
图22 定标结果Fig.22 Calibration results
表2 标定板规格参数Tab.2 Calibration plate specification parameters
4.1 焊点识别误差及其分析
首先将本文焊点识别算法中焊点轮廓的提取部分与文献[16]中的电路板焊点分割部分进行整理。本文算法在阈值类型选取及设定方面有所变化,但两者的焊点分割部分都是基于HSV 空间下的阈值分割。现将本文与文献[16]中的阈值分割算法进行同一焊点的测试,结果如图23 所示。
根据图23 的对比结果可知,本文焊点识别算法相较于文献中的识别算法准确率更高,且对于焊点的轮廓提取更为完整,有利于轮廓中心点的确定。
图23 算法对比Fig.23 Algorithm comparison
本文通过基于HSV 颜色空间的图像处理算法完成焊点的识别,分别对同一视野内不同位置的焊点样本进行该算法实验,识别结果如图24所示。
图24 不同情况的焊点识别效果Fig.24 Solder joint recognition results of different cases
为了实验的完整性及算法有效性验证,再将本文识别算法与相机SDK 下人工实测结果进行对比,结果如图25 所示。
图25 两种方式的焊点识别效果Fig.25 Solder joint recognition results of two methods
限于篇幅,为了方便后续数据整理分析,按照图26 所示的焊点区域分布及命名方式来获取同一图片下本文识别算法与人工实测的焊点像素坐标数据。
图26 焊点分布和命名方式示意图Fig.26 Schematic of solder joint distribution and naming method
为确定焊点识别精度及与PCB 板上焊点之间的实际尺寸的量化关系,方便后续将芯线端头与焊点的实际空间位置联系起来,假设本文焊点识别算法所识别到的焊点像素坐标为(x1,y1),人工识别的焊点像素坐标为(x2,y2),则欧氏距离D可表示为
数据获取方式是以PCB 板区域左上角第一个区域(a 区域)的焊点圆心a(0,0)开始,依次按照“a 区域→b 区域→c 区域→d 区域”的顺序进行,对获取的16 组样本数据进行分析,根据式(4)计算相同位置下两种方法得到的焊点像素坐标之间的欧氏距离,整理结果如表3 所示。
表3 本文识别算法与人工识别的焊点坐标对比Tab.3 Comparison of coordinates between algorithm recognition and manual recognition of solder joint
根据事先得到的定标结果,结合识别到的焊点中心点像素坐标及表2 数据,可计算出这4 个区域内共8 组左右圆心距与上下圆心距的值,对本文算法与人工实测的圆心距测量值进行分析比较,结果如表4 和表5 所示。
根据实验要求的±0.1 mm 的测量误差范围,结合表4 和表5 的数据分析可知,本文算法结果与焊点识别结果的测量值误差均能达到最初实验要求且识别准确率达90%以上,因此采用基于HSV 颜色空间的PCB 焊点识别算法能有效地识别焊点及其位置信息,可为自动测试提供坐标数据。
表4 焊点圆心距测量值对比(左右)Tab.4 Comparison of measured values of center distance of solder joint circle(left and right)
表5 焊点圆心距测量值对比(上下)Tab.5 Comparison of measured values of center distance of solder joint circle(upper and lower)
4.2 芯线端头识别误差及其分析
本文通过基于RGB 单通道处理的相关算法完成了芯线端头的识别。图27 为4 组不同情况下本文算法与人工实测的芯线端头识别效果,同组左边为本文算法识别结果,右边为人工实测结果。
图27 两种方式的芯线端头识别结果Fig.27 Core wire end recognition results of two methods
为了验证识别结果的有效性和准确性,选取10 组图片数据进行整理分析,对本文算法与人工实测的数据进行比较,结果如表6 所示。
表6 本文识别算法与人工实测的芯线端头坐标对比Tab.6 Comparison of coordinates between recognition algorithm and manual measurement of core wire end
通过定标结果计算可知一个像素大小为3.41 μm,根据0.1 mm 的测量误差所对应的像素距离范围,结合表6 中欧氏距离计算结果可知,本文芯线端头识别误差均在允许的测量误差范围之内,并且识别准确率可达95%以上。因此本文基于RGB 单通道处理的芯线端头识别算法能准确地识别芯线端头所在位置,可为自动焊接过程芯线端头的识别提供有效的方法。
5 结论
本文通过对焊点和芯线端头的图像采集、图像增强、阈值分割、识别算法等一系列处理过程,完成了对焊点和芯线端头的识别,并成功提取到其像素坐标。识别结果表明:与人工焊点识别算法相比,本文基于HSV 空间的焊点识别算法准确率更高;同时基于RGB 单通道处理的芯线端头识别算法高效快捷,焊点和芯线端头识别误差都较小。这为自动焊接过程中PCB 板的焊点和被焊芯线的检测提供了较为有效的方法,后续可应用到实际工程中。