邬依林,萧华希,李万益,陈国明,张谦,刘屿,3
1. 广东第二师范学院计算机学院,广东 广州 510303
2. 华南理工大学自动化科学与工程学院,广东 广州 510640
3. 广州现代产业技术研究院,广东 广州 511458
众所周知,太阳能是一种可再生能源,具有容易获取、可持续利用、环保等优点。基于光伏效应,太阳能电池可以将太阳能转化为电能,因此太阳能电池有着很大的市场前景。但是,太阳能电池的生产是一个复杂的过程,在生产过程中出现任何意想不到的错误都会导致缺陷的发生,这可能会对电池造成很大的损害。因此,一个质量检测体系对于太阳能电池生产线是至关重要的。
为了识别和分割太阳能电池或其他工业产品中的各种缺陷,在过去的十年里,大量基于机器视觉的方法被提出。在文献[1]中,Rebhi 等提出了一种基于局部均匀性和数学形态学的织物疵点检测算法,但是没有给出任何关于结果的数据。文献[2]提出了一种用于球栅阵列组件的在线定位和缺陷检测方案。独立成分分析在文献[3]中被用于检测光伏模块的缺陷。Dhimish等[4]提出了一种利用逐位网格技术和“OR”操作来检测太阳能电池微裂纹的新方法。然而,将两张带有纹理或结构背景的图像对齐不是一件容易的工作。文献[5]采用OTSU[6]的方法检测基于介观技术获得的图像的表面缺陷,但是该方法只能检测灰度与背景不同的缺陷。文献[7]基于Canny[8]的方法,设计了自适应阈值检测织物上的缺陷。为了克服光照不均的问题,文献[9]采用离散余弦变换(discrete cosine transform,DCT)重建背景,增强缺陷。在文献[10]中,图像被分割成多个超像素,然后训练支持向量机(support vector machines,SVM)分类器来判断某个超像素是否属于被分割的目标。文献[11]基于图的层次聚类算法实现脑组织磁共振图像的自动分割,文献[12]采用马氏距离分类法对柑桔彩色图片中的不同元素进行了分类。上述方法大多是针对特定类型的缺陷检测,如微裂纹、污渍、划痕、孔洞等与背景灰度不同的缺陷。除了分割缺陷外,机器视觉技术也用于分割其他物体,如文献[13]提出了分割LED 支架的算法。在生物邻域,文献[14]给出了白细胞的分割方案。经典的活动轮廓模型[15-16]是一种通用的分割方法,但由于其计算量大,而且需要人手动初始化轮廓,对图像质量要求较高,因此没有广泛应用到实时的缺陷检测中。
由于不需要为特定类型的缺陷设计特征,基于神经网络的方法成为近年来流行和强大的技术。Chen等[17]利用深度卷积神经网络成功地分割了塑料外壳表面划痕。Dong等[18]利用全卷积网络(fully convolutional network,FCN)[19]自动提取的特征来训练随机森林分类器,成功检测到了航空焊缝射线图像中的微小缺陷。在生物医学邻域,文献[20]设计了带有引导模板的神经网络来分割眼球血管,文献[21]使用集成深度学习的方法来分割皮肤病变区域。在实际应用中,针对特定任务训练一个网络模型仍然面临数据不足、样本不平衡、性能不稳定等问题。
本文从效率和性能两个方面考虑,提出了一套完整的太阳能电池背面电极的定位和分割方法。
本节阐述了太阳能电池背面电极的分割和缺陷检测完整方法,包括粗定位、精定位、边缘分割,区域生成算法和缺陷检测5个部分,其流程图如图1所示。
由于初始图像的尺寸比较大,为了减少处理时间和亮度不均匀的背景的影响,需要从初始图像中裁剪电极。投影方法和多项式拟合是粗定位算法中使用的基本方法,其细节在后文阐述。
如图2所示,在电池硅片上,一共有54个背面电极,以9行6列的方式排列。在获得硅片的包围矩形后(如图2 中的黄色大矩形框),下一步是定位电极阵列9 行和6 列的大概位置。据观察,电极周围有很强的梯度强度。因此,应用Sobel 算子得到两个方向的梯度,分别记为Gx和Gy. 计算一个矩阵每一行或列的某个量(如均值、最大值),称为投影法,它是将二维矩阵转换为一维向量的常见方法。本小节中,通过均值投影,将Gx投影到Y轴上,将Gy投影到X轴上,结果分别记为My和Mx.
图2 原始图像以及粗定位结果Fig.2 Initial image with coarse positioning result
下面以Mx为例,描述粗定位的算法流程。粗定位算法的主要变量如图3所示。首先,利用3阶多项式曲线来拟合Mx,拟合结果记为Mfx. 在实际工程中,为降低运算量,可对Mx以间隔10 个长度单位进行采样。定义中间变量Mp为
定义阈值Tm为
其中np是Mp中值大于0的数的个数。利用此阈值,将Mp二值化为
在式(2)、式(3)中,i= 1,2,…,Nx,Nx是Mx的长度。
在Bx中等于1 的区域就是可能的电极列位置,而列与列之间的相对的位置都是固定的,因此需要一个模板来确定列的位置。模板Tp由无缺陷的样品中获得,使用二值曲线表示每列电极的相对位置。接着,需要将Tp与Bx进行对齐。将Tp视为滑动窗口,在Bx上滑动,计算Tp与Bx的交集的大小。偏置Bias在交集最大的地方得到,图3 清楚地展示这个过程。同样,由My可确定电极行位置。由粗定位算法得到的电极阵列的行区域和列区域结果如图2所示。
图3 粗定位算法的主要变量Fig.3 Main variables in the coarse positioning method
利用粗定位的结果,从原始图像中裁剪出54 个较小尺寸的图像,每个图像最多包含一个电极。本小节将描述精定位算法,以得到一个更加精确的定位。首先使用Sobel 算子计算图像的梯度图,记为Ic。使用最大值投影,即分别计算Ic每行和每列的最大值,结果分别记为Px,Py,如图4所示。为了简便,以Py为例说明精定位算法。对整个Py计算一个加权平均值,记为Aω,由下式计算
其中wi= abs(i-ny2),i= 1,2,…,ny,ny是Py的长度。图4 中,将Aω视为一条水平直线,与Py画在一起。在Aω与Py相交而形成闭合的区域中,面积最大的区域就是电极所在的位置。该区域的两个端点,记为p1,p2,向Py两侧移动到最近的极小值点。对Px进行相同的处理,最终得到一个电极的包围矩形(图4中红色矩形框),就是精定位的结果。该精定位算法的主要贡献是将电极定位在小范围内,去除大部分不均匀、复杂的背景。
图4 精定位算法结果Fig.4 Result of the fine positioning method
据观察,电极的灰度和纹理特征是变化的,且较大概率与背景相似。从图5 的测试图像中可以看出,电极最明显的特征是其周围或内部有较强的梯度强度。因此,梯度是用于分割电极的主要信息,即使它可能在电极边界的一侧较弱,对噪声敏感。通常情况下,梯度图的强度范围较大,很难选择一个阈值来区分目标和噪声。本小节首先利用电极的形状先验,基于直方图选取了3 个阈值,得到对应的二值图像,然后使用种子生长方法来选择目标边缘点。具体步骤阐述如下。
图5 不同方法的分割结果。从第一行到最后一行依次是:测试图像,标签,分别来自DCT-T,CED,DCT-SVM,FCN和PM的结果Fig.5 The segmentation results of different methods. The raw images,ground truth,and segmentation results obtained by DCT-T,CED,DCT-SVM,FCN,and PM are shown from top to bottom
可由Sobel 算子计算得到两个方向的梯度图Ix和Iy,再经过一个5 × 5 的高斯核模糊后,对Ix和Iy使用非极大值抑制(non-maximum suppression,NMS)来细化边缘。接下来以Iy为例,阐述一种基于直方图的阈值选择方法。首先将Iy归一化到0~255范围内,计算其直方图Hy,再将Hy转换到0~1的概率范围。Hy的累加和Asy,由下式计算
其中i= 0,1,…,255. 给定一个比例系数p,找到满足以下条件的阈值T
这个方法的意义是选择一个大于100×p%的点的阈值,因为梯度越大,就越可能是目标的边缘点。Iy代表的是水平的边缘,而无缺陷电极是矩形的。因此对于一个h×w图像,在理想情况下,大约有2 ×w水平边缘点属于电极的水平边界。因此,可设计Iy的比例系数p为
类似地,Ix的比例系数p定义为
我们设置i= 2,3,4,j= 3,4,5,分别得到Iy和Ix各3 个阈值。从高阈值到低阈值,从Iy得到3 个二值图像,分别记为By1,By2和By3. 从Ix得到3个二值图像,分别记为Bx1,Bx2和Bx3. 使用“按位或”操作将两张对应的二值图像进行组合,再使用3×3核的形态学闭操作来连接小间隙,用公式可表达为:
其中∪表示按位或操作,·表示形态学闭操作,K是一个3 × 3 的结构元素。结果如图6(a)-6(c)所示。G1由最高的阈值获得,表示梯度最强的边缘点。G2和G3由更低的阈值得到,包含更多的目标点和噪声点。
为了进一步减少背景的面积,使用G1来获得一个掩模。具体来说,G1的每一列中,pf和pl分别对应第一个和最后一个白点的位置。令pf和pl之间的点为1,其他的点0,结果记为Mc. 对G1中的每一行进行相同的操作,得到Mr. 二者的并集,Mor=Mc∪Mr,即为需要的掩模。以上3 个掩模如图6(e)-6(g)所示。Mor可以用来消除G2,G3中的噪声点:
图6 边缘分割算法中的一些中间变量Fig.6 Some variables in the edge segmentation algorithm
其中·表示点乘运算。
本文采用一种基于种子生长的方法来选择目标边缘点。经典的种子生长方法,由种子点和候选点进行,任意与种子点连通的候选点都会被选中,结果Gsc可表示为
其中Gs是种子点掩模,Gc是候选点掩模,⊕表示种子生成过程。依次进行以下的步骤
其中G123是最终的边缘分割结果,显示在图6(d)中。本文的目的是得到电极的区域,而不是零散的边缘点,因此下一节将会描述使用边缘点生成闭合区域的方法。
用边缘分割方法得到边缘图后,下一步是为G123绘制封闭轮廓。可将轮廓分为上、下、左、右4个部分,分别表示为Pu,Pd,Pl和Pr. 下面介绍一种利用标志F修改曲线C的方法。如果在一个连续的区间,F(i) = 1,比 如i=a1,a2,…,ak,则 区 间 两 端 的 相 邻 点C(a1- 1),C(ak- 1) 可 以 通 过 一 个 函 数f(C(a1- 1),C(ak+ 1) )计算替代值,来取代曲线C在这个区间上的值。在图7的例子中,则使用了线性插值函数来修改曲线C。
图7 使用标志修改曲线的例子Fig.7 An example of modifying curve with flag
以Pu,Pd为例,它们分别记录了G123中每一列第一个和最后一个白点的位置,两个白点分别记为pf,pl. 如果pf,pl相连,即二者之间的点全是白点,标志fud被设为1,否则设为0. 这个标志代表某一侧轮廓点丢失。利用标志fud和上述的曲线修改方法,Pu使用最小值函数修改,Pd使用最大值函数修改。
为了消除Pu中由于噪声引起的剧烈跳变,将Pu与k=[-1,2,- 1]进行卷积运算,可得
其中⊗表示卷积运算。当gu(i) >Tu时,对应的标志fk(i) = 1,否则为0,其中Tu是一个阈值,在实验中设为10. 类似地,使用线性插值方法来修改Pu. 此外,漏边缘会导致Pu产生间隙,可以采用上述的处理方法进行平滑处理,即找到间隙位置,用线性插值方法更新Pu. 上述处理的结果如图8所示。
图8 四部分轮廓处理前后Fig.8 Four parts of contours before and after processing,(left)up and down parts;(right)left and right parts
使用相同的步骤来获得和处理Pl和Pr. 然后令Pu和Pd之间的点为1 生成掩模M1,令Pl和Pr之间的点为1生成掩模M2。计算二者的交集
其中∩表示“按位与”运算,M3表示最后的结果,代表电极的区域,显示在图6(h)中。
为了评价所提出的电极分割算法的性能,设计了一种利用上述步骤的分割结果M3来判断电极上是否存在缺陷的方法。无缺陷电极为矩形,可以根据其形状判断电极是否有缺陷。标准的宽度和长度可以用无缺陷电极计算获得。可将其长宽表示成一个区域范围,即ws=[wmin,wmax]和hs=[hmin,hmax]. 这里wmin=31,wmax= 41,hmin= 88 和hmax= 98. 通过形态学处理剔除M3的小尖峰和小凹坑,然后计算其包围矩形的尺寸hb×wb. 如果hb或wb超出hs或ws的范围,则说明电极有缺陷,否则需进一步判断。在本文中,所有二值图像白色部分的值等于1. 分别计算M3在包围矩形中,在X和Y方向上的“和”投影(即为每行和每列求和),结果分别记为Sω和Sh. 然后定义两个阈值
其中Ta设为5. 对于Sω或Sh,如果在一个连续的区间,有Sω<Tω或Sh<Th,并且这个区间的长度大于一个阈值Tb,则认为该电极有缺陷。在实验中取Tb= 7.Ta和Tb是两个控制缺陷大小的参数,即只有尺寸大于Ta×Tb的缺陷才会被检测到。
在本节中,设计了一个实验,通过与四种著名的方法对比来评估本文方法的分割精度。所有的算法都是由Python语言编写,运行在2.9 GHz Intel Core i5处理器和8 GB内存的笔记本电脑上。
测试图像由第1.1 节所述的粗定位算法获得,图像大小相同,为158 × 218。事实上,大部分电极只要使用简单的阈值法就能分割。为了评估所提出方法在复杂情况下的性能,选取至少包含以下情形之一的100个样本作为数据集:光照不均匀、存在强光污染、电极边界弱以及电极灰度与背景灰度相似。然后在选取的样品中随机添加漏印和漏浆这两种人工缺陷。漏印使得电极缺失一部分,而漏浆使得电极多出一部分。每个样本的像素级标签掩模由人工画出。考虑到涉及学习方法,这里选取50幅有缺陷图像和50幅无缺陷图像作为测试集,训练集中包含25幅有缺陷图像和25幅无缺陷图像。实验中的所有方法都使用测试集进行性能评估。
实验中将四种方法与本文提出的方法进行了比较,并对传统方法进行了一些预处理操作。将本文提出的方法缩写为PM(proposed method)。为了克服光照不均的问题,可以采用离散余弦变换(DCT)[9]重构背景。第一种方法是OTSU 阈值法[6]加DCT,记为DCT-T. 第二种方法是Canny[8]的边缘检测方法(记为CED),其两个阈值的选取方法与1.3节相同,预处理和后处理操作与PM相同。联合DCT和文献[10]中的支持向量机(SVM)分类器是第三种方法,记作DCT-SVM. 全连接网络(FCN)[19]是第四种方法。
采用3 个指标来评价方法的性能,分别为假阳性率(false positive rate,FPR)、假阴性率(false negative rate,FNR)和平均绝对误差(mean absolute error,MAE),定义如下
其中FP为TP分别是实验中的假阳性和真阳性,FN和TN分别为假阴性和真阴性。电极区域被定义为阳性,背景区域被定义为阴性。比如,一个属于阳性的像素,被某种方法判别为阴性,则称为假阴性,其他定义以此类推。FPR 是实验中阴性像素被错判为阳性的比例,FNR 则是阳性像素被错判为阴性的比例,MAE 是错分类的像素占所有像素的比例。使用对比方法的预测结果和样本的像素级标签计算以上3 个指标,可以评价方法的像素级分割精度。另外,分割是为了识别缺陷,若是一个方法的像素级精度略低,但它能准确表示出样本是否有缺陷,则这个方法也是优秀的。因此,利用1.5节的缺陷检测方法,判断每个测试样本是否有缺陷。根据检测结果,计算以上3 个评价指标。总的来说,3 个评价指标会以两种形式计算,一种是像素级形式(pixel-wise form),用来评估分割方法的像素级精度,另一种是样本级形式(sample-wise form),用来评估方法识别缺陷的能力。
图5 中展示了10 幅测试图像及不同方法对应的分割结果,表1 中展示了不同算法总体性能的3 个指标,包括像素级形式和样本级形式。在3个指标之中,MAE 是最能体现图像分割总体性能的指标。从表1可看出,DCT-T 方法的效果最差,MAE 值最大,因为阈值方法只利用了灰色信息。当目标的灰度值与背景相似,或边界具有较强的灰度强度时,利用灰度信息很难将目标与背景分离。DCT-SVM 的效果也较差,因为该方法将每个超像素视为一个待分类的对象,用灰度值、一阶导数和二阶导数的协方差作为特征向量,遗憾的是,目标的灰度值或梯度强度不稳定或与背景相似,无法训练出满意的SVM 分类器。CED 方法采用边缘信息对目标进行分割,但CED 方法的两个阈值的选取不够稳健,无法得到满意的结果。本文提出的方法与CED 算法都是基于梯度的分割方法,它们的区别是,CED 使用双阈值,而PM 使用3个阈值,同时利用最高阈值生成的二值图像,计算了一个初始掩码,将目标限定在这个掩码内,有效消除了掩码外的噪声干扰。而CED 方法并没有利用高阈值得到的二值图像。FCN 在像素精度方面似乎比PM 有更好的结果,而从样本级的指标却得到了相反的结论。从图5也可以看出,FCN并不能很好地识别缺陷的区域。图5(a)中第一个样品的FN 和FP 如图9 所示。对于FCN,FP 和FN 分别为370 和42,错分类像素数为410;对于PM,FP 和FN 分别为233 和117,错分类像素数为350. 二者有着相近的像素分割精度,但从分割结果的形状来看,PM 的结果的形状比FCN 的更接近真实标签。这就是采用本文1.5 节设计的检测缺陷方法来计算样本级形式的指标的原因。尽管FCN在像素形式下的MAE较低,但在样本形式下的MAE较高,这意味着它无法以准确的形状分割电极。另外,可以看出,PM在像素级上的FNR比FCN 高。其原因是,电极具有较厚的边界,从而导致出现双边缘,NMS 操作可能删除其中一个,即当删除外缘时,则得到的区域面积变小,FN 增大。从样本形式计算的指标来看,PM 的MAE 最小,这意味着PM 的性能优于FCN。总的来说,PM的性能优于实验中用于对比的四种方法。
图9 图5(a)第一个测试图像分别来自FCN和PM的FP和FNFig.9 FP,FN from the FCN and PM of the first sample in Fig.5(a)
表1 两种形式的评价指标Table 1 Evaluation metrics of two forms
本文设计了一种基于机器视觉技术的太阳能电池背面电极分割算法。首先,采用投影法和模板匹配法对电极进行粗、精定位,减少了后处理的运行时间;然后根据形状先验,设计3个阈值,生成3个二值边缘图。采用种子生长法得到目标边缘点。此外,还采用了一种将边缘点转换为区域的方法。为了评价所提出算法的性能,进行了实验,与四种著名的算法在电极分割任务中的性能进行对比,从实验结果看,该算法总体上优于对比的四种算法。但该算法也存在一些不足,比如区域轮廓不够光滑,双边缘导致的FN增大,导致分割结果不够准确。因此,改进所提出的算法或寻找一种新的方法来解决上述问题将是笔者下一步的工作。