王宜结,井 田
(淮南师范学院 电子工程学院,安徽 淮南 232038)
印刷电路板(Printed circuit board, PCB)贴片焊盘坐标提取的目的是提供给自动点锡膏机使用,为后续人工贴片或机器贴片做准备。如果电路板不便或不能通过现有设计软件获取贴片焊盘的坐标,可通过摄像头对电路板进行图像采集,并对图像进行修剪校正处理,去掉除焊盘图像之外的所有不需要的图像, 如文字图形信息及带钻孔的焊盘等,再通过特定的算法可将其坐标提取出来。
焊盘坐标的提取关键在于正确地识别出焊盘。图像识别以图像的主要特征为基础,分为特征提取和识别两个过程[1]。 本文涉及的图像处理较简单,在对图像进行灰度化后, 通过阀值分割成二值图像。“计算二值图像特性的算法非常简单,容易理解和实现,并且计算速度很快”[2]。边缘检测常用于提取特征图像,“图像的边缘包含了大量重要的信息,边缘检测算法通常基于它的一阶或二阶导数算子进行”[3], 边缘检测法能较准确地提取图像但计算量较大。
本文先灰度化图像再二值化,把明亮的印刷字符图形及较暗的背景色清除,再进行适当的形态学方法处理,最后提取出贴片焊盘图像并求出质心坐标,避免了复杂的边缘检测算法。
图1 贴片焊盘坐标提取流程图
系统实现过程: 通过摄像头获得PCB 图像,PCB 可能是自己实验室自制的,也可能是工厂打样后的。 图像通过下位机采集后由USB 接口送到上位机处理。 上位机软件首先要对图像进行预处理,通过四周剪切操作得到只含电路板区域的图像,然后再对图像进行后续处理,识别出贴片焊盘并提取坐标(处理流程如图1 所示)。
第1 步:拍照。 通过高清摄像头对电路板进行拍照,以获得清晰的照片,并进行四周剪切,如图2(a)所示。 在摄像过程中尽量使摄像头的中心对着电路板的中心,以减少图像变形。 图像的质量直接影响到识别的效果,因此要尽可能提高图像的对比度及清晰度。
图2 电路板原图及其灰度化和校正后图
第2 步:对电路板原始图像(图2(a)进行预处理。在拍照时,由于各种主客观原因,图像不可能拍得十分清晰,因此需要修补图像缺陷,如有些焊盘拍照时太暗了,需要增强亮度,或人为添加焊盘,还要去掉非带孔的焊盘。可用第3 方软件去除照片中不必要的信息并对图像缺陷进行修补及裁剪。由于上面的图片较大, 这里只取局区域叙述预处理过程。 图3(a)为截取的部分原图,该图中部分焊盘拍照时太暗,修补后得到图3(b)。 图3(c)为去掉通孔焊盘的图像。
图3 部分原图及处理后的图
第3 步: 将预处理后的PCB 彩色图像变换成灰度图像。 对于彩色图像而言,灰度化处理就是使彩色图像的三基色R、G、B 分量值相等的过程。 灰度化处理的主要方法有3 种。 第1 种是最大值法:使 R、G、B 的值等于 3 值中最大的一个, 即 R=G=B=max(R,G,B),最大值法得到的灰度图像亮度较高;第2 种是平均值法:取R、G、B 的平均值作为灰度值,即R=G=B=(R+G+B)/3,平均值法可得到相对柔和的灰度图像;第3 种是加权平均值法:根据重要性或其他指标给R、G、B 赋予不同的权值, 并使R、G、B 的值加权平均,R=G=B=xR+yG+zB,其中 x、y、z 分别表示权重。 大量实验结果发现,人眼对绿色的敏感度最高,其次为红色,而对蓝色的敏感度最低, 因此x> y>z。 实验和理论证明当x=0.30,y=0.59,z=0.11 时,能得到最合理的灰度图像。 但常见的印刷电路板的背景颜色为绿色、 蓝色、 黑色、红色、黄色、白色等,根据PCB 的背景颜色特征,可用下述方法将彩色图像处理成区分度较好的灰度图像。 以蓝色电路板为例,蓝色电路板的背景色是蓝色,通过matlab 软件分析,发现其三基色RGB 的R分量中,图像中各区域的区分度很明显,蓝色背景色区域的R 分量值在50 以下,焊盘的R 分量值主要分布在80~130 之间,而白色字体的R 分量值分布在150~255 之间,据此,可将R 分量作为灰度值得到灰度图像,用此法可得到原图2(a)的灰度图像,如图2(b)所示。 其它颜色的电路板也容易找到有明显灰度区分度的特征。
第4 步:对进行图像校正。 由于拍照时图像不可能拍得特别正, 因此需要对图像进行位置校正。图像倾斜矫正关键在于根据图像特征自动检测出图像倾斜方向和倾斜角度。目前常用的检测倾斜角度的方法有:基于投影的方法、基于Hough 变换和基于线性拟合的方法,还有进行傅里叶变换到频域来进行检测的方法[4]。这里仅介绍Radon 变换算法实现。
利用Radon 变换检测直线倾斜角度的具体步骤如下。
(1)用edge 函数计算图像的边缘二值图像,检测出原始图像中的直线。
(2)计算边缘图像的 Radon 变换,对每一个象素为1 的点进行运算 (0 ~ 179°方向上分别做投影)。
(3)检测出Radon 变换矩阵中的峰值,这些峰值对应原始图像中的直线。 Radon 变换矩阵中的这些峰值的列坐标θ 就是与原始图像中的直线垂直的直线的倾斜角度,所以图像中直线的倾角为 90°。
受版面限制,这里取图2(a)中的很小一部分(图4(b))详细描述图像灰度化及后续处理过程。设图像文件名为I_part.jpg, 该图对应的原始设计图如图 4(a)所示。
图4 部分PCB 设计图、部分原图和灰度化图
图5 清除丝印层图及去除噪点的图像
通过下列matlab 代码提取R 分量处理 [图4(b)],可得到图 4(c)所示的灰度图像。 灰度化代码如下:
img_part= imread ('D:I_part.jpg'); %读取RGB格式的彩色图像
ipg=img_part(:,:,1); %取 R 分量作为灰度值得到灰度图像ipg
第5 步:除去图像中背景、白色丝印字体和图形及白色小噪点。去掉背景及白字丝印字体和图形的具体做法是, 先将灰度值大于200 或小于80 的像素变成黑色。 这两个值可在软件中进行动态调节,以获得最佳效果。 代码如下:
图5(a)是对图4(c)去除背景及丝印层后的图像。 从图5(a)中可以看出,图中丝印字体及焊盘四周的图形的边缘由于灰度值较低,没有除去,可通过下面的算法除去。 从图5(a)中可不难发现,这些白色边缘较细,并且其上下或左右都是黑色,据此特征,可对图像中的全部像素进行扫描,若发现某点存在上述情况,则将其变成黑色。 具体处理代码如下:
图5(b)是经过上述代码处理后进一步去除丝印层后的图像。 图5(b)中一些丝印白色字体及图像尚有残留,形成很多小噪点,这些残留所构成的连通域相对于焊盘区域面积都不大, 可以通过bwareaopen 函数清除这些小噪点。该函数的调用格式如:BW2 = bwareaopen(BW,P,conn),其作用是删除二值图像BW 中面积小于P 的对象, 默认情况下,conn =8, 即 8 邻域。 上述图像通过 “img2 =bwareaopen(img,32,8)”处理后,再使用填充函数imfill(img2)对封闭区域的空洞进行填充,可得到如图5(c)所示图像。
第6 步:平滑图像。 腐蚀膨胀是形态学图像处理的基础, 腐蚀在二值图像的基础上做 “收缩”或“细化”操作,膨胀在二值图像的基础上做“加长”或“变粗”的操作。 先腐蚀后膨胀的过程称为开运算,其作用是清除图像边缘周围非边缘的细小的点,用来消除小物体、在纤细点处分离物体、平滑较大物体的边界的同时并不明显的改变其面积。平滑过程可根据需要添加,本文中未进行平滑处理。
第7 步:提取坐标及标注焊盘中心位置。 通过函数bwlabel 及plot 对焊盘坐标提取和标注。
bwlabel 函数的调用格式如:“[L,n]=bwlabel(I_bw,8);”, 它返回一个和 I_bw 大小相同的 L 矩阵,包含标记了I_bw 中每个连通区域的类别标签;获取二值图像I_bw 中8 连通域的个数n。 代码如下:
上面求得的坐标值单位为像素,还要进行标度变换。图 3(b)的大小为 331×310 像素,对应的 PCB实际尺寸为 19.05×17.78 mm。 19.05/331=0.575 5;17.78/310=0.537 2; 平均:0.055 64 mm/像素。
本文中的电路板是作者用PADS 软件设计并交工厂打样得到的。通过PADS 软件可以提取各贴片元件焊盘的坐标值。 表1 列出了图3(b)中部分贴片元件的实际坐标及通过前述算法进行图像处理后得到的坐标。 从表1 中可以看出,坐标值有一定的误差,但大部分误差都小于0.2 mm,对于点锡膏焊接而言,这个误差是比较小的。 而最大误差为0.38 mm,对焊接也不会有明显影响,因为锡膏熔化后由于自身张力会自动找正元件。图6 给出了坐标误差分布情况。
表1 贴片焊盘坐标
图6 坐标误差分布图
引起焊盘识别误差的原因有如下几点:由于拍照时光线不均匀,导致焊盘与丝印层边缘灰度区分度不高;部分焊盘丝印时不准确,丝印图形太贴近焊盘,有的几乎与焊盘其连成一体;还有图像像素密度不够高。可通过提高拍照质量及图像分辨率来减小误差。
本文主要分析了贴片焊盘坐标的提取方法并进行了实验验证。 在具体操作时,由于图像拍摄质量不稳定,导致在识别过程中对灰度的阀值取值上波动范围较大,以至于造成二值图像的处理难度较大。 当图像质量好、焊盘与背景颜色或亮度区分度大并且失真较小时,识别效果较好,产生的误差很小。但当图像质量较差时,识别难度明显加大,错误率偏高,因此在识别前要对图像进行修正和缺陷修复处理。 如果直接从PCB 软件输出焊盘图像,则提取坐标的准确率可以接近100%。 总之,该算法在具体实现的效果上还存在一些不足,需要在以后的研究中找出更理想的方案和算法。