摘 要:为了提高全自动固晶机视觉系统中发光二极管(LED)晶片边缘特征的提取精度,提出了一种基于改进非极大值抑制(NMS)过程和双阈值求取方法的Canny边缘检测算子。传统的非极大值抑制过程,直接将中心像素点与梯度方向周围邻近的2个像素点进行比较,易导致边缘信息不准确。针对该问题,结合中心像素点本身及其梯度方向周围的3个像素点,沿着梯度方向进行双线性插值,从而实现改进的非极大值抑制过程;另外,通过对LED晶片图像灰度直方图的分析,根据其特有的三峰特性,改进了传统的最大类间方差法,采用Otsu双阈值法及新的评价函数求取高低阈值,从而避免传统Canny算法中阈值的人工调整。实验结果表明,这种方法适合LED晶片的边缘提取,并且能够获得良好的晶片边缘及两极轮廓。
关键词:Canny算子;边缘检测;双线性插值;Otsu双阈值;发光二极管晶片
0 引言
随着发光二极管(Light Emitting Diode,LED)产品的广泛应用,LED产业迅猛发展,其中LED关键设备的研发和引进备受关注。LED固晶机是将LED晶片粘贴到引线框架上的一种自动化设备,其视觉系统能够实现缺陷晶片的检测与分类[1]。由于图像的边缘通常包含物体关键的几何信息,而且LED晶片结构简单,因此在对晶片图像进行缺边、缺角、裂痕等缺陷检测时,可通过提取图像的边缘信息作为晶片分类的重要依据,所以边缘检测至关重要。
传统的边缘检测方法有一阶微分算子(如Roberts算子、Sobel算子、Prewitt算子)和二阶微分算子(如Laplacian算子、LoG算子等)。这些算子优点是算法简单、易于实现,缺点是对噪声敏感、抗干扰能力差[2]337。如果将其应用于LED晶片的边缘检测,将会出现图像边缘不连续、出现干扰边缘或图像细节丢失等缺点。目前广泛使用的是基于最优准则的Canny算子[3],该算法具有检测准确、定位精度高等优点,但是传统的Canny算法存在高斯平滑滤波器σ值固定,高低阈值需要人为经验设定等缺点[4-6]。针对这些不足,各种改进的Canny算法相继提出:文献[4-6]都改进了高斯滤波器,并分别采用最大类间交叉熵优化算法迭代、最大类间方差法、类间方差与类内方差之比最大的方法确定高阈值,虽然提高了双阈值求取的自适应程度,但都只解决了双阈值之一的自适应求取。文献[7-8]分别将Canny算子与数学形态学、小波融合技术交叉使用,虽能弥补Canny算子的不足,却增加了运算复杂度。文献[9]首先确定输入图像中自然景象与人工制造元素比例,再设置高低阈值,该方法虽然在提取图像细节方面尤其是数字、字母边缘有突出效果,但应用于LED晶片的边缘提取没有明显的优势。本文在分析传统Canny算子原理和各种改进Canny算法的理论基础上,提出适用于LED晶片边缘检测的Canny算法。该算法改进了传统Canny算法中的非极大值抑制过程,并采用Otsu[10]双阈值法自适应确定高低阈值。
1 传统Canny算法原理及分析
在图像边缘检测中,抑制噪声和精确定位是无法同时满足的,Canny算子力图在抗噪声干扰和精确定位之间寻求最佳折中方案,并提出边缘检测的三个准则:信噪比准则、定位精度准则和单边缘响应准则[2]338。
1.1 高斯滤波器平滑图像
Canny算子首先对图像进行平滑去噪,选用二维高斯函数 G(x,y)= exp ()构造滤波器,计算合适的模板,用标准卷积实现高斯平滑。其中:σ为高斯滤波器参数,控制着滤波的平滑去噪程度。σ较大的滤波器,能很好地平滑噪声,但是降低了边缘定位精度;σ较小时则相反。
1.2 计算梯度的幅值和方向
采用2×2邻域一阶偏导的有限差分[11]来计算平滑后的数据阵列I(x,y)的梯度幅值和方向:
那么,梯度幅值为:
梯度方向为:
其中:Ex(i,j)和Ey(i,j)分别表示图像(i,j)点处x、y方向的偏导数;A(i,j)反映了图像(i,j)点处的边缘强度;θ(i,j)为垂直于边缘的方向。
1.3 对梯度幅值进行非极大值抑制
为了精确定位边缘,必须细化幅值图像中的屋脊带,即保留幅值局部变化最大的点,该过程就是非极大值抑制(Non-Maxima Suppression,NMS)。一般步骤为:使用3×3大小,包含8方向邻域的模板作用于幅值阵列A(i,j)的所有点,在每个点上,中心像素与沿着梯度方向的相邻2个像素进行比较,若在中心点处的幅值A(i,j)不大于其梯度方向上的2个像素,则认为该处为非边缘点,将A(i,j)值赋为0;反之,则认为该处为初选边缘点,A(i,j)值不变。
1.4 用双阈值算法检测和连接边缘
使用两个阈值Tl和Th(Tl<Th):把图像中灰度值小于Tl的设为0,得到阈值边缘图像Nl(i,j);把灰度值小于Th的设为0,得到含有少量假边缘但有间断的 Nh(i,j)。要在Nh(i,j)中把边缘连接成轮廓,就要在间断点处寻找Nl(i,j)中相应位置的8邻点,确定可以连接到间隙上的边缘,直到将Nh(i,j)中所有的间隙连接起来为止。Th控制着在梯度图中边缘检测的起始点性质,Th值越小,保留的边缘信息就越多,得到的目标边缘就越精细,但是混杂的伪边缘也会增多。随着Th的增加,可以有效地抑制伪边缘,但有可能丢失边缘信息。Tl控制着本次检测的终止点性质,Tl越小,保留的边缘信息就越多,边缘越连续,随着Tl的增加,可见的目标边缘特征越少,边缘出现断裂[12]。传统 Canny算法求取 Th、Tl的方法是:分析图像梯度直方图,按梯度幅值递增方向累加像素点个数,将累加和为图像总个数80%处的梯度幅值设为高阈值Th,则 Tl=0.4Th,但该方法缺乏自适应能力[13]。
2 改进的Canny边缘检测算法
2.1 改进的非极大值抑制
传统的非极大值抑制过程仅比较当前点与梯度方向上相邻两个像素点,而梯度方向并不与邻域像素点一一对应,易产生随机误差,导致虚假边缘出现[14]。针对该问题,基于包括中心像素点在内的4个像素点沿梯度方向进行双线性插值[15-16]。对于各中心点A(i,j),将其周围邻域点分为4个象限,根据中心点的梯度方向θ(i,j)判断采用哪个象限中的邻域像素进行插值,具体做法为:
1)当θ(i,j)≥0°时,采用第一、三象限4点像素插值,如图1所示。
图1 θ(i,j)≥0°时一、三象限插值方式
第一象限:先沿水平方向进行第一次插值计算,权重选择cos[θ(i,j)],则
再由Aup1和Adn1沿垂直方向进行第二次线性插值,权重选择sin[θ(i,j)],则插值点(x,y)处的插值结果为:
同理,可求出第三象限(x2,y2)处的插值结果A(x2,y2)。若 A(i,j) ≥A(x1,y1)且A(i,j)≥A(x2,y2),则A(i,j)为极大值点;否则为非极大值。
2)当θ(i,j)<0°时,采用第二、四象限4点像素插值,得到插值结果。同理若 A(i,j)≥ A(x3,y3)且 A(i,j)≥A(x4,y4),则A(i,j)为极大值点,否则为非极大值。
2.3 自适应动态阈值计算
LED晶片外形规则,排列整齐,图像主要包含含噪背景、晶片片基、电极3类区域。其灰度直方图如图2所示,可看出LED晶片的灰度直方图具有三峰特性。
图2 LED晶片灰度直方图
根据图2所示的特有的三峰特性,提出改进最大类间方差法求取双阈值,并引入新的评价函数[17]。具体实现过程为:
设图像中灰度为 i的像素数为 ni,灰度范围为[0,L-1],则总的像素数N=,各灰度值出现概率为pi=ni/N,且=1。确定高低两个阈值Th和Tl(Th>Tl),这两个阈值将图像分为3类区域C0、C1和C2。C0由灰度值在[0,Tl-1]的像素组成,主要包含非边缘点;C1由灰度值在[Tl,Th-1]的像素组成,既包含非边缘点,也包含边缘点;C2由灰度值在[Th,L-1]的像素组成,主要包含边缘点[18-19]。
C0、C1、C2 区域的概率为:
平均灰度为:
方差为:
定义评价函数为:
令,可求出最佳阈值 Th、Tl。
3 实验结果及分析
为验证本文算法的有效性,实验中采用像素为256×256的灰度图像,利用Matlab R2008a工具编程实现。分别用传统Canny算法、文献[5]算法及本文算法对LED晶片图像进行边缘检测,检测结果如图3所示。图3(a)为原始的LED晶片图像;图3(b)为采用传统 Canny算子[2]341-342提取边缘的结果,选取 σ =0.5,敏感度阈值上下限为 0.04,0.08;图3(c)为采用文献[5]改进的Canny算法提取边缘的结果;图3(d)为采用本文改进的Canny算子提取边缘的结果。
图3 实验结果
从图3可看出:传统Canny算法检测出的伪边缘较多,且有部分边缘漏检;文献[5]改进的Canny算法一方面采用非线性扩散滤波代替高斯滤波,另一方面采用最大类间方差法实现高阈值的自适应选择,因此得到的边缘信息较完整;本文算法通过双线性插值实现非极大值抑制且自适应确定的高低阈值更精确,因而提取出的边缘细节更加完整,连通性更好,对虚假的边缘有更好的抑制,从而得到了更准确、更清晰的LED晶片边缘及两极轮廓。
4 结语
利用双线性插值和Otsu双阈值对传统Canny算子非极大值抑制过程和双阈值求取方法进行改进,并应用于LED晶片边缘检测,结果表明:改进的算法能有效避免高低阈值必须进行人工设定的弊端,得到精确的边缘,提高了LED固晶机的自动化程度。但是在实际LED晶片边缘检测中,LED晶片的图像易受到采集时外界的光照条件的影响,使整幅图像或图像的局部在进行检测时产生漏检或错检,因此对于亮度不同或者对比度不同的图像进行边缘检测时,边缘检测算法还有待进一步研究与改进。