李相格
(中铁第一勘察设计院集团有限公司,西安 710043)
物体表面缺陷一般分为两种:一是亮缺陷,是指物体表面缺陷中较为明显的缺陷区域;二是暗缺陷,是指不明显的缺陷区域。物体表面缺陷检测技术是指对检测样本的表面凹坑、缺损等缺陷进行检测。现有的表面缺陷检测技术包括磁粉检测法、渗透检测法、涡流检测法、超声波检测法、X射线检测和基于机器视觉的缺陷检测技术[1]。随着科技的发展,机器视觉技术发展迅速,在现代工业中得到越来越广泛地研究和应用[2]。它具有安全可靠,光谱响应范围宽,可在恶劣环境下长时间工作等突出优点[3]。因此,本文利用机器视觉技术实现钢板表面图像缺陷检测。
国内外大量学者对表面图像缺陷检测技术进行了研究。陈广锋等[4]提出一种基于LOG算子的实时浓淡补正算法,实现冲压件表面缺陷检测;杜伟等[5]提出改进的形态学和LOG算子相结合的边缘检测方法;王宇杰等[6]提出一种基于LOG算子的塑料制品缺陷检测方法;胡海晓等[7]提出一种LOG算子对遥感图像进行边缘检测;宋柯等[8]提出一种基于Otsu算法的墙纸缺陷检测方法;巢渊等[9]提出一种基于Otsu阈值的半导体芯片表面缺陷检测;Wang等[10]提出一种基于Otsu算法的光滑物体表面的缺陷检测方法;高尚兵等[11]提出一种基于Otsu算法的图像边缘检测方法;江涛等[12]提出一种基于Otsu算法的图像边缘提取方法。
综上所述,传统LOG算子对图像进行边缘检测时,仍有部分边缘丢失,对高频细节的保护效果不佳,检测暗缺陷边缘较为困难[13],只适合检测亮缺陷区域,而Otsu算法适用于检测缺陷区域和背景区域灰度值相近的暗缺陷,检测亮缺陷时存在较多误检测区域[14]。针对上述问题,本文提出一种改进LOG算子与Otsu算法结合的表面缺陷边缘检测方法:首先对预处理后的图像采用基于Wiener滤波改进的LOG算子实现亮缺陷边缘检测,然后采用Otsu算法实现暗缺陷边缘检测,最后采用像素加权平均融合算法实现亮、暗缺陷边缘图像的融合。
研究表明,待检测图像经传统LOG算子检测后的图像的边缘像素将会变宽,灰度幅值将会增大,确实可以起到强化边缘信息的效果,实现边缘定位[15],但是传统LOG算子在检测亮缺陷时,仍有部分边缘丢失,检测结果不准确,其中主要原因为传统LOG算子采用高斯滤波对图像进行滤波处理,容易造成误检测,因此,需要选择一种合理的滤波方法对图像进行滤波处理。与高斯滤波方法相比,Wiener滤波方法可以根据图像的统计特性求得标准差σ,无须人工改变滤波的颗粒就可以自适应地滤除噪声,可以解决复杂的图像问题,所以本文采用Wiener滤波方法对传统LOG算子进行改进。改进后的算法处理过程如下:
对于一张预处理后的图像,可以表示为:
(1)
首先采用Wiener滤波方法对原图像f(x,y)进行滤波,有:
I(x,y)=G(x,y)*f(x,y)
(2)
其中:I(x,y)为平滑图像,G(x,y)为Wiener滤波函数。G(x,y)的表达式为:
(3)
其中:u为邻域内像素灰度值的均值;σ为标准差,用于表示图像检测过程中的模糊因子;f1(x,y)为在(x,y)点处的像素灰度值;v2为图像噪声方差。σ2和v2的表达式如下:
(4)
(5)
然后依据二阶导数零交叉进行边缘检测,有:
M(x,y)=2[I(x,y)]=2[G(x,y)*f(x,
y)]=2G(x,y)*f(x,y)
(6)
Otsu算法可以实现前景和背景的分离,适用于目标和背景的灰度值区别不明显的情况[16]。本文采用Otsu算法实现暗缺陷边缘检测,其算法处理过程如下:
将原图像f(x,y)分为L(L=0,1,2,…,L-1)个灰度级。Dj表示灰度级为j的像素点的个数。D表示图像总的像素点的个数,其表达式为:
D=D0+D1+…+DL-1
(7)
灰度级为j的点占整个原图的比值为:
m=Dj/D
(8)
假设使用阈值t将图像分为两类,记为C1(0,1,2,…,t)和C2(t+1,t+2,…,L-1),其中C1和C2占整个原图像的比值分别为:
(9)
(10)
则C1和C2的灰度值分别为:
(11)
(12)
联合式(9)~(12),求得C1和C2的类间方差为:
(13)
式中:u0为整幅原图像的平均灰度值。当σt取得最大值时即为得到的最优阈值。使用计算出的最优阈值对原图进行二值化(见式(14)),得到暗缺陷边缘。
(14)
式中:H(x,y)为采用Otsu算法检测后的图像。
图像融合首先要确定亮、暗缺陷区域的重合部分,然后保留亮、暗缺陷区域各自相应独立的部分,最后将重合区域和各自相互独立的区域融合在一起,得到一张完整的缺陷图像。图像融合算法通常有颜色差值、像素加权平均和多分辨率样条技术等方法。像素加权平均算法可以很好地融合背景区域和目标区域灰度值区分较为明显的图像[17]。物体表面图像经过残损边缘检测后,亮、暗残损区域和背景区域灰度级已经有了明显的划分,所以本文采用像素加权平均融合算法来实现亮暗残损边缘图像的融合,其表达式如下:
F(x,y)=
(15)
其中:M、H分别为采用LOG算子和Otsu算法检测后的图像;w1+w2=1,且0≤w1≤1,0≤w2≤1;F(x,y)为最终得到的亮、暗残损图像。
式(15)中,权值为未知数。一般权值的计算方法有积分法、开方法、微分法和最优加权平均算法。其中最优加权平均法可以快速得到较为准确的权值数[18],所以采用最优加权平均法计算权值,其计算公式如下:
(16)
式中:Si为亮、暗残损图像的平均灰度值的方差。
本文选取从某钢板工厂采集到的残次品钢板表面图片进行钢板表面图像残损状态检测。实验仿真环境是在Windows平台下,基于OpenCV2.4.4以及VS2013实现。钢板表面残损图像如图1所示。
图1 钢板表面残损图像
为方便后续对钢板表面缺陷进行检测,对图1中的钢板表面残损图像采用中值滤波和灰度化进行预处理。预处理后的图像如图2所示,其中:标记代号为0的区域为亮缺陷区域,标记代号为1的区域为暗缺陷区域。
图2 预处理后的图像
基于改进的LOG算子与Otsu算法相结合的表面缺陷边缘检测方法实验步骤如下:
1) 对图2中的缺陷图像使用改进LOG算子进行检测后的结果如图3所示。
图3 改进LOG算子检测的结果
以图2(a)为例,采用改进的LOG算子实现亮缺陷检测,结果为图3(a)。图2(a)中亮缺陷区域像素点的个数有31 409个,图3(a)中像素灰度值为255的点有31 336个,数量基本一致,且位置基本对应。图2(a)中根据灰度直方图统计数据求得u0=84,σ=9.1,v=0.8。由图3可以看出:改进后的LOG算子较好地实现了亮缺陷检测,但在检测暗缺陷时,有部分边缘检测缺失,对高频细节的检测出现失真,不能很好地实现暗缺陷的检测。
2) 对图2中的缺陷图像使用Otsu算法处理后的图像如图4所示。
图4 Otsu方差算法处理后的图像
对图2(a)采用Otsu算法进行钢板表面缺陷检测的结果见图4(a),其中二值化初始阈值设置为0、255。根据式(13),当mk1=0.99,mk2=0.01,u1=224,u2=79时,σt可以取得最大值,maxσt=139。
图4中检测处理的4张缺陷图像暗缺陷区域与图2中所标记出的暗缺陷区域位置对应。实验结果表明:使用Otsu方差算法较好地实现了暗缺陷检测,但对亮缺陷的检测出现了较多的误检测区域,在检测过程中丢失部分亮缺陷的像素,不能很好地实现亮缺陷的检测。
3) 对改进的LOG算子和Otsu算法检测后的图像采用像素加权平均融合算法进行图像融合。以图2(a)为例,基于改进LOG算子检测出的缺陷图像的平均灰度值为16,基于Otsu算子检测出的缺陷图像的平均灰度值为11,根据式(16)解得w1=0.59,w2=0.41。图2中缺陷图像加权平均融合后的实验结果见图5。
图5 像素加权平均融合算法处理后的图像
从图5可知:图2(a)中亮、暗缺陷区域像素点的个数为35 521个,图5(a)中亮、暗缺陷区域像素点的个数为35 573个,数量基本一致,且位置基本对应。
与图4和图3相比,图5较好地实现了亮、暗缺陷区域检测,图像无残损边缘丢失的情况,高频细节残损边缘较为完整,无较多误检测区域。实验结果表明:该方法具有较好的适应性,与单独使用改进LOG算子和Otsu算法相比较,本文所提算法可以更好地检测钢板表面的亮、暗缺陷区域。
针对钢板表面亮、暗缺陷边缘检测的问题,本文提出了一种用于钢板表面缺陷边缘检测的算法。结合改进的LOG算子和Otsu算法可以有效检测亮、暗缺陷边缘特征,通过像素加权平均融合算法进行像素融合,生成了更完整的缺陷边缘图像,克服了单一检测亮、暗缺陷不准确的问题,提高了钢板表面图像缺陷边缘检测的准确率。接下来,将继续优化算法,以适应在不同场景下对不同材料的图像表面进行缺陷检测。