胡韵松,王军民,付嘉玮,李雄军,刘 威
(1.长江大学 油气资源与勘探技术教育部重点实验室, 武汉 430100;2.贺州学院,广西 贺州 542899)
激光线性结构光传感器具有结构简单,体积小等特点,广泛用于焊接的焊缝追踪,轨迹规划等,称为焊接过程自动化的关键技术之一。而在结构光条定位中,为了提高定位精度,提出了亚像素的概念,是指在相机得到的像素和像素之间还有几十到十几个微米的距离。而通常我们计算出的坐标都是正整数,这表示的是我们是在对像素进行操作,而亚像素计算出来的坐标是实数,能够极大地提高算法的精度。
多年来,国内外学者就光条中心问题提出了多种方法,比较常见的主要有极值法、几何中心法、灰度重心法和 Steger 法等;特征点检测常见有Harris角点检测、FAST角点检测,以及一些局部图像特征,如SIFT,SURF,ORB等[1]。焊缝特征识别的一般步骤是图像滤波、中心线提取、对线性特征进行拟合、特征点的识别。但是这些算法都只是依赖于像素单元进行处理,算法的识别精度并不够高。更有学者使用深度学习、机器学习的方法[2]对焊缝进行处理,在涉及到小目标,神经网络在网络深层差一个像素,在网络浅层会差8或者16个像素,这对小目标的跟踪影响巨大,也难以做到亚像素定位。文中将利用基于Hessian矩阵的Steger亚像素光条定位算法,再通过经过亚像素精度优化后的Shi-Tomasi角点检测算法,在提取光条中心线以及特征点检测两个重要流程中,都在亚像素精度下进行图像处理,并且考虑到了算法的实时性,经过实验表明,算法的精度和效率能够满足要求。
实验装置包括计算模块,成像系统模块。文中使用开源,体积小,相对廉价的树莓派用作计算模块,使用工业相机进行图像信号的采集,采用线性的主动激光提取激光照射后的特征。考虑到图像处理中的实时性要求,要求图像采集速度要高于检测对象的检测速率,即相机的帧率要高,同时得保证计算要足够快。因此,采用了一块基于1.4 GHz 64位4核 ARM Cortex-A53 CPU的树莓派3B+作为计算模块。成像系统采用了一块像素为200万的工业相机,同时使用一块 650 nm的低通滤光片过滤,限制镜头的进光量。
图1 焊缝提取系统设备和工作环境
系统采用主动激光和工业相机来采集图像,在主动激光接通电源后,能够发出特定波长的光,产生一个平面的线激光,线激光照射在焊件上会产生固定形状的光条[3]。经过特定波长的滤光片和相机中的透镜成像后,能够正好拍摄到一条包含焊缝轮廓信息的条纹。通过对主动激光照射在焊件上产生的图像进行处理,可以提取到焊缝的中心线以及焊缝坡口的位置,以便于以后通过图像处理得到偏移的距离,然后采用输出指令的方式来纠正焊枪的位置。
本提取系统后续需要在一秒内向伺服电机输出5或6条指令。因此进行图像处理的计算要求较高,故采用C++进行程序设计,在树莓派的Raspbian操作系统,编译OpenCV库,作为主要的图像处理工具。
在机器视觉的应用中,相机得到的图像往往会产生畸变,这些畸变一般分为径向畸变和切向畸变。径向畸变往往是由于透镜的形状引起的,见公式。
xcorrect=x(1+k1r2+k2r4+k3r6)
(1)
ycorrect=y(1+k1r2+k2r4+k3r6)
(2)
式中,x和y为像素横纵方向的像素距离,r为该点距离成像中心的距离,得到的结果为校正后的新位置。对于畸变较小的中心区域,主要是k1起作用,对于畸变较大的边缘,主要是k2起作用。普通的相机一般用这两个参数就可校正,而工业相机一般会使用到更多参数。
而切向畸变是因为在相机的组装过程中,由于不能使透镜严格和成像平面平行,会引入切向畸变,给出计算公式。
xcorrect=x+2p1xy+p2(r2+2x2)
(3)
ycorrect=y+p1(r2+2y2)+2p2xy
(4)
联立四式,得到畸变参数k1、k2、p1、p2、p3。
我们需要利用标定算法同时求出相机的内参和畸变参数,来校正图像。最常见的算法是张正友标定算法,在OpenCV和Matlab中均已经实现该算法。本系统中采用玻璃底板、棋盘格宽度为1 cm的棋盘格进行标定。如图3,是15张640×480分辨率的棋盘格图像,标定生成的成像模式示意图。
图2 标定图像成像示意图
对标定后的数据,使用5个畸变参数与相机内参数实现校正,校正结果如图3。
图3 原始图像和校正图像对比图
在没有主动激光的情况下,提取焊缝多要使用LED光源、卤素灯、高频荧光灯等常见机器视觉光源。但在采用主动激光的条件,周围光照一定不能超过激光的强度,所以可以不需要再采用其他机器视觉光源进行辅助。埋弧焊钢管焊接中图像的噪声多为椒盐噪声,这里采用高斯滤波进行图像处理,可以一定程度上去除噪声干扰,并对后一步光条中心线的提取做好了前置工作。
2.3.1 光条中心线的提取方法
光条细化中心的提取,对后续进行焊缝坡口以及特征点的提取具有重要意义。需要对光条进行处理,得到一条单像素宽的中心线。并且光条细化中心的提取速度和精度,会影响整个焊缝处理系统。目前,光条中心线的提取方法主要包括骨架细化法、几何中心法、灰度重心法、基于Hessian矩阵的Steger算法等,国内外学者也对其做了大量的研究[4]。
骨架细化法是一种形态学算法,通过不断剥离二值图像的边界像素,最终得到细化的光条,但是剥离的过程要花费大量的时间,不满足实时性。
几何中心法,则是通过Roberts算子,Sobel算子、Canny算子等先做边缘检测,得到光条的两边边界,再将两边界的中线,取做中间线。该方法简单,速度快,但是要求图像的光条边界必须十分精确,生产实际中的噪声会对边缘检测造成非常大的影响,算法的鲁棒性不高。
灰度重心法,是对图像中的所有像素进行遍历,在一列线激光中,先采用极值法求取光强最大的一点max,然后确定一个阀值K=max-△l(l一般取10~20),在阈值两边判断大于K的元素,对中间的每一行提取灰度重心作为光条纹的中心位置。灰度重心法需要对阈值进行选取,也易受环境噪声影响。
基于Hessian矩阵的Steger算法,是一种亚像素中心定位算法。图像中的点性结构具有各项同性,而线性结构具有各向异性。因此我们可以利用Hessian矩阵对图像中的线性结构进行增强,滤去点状的结构和噪声点。Steger算法首先通过Hessian矩阵最大特征值对应的特征向量,得到光条的法线方向,然后在法线方向上进行泰勒展开,求出的多项式极大值就是光条纹中心的亚像素位置[5]。Hessian矩阵是由多元函数的二阶偏导数组成的矩阵,定义如式(5)。式中rxx为图像沿x方向的二阶偏导数,其它的值类似。
(5)
而对于二维图像内某一点的Hessian矩阵,它的最大特征值和其对应的特征向量,对应其邻域二维曲线最大曲率的强度和方向。总结来说,图像某点的Hessian矩阵特征值大小和符号决定了该点邻域内的几何结构。该算法具有处理精度高,鲁棒性好等优点,本系统采用了这种方法,但是计算量相对较大,为了保证实时性需要进行实验和注意程序设计时算法的复杂度。处理结果见图4。
图4 增加滤光片焊缝图像与Steger算法处理效果图
2.3.2 特征点提取
一般图像的特征类型可以被分为边缘、角点、感兴趣区域。焊缝特征点的提取可以依赖于角点特征的提取。角点的具体描述一般可以分为灰度的梯度局部最大所对应的像素点;两条或两条以上边缘的交点;图像中梯度值和梯度变化率高的点。角点提取算法有很多,例如Harris角点,FAST角点,以及学者们又设计了很多局部图像特征,如SIFT,SURF,ORB等,但是在生产实际中,SIFT以及SURF都有专利保护。故此采用一种对Harris角点的进行改进的算法,Shi-Tomasi角点检测算法,在很多情况下可以得到比Harris算法更好的结果。
用(w,x)表示窗口函数,(u,v)为窗口平移量,可以求得像素在窗口内的变化量,再对灰度变化进行泰勒展开,可以得到式(6)。
(6)
Au2+2Buv+Cv2=E
(7)
即为椭圆方程,椭圆的长短轴表示了矩阵的特征值,反应了两个垂直方向的变化情况,两个特征值都大的情况。Harris 角点检测是用C来评价角点的强度,见式(7)。检测的结果与k值有关,k是一个经验值,需要多次试验才能找到最佳值。
C=det(H)-ktrace(H)
(8)
C=λ1λ2-k(λ1+λ2)2
(9)
式中,det(H)为窗口矩阵的行列式,trace(H) 为窗口矩阵的迹,λ1,λ2为特征值。而在Shi-Tomasi算法中间,直接用较小的那个特征值作为C来判断角点的强度,这样就不需要调整K值了[5]。见公式(9)。和Harris 角点检测算法一样,C大于设定的阈值,我们就认为它是一个角点。
C=min(λ1,λ2)
(10)
基于Shi-Tomasi算法与Harris角点检测算法一样,只能达到像素级别,可以使用cornerSubPix亚像素角点检测作进一步的优化操作,可以使角点的精度达到亚像素的级别。算法的主要思想,是要对正交向量的点乘进行迭代。
图5 cornerSubPix算法示意图
如图5,q为待求取的亚像素点,pi是q周围的点,坐标已知,可以自行选取,图像中实线的箭头表示梯度方向。求取亚像素点需要两个正交向量才可求解,设(pi-q)为第一个向量,pi位置的灰度设为Gi,为第二个向量。考虑两种情况,如图5中po表示,位于白色区域,此时的梯度为0;如图5中的pi表示,位于边缘区域,向量(pi-q)与Gi垂直,即点乘为0。都可以得到式(11)。
Gi*(pi-q)=0
(11)
再将式(10)转换为最小二乘法的矩阵形式。
(12)
(13)
所以当点q固定时,若有足够多的向量(pi-q)满足式(11),将每个向量看成一个方程,对方程组求解,可求得亚像素点的位置。但是点q只有一个,pi点有多个,需要对式(13)加上求和符号。但是在采用多点计算后,各点离中心距离不一致,需要引入权重,这里引入高斯权重,假设pi处权重系数为wi,式子最终可以修正为式(14)。
(14)
即cornerSubPix亚像素角点检测优化,是以一个初始的角点q0为中心,选取一个窗口,对窗口中各点的梯度进行求和,因为各点离中心距离不一,引入了高斯权重,用最小二乘法求解,即可得到一个亚像素点(qx,qy),再以q为中心,不断迭代,通过设置结果精度确定迭代次数。于是,对得到的特征点进行筛选,考虑到坡口处的横坐标远大于非坡口处的横坐标,就能过滤掉非坡口处的坐标,选取坡口部分的特征点坐标。对坡口处的特征点坐标进行均值处理,最后能够得到我们需要的特征点坐标。
为了验证算法的有效性和准确性,实验基于标定后的线结构光测量系统,选取了两块不锈钢钢板作为测量对象,尺寸大小为 300 mm×160 mm×4 mm,分别对其表面进行焊缝提取。试验中,传感器距离焊件表面约100 mm,所检测的焊缝宽度约为 2 mm。考虑算法执行时间和CPU的频率有关,在分辨率为320×240、640×480、1 024×768、1 280×960图像分辨率下对算法所用的执行时间进行测算,执行的平台为树莓派。 但是算法执行的时间和操作系统调度有关,如果在轻负载情况下,可以通过多次运行消除操作系统调度的影响。且近10年来的处理器都支持动态频率调整,会根据负载的情况会调整频率。故采用多次测量时间求均值消除影响。测量时间如图6,横坐标的单位为图像像素,纵坐标单位为毫秒。
图6 不同分辨率下求取10次算法时间统计图
对所做实验的结果求取均值,可以得到算法在不同分辨率时间的预测。
要求在1秒内输出至少五帧,则每一帧的总时间不超过200 ms。在不开启图像显示时(人机交互),可以使用640×480分辨率的图像;在开启图像显示后,会拖慢图像处理的速度,这时在树莓派的算力下需要采用用320×240分辨率的图像。
表1 不同分辨率下图像处理时间
利用Harris角点检测对以及细化处理的图像进行检测,观察放大后的图像,提取的角点位置多为离散像素点的角点,而不是焊缝坡口处的角点,检测出的精度不高。
图7 增加滤光片焊缝图像与Harris算法处理效果图
如图8,显示了直接使用Shi-Tomasi算法和经过亚像素精度优化后的结果、根据图像显示,找到的角点位置更加清晰,通过对角点的显示,角点和角点的位置之间没有更多粘粘,可以得出经过亚像素优化后的角点的位置更加准确。
图8 Shi-Tomasi算法与优化后的算法处理效果图
1) 针对常见焊缝提取算法精度不高的问题,文章利用树莓派和工业相机搭建主动激光焊缝提取系统,通过Steger算法以及对Shi-Tomasi角点检测算法进行精度优化,做到了亚像素精度级别的焊缝识别,能够得到了坡口处的位置信息,为下一步进行伺服电机控制焊枪提供了帮助。
(2) 经过试验表明,该算法实时性能够达到要求,算法精度高,实际可行[6-13]。