毛东宸,孔令云,李博,李明科
(1.西京学院 电子信息学院,陕西西安,710123;2.河南省睿卡机器人制造有限公司,河南新乡,453000)
近年来,机器视觉技术的快速发展为焊缝缺陷检测提供了新的思路和工具。利用机器视觉技术,可以在不需要人工干预的情况下,高效地进行焊缝缺陷检测,提高生产效率和产品质量。李超等作者提出了一种基于混合高斯模型的改进背景减法提取焊缝缺陷区域的方法,该方法能够对焊缝缺陷进行识别和分类,准确率超过95%[3]。谷静等作者提出了一种基于深度学习改进Faster RCNN 模型的焊缝缺陷检测算法,通过多尺度特征图并充分利用底层特征取得缺陷检测结果,可以对小目标物体的检测有较高的检测精度[4]。王岩等人提出了一种提取具有多个阈值的X 射线图像特征的方法,使用SVM 技术进行缺陷分类并进行定位,该方法在低对比度X 射线图像中分割和定位缺陷是有效可行的[5]。蔡述庭等人则基于Halcon 软件利用图像处理对美标电源线进行缺陷检测,对该电源线的检测具有较好的检测效果[6]。
本文将基于Halcon 软件对相机进行标定并对焊缝缺陷进行检测和分析,进一步探索机器视觉技术在焊接领域应用的方法和途径。通过与前人研究的比较和验证,本文的成果可以更加准确、高效地完成焊缝缺陷检测任务,具有重要的理论和实际价值。
本文采用KinectV2 相机对焊缝进行检测,使用相机检测的图像如图1 所示。
图1 Kinect v2 相机
由于相机采集图像时往往会产生畸变,所以需要先对相机进行标定来消除畸变,之后再对图像进行一定程度上的处理,主要包括:去噪、阈值分割、形态学运算等操作,最后对处理后的图像进行缺陷检测工作,流程图如图2 所示。
图2 焊缝识别流程图
机器视觉的核心在于通过图像采集获取三维世界信息。在这个过程中,我们需要解决两个问题:如何将相机坐标系中的坐标与世界坐标系中的坐标进行转换,以及如何校正相机带来的畸变,相机产生的畸变如图3 所示。解决这两个问题的方法就是相机标定,获取相机的内参和外参,使相机坐标系与世界坐标系建立起联系,就能消除图像的畸变。
图3 相机产生的畸变类型
不同于传统的张正友标定法,本文采用Halcon 软件的相机标定助手进行标定,可以更快速获得相机的内部参数,对图像进行畸变校正,以获得精确的图像信息。
Halcon 相机标定分为如下几个步骤:生成标定板、使用助手进行标定、使用laplace_of_gauss 算子对图像进行校正。
在标定过程中,标定板的选择是非常重要的,因为合适的标定板能够保证成像清晰度和标定精度。下面介绍适用于本文中焊缝检测的标定板生成方法:在程序窗口中输入算子gen_caltab(9,9,0.004,0.5,'C∶/Users/57812/Pictures/caltab.descr','C∶/Users/57812/Pictures/caltab.ps'),并运行。这会在指定的文件夹中生成名为“caltab.descr”描述文件,如图4 所示,其中生成标定板的行和列标记点数为9,标记点之间的距离为0.015,标定点的直径为0.5。
图4 相机参数标定板
标定过程包括选择标定板类型、采集图像、搜索标记点以及进行标定计算。只要正确选择算子并根据需要进行参数设置,就可以完成相机的标定。标定流程如图5 所示。
图5 相机标定流程图
进行相机标定时,标定图片的数量应该在15~30 张左右,可以将图片旋转和倾斜,角度在45 度内,以保证所有标定点都能完整地呈现在标定图中。本案例采样了24 张标定板图像,如图6 所示。
图6 相机标定图
在标定过程中,应保持标定板干净,并且在拍摄时要保证清晰对焦,避免噪声对标定精度造成影响。但是这些干扰依旧不可避免,因此我们首先对采集的标定板图像进行去噪。为此,我们使用LOG 算法,它是由高斯滤波算法和拉普拉斯滤波算法组合而成,其公式如下:
其中,f(x,y)是二维离散信号,G(a,b)是二维高斯函数,L(a,b)是二维拉普拉斯函数。在程序中输入算子laplace_of_gauss(Image,LaplaceImage,2.0,5,'mirrored'),生成图7 中的图片,可以明显看出通过LOG 算法处理之后,最终得到标定板的边缘信息,且表现出很好的边缘检测能力。
图7 laplace_of_gauss 边缘检测
对于经过标定的相机采集的图像,图像的质量有所提高,但仍可能存在一些缺陷,如噪声大、清晰度不高等问题。因此,为了准确识别焊缝缺陷,须进行图像预处理。常见的图像预处理方法包括去噪、增强、分割和形态学处理等,可以根据需求和实际情况选择不同的技术进行组合使用,从而得到最佳的图像预处理效果。本文采用的工作流程如图8所示。
图8 图像预处理流程图
对于数字图像预处理而言,平滑和去噪是其的基本操作。平滑的目的是消除图像中的高频成分,强化低频部分,去噪是消除图像噪声的一种处理。在图像处理的过程中,有多种方法可供选择,例如均值滤波、高斯滤波和中值滤波等。本文主要采用高斯滤波和小波变换的组合方式对采集到的图片进行去噪。其中高斯滤波是通过对像素点周围的邻居像素进行权值平均,来计算出该像素点的新值。而小波变换是基于小波分析和阈值处理技术,将一幅图像通过DWT 拆分成多个子带,并对每个子带进行不同的阈值处理。
但由于在某些情况下二者都不能完全消除噪声,故本文采用两者结合的方法高斯小波滤波方法对图像进行滤波去噪处理,其公式为:
式中fdenoised(t)表示去噪后的信号,wj,k表示小波系数的权值,可以通过高斯滤波器计算得到。
如图9(a)所示,图片的表面带有噪音,经过高斯小波滤波处理之后达到了图9(b)的效果。
图9
图像灰度变换是数字图像处理中常用的预处理技术,用于调整图像的亮度和对比度以获得更好的可视化效果。由于成像系统的限制,图像有时可能具有低对比度或较窄的动态范围,因此灰度变换成为重要的一步。灰度变换使用数学公式修改每个像素的灰度值,以达到最佳的视觉效果,用Gray 表示灰度值,R、G、B 表示红、绿、蓝三个通道的灰度值,其公式如下:
常见的灰度变换方法包括对比度拉伸、伽玛校正和阈值。本文采用伽玛校正方法进行非线性灰度变换,调整每个像素的灰度值以提高图像对比度和亮度。其公式如下:
其中,r 是原始图像的像素值(范围通常为0~255),s 是增强后的像素值,c 是增益因子,γ 是伽马值。γ 直接决定了输出像素灰度值变化的强度:当γ>1 时,输出像素的变化会缓慢,图像的整体亮度和对比度会较低;当γ=1 时,输出像素的变化与输入像素的变化相似,图像不会发生明显变化;当γ<1 时,图像的强光部分会被压缩,而阴影部分的细节得到增强,从而提高图像的整体对比度和细节。
在对工件图像进行高斯小波滤波处理后,需要将其转换为灰度图像,并进行伽马校正来修正图像的亮度。使用函数rgb1_to_gray(GaussWavelet,GrayImage)将图像转换为灰度图像。经过伽马校正后,工件灰度图像的效果如图10 所示。
图10 工件灰度图像
图像阈值分割二值化是焊缝识别中常用的方法。在焊接过程中,焊缝边缘与背景的对比度较大,颜色不同。因此,可以使用下面的公式将焊缝图像二值化,使背景与焊缝分离,从而实现焊缝的自动检测。
其中,f(x,y)表示原始图像在(x,y)处的像素值,T 为OTSU 算法自适应选择出来的阈值。根据OTSU 算法的定义,T 被选取为使类间方差最大的阈值。
在实际作业中,可以使用一些阈值分割算法,如固定阈值二值化、自适应阈值二值化和OTSU 二值化等。本文采用OTSU 二值化算法调用算子threshold,设定阈值在80~149 的范围,在范围之内的所有像素被选中,从而将工件从背景中分割开来,从而获得最佳的二值化结果如图11所示。
图11
形态学运算是数字图像处理中一种基本的图像处理技术。形态学运算的目的是根据结构元素对原始图像进行像素级别的操作,从而改变图像的形状、大小或提取出感兴趣的区域,常用于图像预处理、图像分割、轮廓提取、形状分析等方面。
通过在二值图像中进行膨胀运算,可以使焊缝区域边界更加清晰,便于后续的分割和形态学特征提取。运用腐蚀运算可以消除对后续处理过程产生的干扰,增强焊缝的连续性和稳定性,提高检测精度。但是由于膨胀和腐蚀运算都是局部操作,对全局特征的处理效果有限,可能会导致边缘模糊、物体形态变化等问题。所以需要涉及其他的形态学运算,如开运算、闭运算、梯度运算、顶帽运算和底帽运算等。它们都是以膨胀和腐蚀为基础,通过组合、加权等方式进行的一些高级运算,可以更加精细地提取出图像中的区域。
本文在焊缝缺陷检测中使用开运算、闭运算和顶帽运算的组合。在焊缝缺陷检测中应用开运算可以消除噪点和小气孔等缺陷,使后续检测更加准确可靠,其公式如下:
在焊缝缺陷检测中可以采用闭运算来填补小孔和断裂,提高焊缝的连续性和完整性,其公式如下:
其中,A 表示原始二值化图像,SE 表示结构元素,⊕表示形态学膨胀运算,⊖表示形态学腐蚀运算,B 表示开运算后的二值化图像,C 表示闭运算后的二值化图像。
则组合运算的公式如下所示:
其中,A 表示原始灰度图像,B 表示结构元素,⊖表示形态学腐蚀运算,⊕表示形态学膨胀运算,+表示图像相加运算,-表示图像相减运算。该组合方法可以去除低灰度杂质,并增强图像的亮度和对比度。
在Halcon 中使用opening_circle 算子执行开运算,在程序窗口输入opening_circle(Rectangle,ImageOpening,Radius),生成图12,但是由于光源的影响,图像的呈现并不完整。
图12 阈值分割后的焊缝
采用closingcircle(ImageOpening,ImageClosing,Radius)和OpeningCircle(ImageClosing_Image,Image_background,RadiusB)算子以此执行闭运算和顶帽运算结果如图13 所示。
图13
经过上述的所有处理之后,我们就可以识别出来焊缝的缺陷,然后可以使用Halcon 中的dev_display 函数在原始图像上标注出来,并通过镂空显示或颜色变化等方式实现,如图14 所示。
图14 显示颜色变化
这篇文章是基于一定场地条件下,对工件图像进行检测,实验最终结果以及直方图分布分别如图15 所示。
图15
本文提出了一种基于Halcon 的焊缝缺陷检测方法。通过对相机标定使用laplace_of_gauss 算子,并对图像使用适合的处理方法,结果表明该方法能够准确地检测出焊缝缺陷区域并且精准地定位缺陷位置。然而,该方法处理的时间较长,并且当光线强度不均或过强时,会导致工件难以分割,对识别造成了一定的困难。尽管如此,在大多数情况下,该方法依然能够实现,并且具有极高的实用性。