2.5 案例——灯泡灯脚检测中的图像处理
2.5.1 检测背景
本案例的主要任务是检测H3型车用灯泡灯脚。在工厂生产H3型车用灯泡时,有一个十分重要的环节,就是封装H3型车用灯泡灯脚,其封装前后对比如图2-37所示,其中,图2-37a为原始灯泡图像,图2-37b为封装后的灯泡图像。由于封装盖底部是封闭的,并且有一只灯脚必须焊接在封装盒里面,所以灯脚的长度是必须严格限制的,以免太长挤压封装盖底部以致灯脚弯曲或者断裂甚至短路,或太短而无法封装灯脚。因此本项目的任务是设计一个H3型车用灯泡灯脚检测系统,完成在线实时检测,并对不合格的灯泡进行分类剔除,以满足工厂的实际需求。
检测标准如下。
1)合格产品:双灯脚长度均为8mm,误差小于0.15mm。
2)不合格产品:①若只有一个灯脚长度合格,则存入采集盒1;②若为其他不合格产品(根据目前的划分规则),则存入采集盒2;③若为待添加的新类型不合格产品(用于后续扩展),则存入备用采集盒3。
图2-37 灯泡灯脚封装前后对比
a)原始灯泡图像 b)封装后的灯泡图像
根据项目实际需求搭建的检测平台如图2-38所示。为方便在企业使用及安装,检测平台使用的是工业中常用的传送带。该检测平台将红色LED环形光源以低角度照射待检测灯泡,再通过垂直于待检测灯泡方向的相机捕获图像并检测,然后通过判断该灯泡的属性来控制气阀,将不合格的灯泡推入对应的采集盒中,合格的灯泡将继续前行。整个系统利用远心镜头搭配CCD来获取图像,然后针对灯泡灯脚的实际情况进行一系列的图像处理。一般传送带的颜色都为暗镉绿色,由补色原理可知,选用红色光源可以将皮带本身的颜色掩盖掉,并且自然界红色光源较少,有助于滤除一些杂光干扰。由于灯泡较小,如果集中光线照射灯泡本身可以减少灯泡周围其他物体的反光,降低干扰。另外,系统后续进行图像处理时需要捕获灯泡灯脚与灯泡本体之间的接触面,利用低角度照明方式会更加合适,所以本系统选用了红色环形LED光源,照明方式为低角度照射。系统结构图如图2-38所示。
图2-38 系统结构图
本案例使用的计算机内存为2.0GB,主频为3.2GHz,软件为VS2012,使用C++编程,并加入了OpenCv函数库。
2.5.2 图像处理过程与结果
系统利用所搭建的硬件平台捕获待检测的灯泡图像,根据后续处理需要依次对图像进行灰度化、中值滤波,通过最小误差阈值选择算法进行边缘提取,及使用开运算改良灯脚形状。它们的具体效果如图2-39所示。
在图像信号的形成、传输和记录过程中,由于成像系统、传输介质、工作环境和记录设备的不完善均会导致噪声的产生而使图像质量下降。所以需要先采用中值滤波进行处理,将图像的每个像素用邻域(以当前像素为中心的正方形区域)像素的中值代替,从而较好地去除灯丝和支架之间的连接部分并且滤除噪声,为接下来的处理做好准备。代码如下。
图2-39 待检测灯泡图像预处理
a)灰度化 b)中值滤波 c)边缘提取 d)开运算
边缘信息是重要的图像特征信息,是识别灯脚和测量长度的基础。考虑到实时性,此处利用自适应二值化对图像进行处理(图2-40)。
自适应二值化代码如下。
其中,MedianblurImg表示原始图像(已经过中值滤波);ThresholdingImg表示处理后的图像,255为满足条件的最大值,CV_ADAPTIVE_THRESH_MEAN_C为自适应阈值方法,先求出块中的均值,再减掉param1,其中param1=5;CV_THRESH_BINARY为阈值类型;“2∗AdtThr-barPosition+3”用来计算阈值的像素邻域大小,AdtThrbarPosition表示当前滚动条的值。
图2-40 边缘检测
a)原始图像 b)自适应二值化的图像
系统的核心任务是提取灯脚图像并进行尺寸判断。图像检测到的灯脚包络轮廓可用一个多边形来表示,如图2-41a所示。为了获得灯脚的矩形轮廓,将多边形轮廓的一条边与矩形轮廓的一条边重合,多边形轮廓需要先旋转一定角度,如图2-41b所示。
图2-41 矩形轮廓示意图
在图2-41a中取凸多边形中的两点a和b,设a点的坐标为(x1,y1),b点的坐标为(x2,y2),则直线ab旋转前后的夹角α为
对凸多边形进行旋转时,需要对其所有顶点进行旋转,则以原点(0,0)为中心逆时针旋转后的多边形顶点坐标为
式中,(xi,yi)是旋转前的坐标点,(,)是旋转后的坐标点。
据式(2-127),假设已知旋转中心O(x0,y0),待旋转点a(x,y),逆时针旋转角度α,旋转后的点为b(x′,y′),则有
完成旋转计算之后,再求凸多边形的包络矩形,从而通过计算包络矩形的特征参数判断灯脚是否合格。
对于灯脚轮廓是凹多边形的情况,可先将凹点以及凹点两侧的直线去掉,然后连接断开两点,即可将其转换为凸多边形,由此来确定图像的包络矩形。检测到的灯脚如图2-42所示。
图2-42 灯脚提取
部分检测代码如下。
由于利用灯脚和接触面两者的关系便于判定产品合格与否,而且出错率极低,所以根据检测的分类任务,可以根据这一关系进行如下判断。
(1)合格产品
首先利用矩形限定算法,假设R1.w、R2.w、R3.w分别为两个灯脚和一个接触面的矩形长度,R1.h、R2.h、R3.h分别为两个灯脚和一个接触面的矩形轮廓宽度,利用式(2-130)可以限定得出基本符合要求的矩形,然后利用三个拟合矩形的矩形中心相对位置进行判断,见式(2-131),拟合出的三个矩形的矩形中心坐标分别为(R1.x,R1.y),(R2.x,R2.y),(R3.x,R3.y)。
(2)不合格产品
① 对于只有一个灯脚长度合格的产品,检测方法和合格产品类似。由于只能检测到一个灯脚和接触面,即此时没有矩形R2(R2.x,R2.y),所以检测的公式略有变化:
② 其他不合格产品。利用灯脚和接触面的相对关系很容易准确限定出灯脚轮廓,再利用拟合出的矩形直接计算长边就可得出灯脚的长度。
图2-43中是几种常见的情况,其中图2-43a为矩形限定后合格品的灯脚和接触面,图2-43b为确定合格品的灯脚显示图,图2-43c为矩形限定后不合格品①的灯脚和接触面,图2-43d为确定不合格品①的灯脚,图2-43e为不合格品②的矩形拟合图,图2-43f为接触面在无灯脚灯泡上的显示图。
图2-43 灯脚提取
a)合格品的灯脚和接触面 b)合格品的灯脚 c)不合格品①的灯脚和接触面 d)不合格品①的灯脚 e)不合格品②的矩形拟合图 f)不合格品②的接触面