顾良玉,吴继薇
(1.南京理工大学 机械工程学院,南京 210094;2.南京工程学院 人工智能产业技术研究院,南京 211167)
在电机行业中,冲压生产是制造定转子的主要方式之一。在小批量、多品种的生产中,常采用先冲定转子薄片再堆叠的方式来形成铁芯。由于材料、工艺、模具偏差等因素,单个定转子薄片冲压加工时尺寸存在较大的偏差问题,而这会直接影响电机的技术性能。传统的人工测量方法主要依靠量具和检具,效率低且精度难以保证,因此需要一种高效、高精度的测量方法。基于机器视觉的测量技术近年来被广泛应用于工业生产领域,它具有速度快、精度高、非接触等优点[1]。鉴于目前对转子冲压件的非接触式尺寸测量领域研究较为有限,本文提出了应用机器视觉技术对某型号转子冲片冲压件尺寸进行研究的方案。
目前,国内一些公司已经开始在工业现场中逐步应用机器视觉系统,并自主研发了专门针对不同行业的机器视觉软件,例如用于轴承、齿轮等零件的检测[2]。随着我国配套基础设施的不断改善,对工业图像和机器视觉技术在工业化和智能化方面的需求正在快速增加。在进行零件检测等机器视觉系统应用时,图像的边缘检测是一个关键步骤。边缘检测的准确性直接影响到整个视觉检测系统的精度。然而,提高硬件分辨率以提高系统精度是一种昂贵的方法,因为它需要昂贵的高分辨率摄像头或传感器。为了解决这个问题,越来越多的学者转向利用软件处理的方法来增强图像目标的精度,以提高视觉系统的整体检测精度。通过使用精细的图像处理算法和技术,我们可以在不增加硬件分辨率的情况下提高图像的检测精度,且成本较低,而使用软件处理的方法可以在不改变硬件的情况下提高系统精度,为机器视觉应用带来了更多的可能性。
总而言之,借助机器视觉系统和软件处理方法,国内公司能够满足不同行业对于工业图像和机器视觉技术的需求。通过不断改进边缘检测算法和利用软件处理方法,来提高图像检测的精度,同时降低成本,实现更准确、经济实用的目标检测和测量。常用的Prewitt、Roberts、Sobel和Canny等一阶或二阶导数算子的图像边缘检测只能达到像素级[3]。余旭东等人[4]使用Canny算子对待测量孔位进行边缘检测,并通过计算孔位边缘最小外接矩形等尺寸实现零件孔位尺寸快速测量。韩亮[5]提出采用机器视觉技术实现了轴承内外径尺寸测量,通过对采集的轴承图像使用中值滤波与二值化图像预处理,再采用像素级Sobel边缘检测算法提取边缘坐标,最后使用最小二乘法计算得到内外径尺寸。随着工业生产要求的不断提高,像素级测量精度已经不能达到实际应用需求了,因此为了提高系统测量精度且不增加硬件成本的情况下,越来越多学者转向亚像素精度研究,通过利用软件算法的方法来有效提高系统检测精度,具有十分重大的意义。魏东亮等人[6]提出基于三次曲线模型提取微型齿轮感兴趣区域亚像素边缘,使用投影映射精确计算边界位置,精度达到了2 μm。刘凌霄等人[7]提出一种改进反正切模型实现了快速高精度的弹簧内外径尺寸测量。丁伟等人[8]提出了一种分形插值和小波变换的改进亚像素级O型金属密封件的精确尺寸检测方法,其尺寸测量精度可达到μm级。由于亚像素边缘检测可以对像素边缘进行进一步细化,该技术基于像素级边缘周围领域多个像素的组合信息确定亚像素边缘的位置[9]。因此,亚像素级的边缘检测研究备受关注,能够实现高精度检测,具有较强的实用价值。
基于Zernike矩算法具有旋转矩不变性、精度高和抗噪性好等特点[10-11]。本文提出了一种Canny-Zernike矩边缘检测算法对转子冲片内外径及骨架进行测量,该算法利用自适应Canny边缘检测算法提取像素级边缘图像,生成包含目标部分边缘的清晰二值图;然后使用7×7模板Zernike矩算法定位图像的亚像素级边缘,设计轮廓分离算法提取待拟合内外圆及骨架轮廓点集,最后通过最小二乘法拟合得到高精度内外径和骨架尺寸。
为了实现转子冲片尺寸测量,搭建了如图1所示的测量系统,主要包含工业相机、镜头、光源、光源控制器和计算机,相关硬件型号的选择根据检测任务来进行确定。
图1 基于机器视觉的尺寸测量装置
实际生产要求转子冲片尺寸测量精度不超过0.03 mm,电机转子冲片对像外直径尺寸为48 mm,为了让转子更好地出现在视野中间,选取视场大小为60 mm×60 mm,根据分辨率=(视野的高/精度)×(视野的宽/精度)可计算得,单方向分辨率需达到2 000 pixel,应该选用像素大于2 000×2 000的相机,因此相机分辨率得超过400万,综合考虑成本和检测任务后选取500万像素(2 448×2 048)海康CMOS彩色面阵相机。
一般来说,镜头焦距可以由以下公式计算得出:成像的放大倍率=相机芯片短边尺寸/相机的短边视野范围,物镜的焦距(f)=工作距离/(1+1/放大倍率),本系统选择工作距离为260 mm,视野范围为60 mm×60 mm,计算可得f=21.172 mm,因此所选镜头焦距应该大于21.172 mm且分辨率不能小于相机分辨率,于是本实验选用了海康的25 mm,500万定焦镜头。
LED光源具有光源稳定、寿命长、调节方便、节能环保且价格相对较低等众多优点。因此本实验选用LED作为光源;由于检测对象为薄片,采用背向平行光打光方式,能够更好突出边缘轮廓,获得高对比度的图像;计算机平台为8-coreInteli7,16 GB运行内存,基于PyCharm开发环境进行程序编写。
转子冲片尺寸测量流程如图2所示。1)首先对转子冲片进行图像采集,然后经过灰度化和图像滤波预处理;2)之后使用Otsu自适应阈值Canny算子边缘检测得到粗边缘坐标,再使用改进的Zernike矩亚像素边缘算法获取亚像素级坐标点集;3)然后设计轮廓分割算法得到内外圆轮廓亚像素点集,同时提取骨架感兴趣区域的轮廓点集并应用K-Means聚类算法得到每条骨架亚像素轮廓点集;4)再利用最小二乘拟合法对内外圆以及骨架进行拟合,计算出骨架宽度像素值;5)最后通过相机标定得到像素当量,计算出转子冲片的内外圆直径与骨架实际尺寸。
图2 尺寸测量流程
本实验相机采集到的图像为三通道图像,如果直接对其进行图像边缘提取,将导致计算量很大,运行时间长,因此有必要对图像进行灰度化处理,大大降低后续算法运行时间。本文采用灰度加权平均的方法对原始图像进行灰度化,计算过程如下:
gray(i,j)=0.299R+0.578G+0.114B
(1)
式中,gray(i,j)为点(i,j)的灰度值,R、G、B分别为彩色图像的3个通道。转子冲片图像原图和灰度图如图3所示。
图3 转子冲片原图和灰度图
图像在获取或传输过程中可能受到随机信号的干扰而产生噪声,并且在实际拍摄环境中[12],由于光照的不均匀,颗粒杂质等影响产生的噪声形式多以椒盐、斑点为主。由于噪声会对图像边缘检测等后续处理造成干扰,因此对图像进行滤波预处理具有非常重要的意义。
滤波方式可分为线性滤波和非线性滤波两种,其中线性滤波是对所有像素值进行线性组合,由于含噪声像素的系数不为零,因此不会完全消除噪声,而仅在噪声处以更柔和的形式存在[13-14]。相比之下,非线性滤波中的中值滤波能有效去除斑点和椒盐噪声,并保留边缘信息。图4为采用中值滤波和未采用中值滤波对加入椒盐或者颗粒噪声的图像进行边缘提取效果对比图,可以看出中值滤波后可以有效滤除图像中的噪声信息,满足本测试需求。
图4 中值滤波前后边缘检测效果对比图
为解决传统Zernike矩亚像素检测速度慢问题,本文提出首先对图像进行像素级边缘检测作为粗定位,再使用Zernike矩对粗定位边缘进行亚像素定位。常见的像素级边缘算子主要为Prewitt算子、Sobel算子、LOG算子和Canny算子[15]。图5为4种不同算子的转子冲片局部放大边缘检测效果对比图。其中,Prewitt算子和Sobel算子都是一阶微分算子,图像边缘较粗且比较模糊;LOG算子检测的图像边缘出现双轮廓,不利于后续亚像素级定位;相比之下,Canny算子检测的边缘轮廓清晰,效果最好。因此本文采用Canny算法对图像进行像素级边缘检测。
图5 4种不同边缘检测算子效果对比图
Canny算子通过设置高低阈值将图像分为两部分,并使用非极大值抑制对图像进行处理,以实现更精准的边缘定位。阈值选择对于算法效果至关重要,合适的阈值可以减少伪边缘的检测和噪声干扰。由于实际情况中图像易受环境和照明强度等因素影响,手动设置固定阈值难以实现高质量边缘检测。因此,采用自适应阈值选择方法如Otsu方法来调整阈值,并提高算法准确性和稳定性。
(2)
(3)
因此,区域C0和C1的平均灰度计算如下:
(4)
(5)
记μ为整个图像的平均灰度,计算如下:
(6)
类C0和C1的方差和由下式计算得:
P0P1(μ0-μ1)2
(7)
图6 自适应Canny边缘检测
3.2.1 Zernike矩定义
常见的亚像素检测方法主要分为矩方法、插值法、拟合法3类,其中矩方法中又包括灰度矩、空间矩、Zernike矩等[17-18];由于Zernike矩方法是一积分算子,对噪声不敏感且检测精度高,因此本文采用一种基于改进的Zernike矩作为亚像素检测的方法。
连续图像f(x,y)的n阶m次的Zernike矩定义为:
(8)
3.2.2 Zernike矩亚像素检测原理
(9)
Zernike矩亚像素定位模型如图7所示,图7(a)为理想边缘模型,其中,L为理想边缘、两侧灰度值分别为h和h+k、k为灰度阶跃高度、l为圆心到边缘的垂直距离、φ为垂线与轴的夹角。图7(b)中m,n为不同阶次下的Zernike矩边缘,l1,l2分别为圆心到m,n的垂直距离。
图7 Zernike矩亚像素边缘检测模型
根据Zernike多项式定义可计算出积分核函数V00=1,V11=x+iy,V20=2x2+2y2-1,V31=(3x3+3xy2-2x)+(3y3+3x2y-2y)i,V40=6x4+6y4+12x2y2-6x2-6y2+1,根据矩旋转不变性,可计算出不同阶次Zernike矩。
(10)
(11)
(12)
由式(9)、(10)和(12)可得参数,如下:
(13)
(14)
式中,Re[Z11],Im[Z11]分别为Z11的实部和虚部,因此φ可计算得:
(15)
根据以上分析得到了图像参数后,考虑到其N×N的模板放大效应,从图7可推导出亚像素坐标计算公式,修正后可得:
(16)
式中,(xs,ys)为亚像素坐标,(x,y)为图7中原点坐标。
3.2.3 改进算法流程
由于传统的Zernike矩需要对整幅图像进行卷积运算和效率低等问题,提出加入自适应阈值的Canny边缘检测作为粗定位,提高算法的运行速率;本算法改进了传统Zernike矩的边缘判定依据,用k≥kt∩∣l2-l1∣≤lt取代k≥kt∩l≤lt,其中kt,lt为k和l的阈值,以达到进一步细化边缘的作用。具体算法步骤如下:
1)计算7×7模板M00,M11,M20,M31,M40;
2)将像素级边缘点与模板进行卷积运算得Z00,Z11,Z20,Z31,Z40;
3)选取任意一个非零像素点根据式(15)计算出旋转角度φ;
4)根据式(11)、(12),计算l1,l2得到l;
5)将l2代入式(13)中计算得到h、k;
利用本文算法得到亚像素边缘检测如图8(a)所示,图8(b)为局部放大图,其中黑色“*”为亚像素点。
图8 亚像素边缘检测结果
4.1.1 冲片内外圆亚像素轮廓分割
为了实现转子冲片内外径尺寸测量,需要先分割内外圆轮廓再进行拟合,因此本文设计一种针对内外圆环的一种高效边缘轮廓分离方法,通过寻找每个角度内距离圆心最远和最近的点实现内外边缘轮廓点的分离,具体算法步骤如下:
1)计算所有亚像素点的质心作为初始圆心;2)利用arctan2函数计算每个点与圆心之间与x轴正半轴的夹角;3)根据轮廓点数对角度进行分组;4)计算每个点与圆心之间的欧式距离;5)逆时针旋转遍历每个组,筛选出每个组中距离圆心的最大距离和最小距离点,即为外圆和内圆上的轮廓点。由于转子冲片外圆轮廓是间断的,提取的外轮廓点如图9(a)所示,有部分点落在内圆弧上,因此对提取的外圆轮廓点到圆心的距离取平均,保留大于平均值的点,过滤掉间断处的点。当遇到空点时,跳过,循环下一组;6)将提取的内外圆轮廓点放入不同数组中。
图9 转子内外轮廓分割图
如图9(b)所示,经图像分割后的转子冲片内外圆亚像素边缘图,分割效果比较理想。
4.1.2 最小二乘法拟合圆
基于最小二乘法在拟合圆,直线等特征曲线方面具有简单、高效、可靠等优点广泛用于尺寸测量中[20-21]。因此本文选用最小二乘法对分割后的内外圆轮廓进行拟合计算,算法拟合具体步骤如下:假设圆心为(a,b),半径为r的圆方程为:r2=(x-a)2+(y-b)2将其展开变为:x2+y2+Ax+By+C=0,式中:A=-2a,B=-2b,C=a2+b2-r2,于是可得:
(17)
则代拟合边缘点集(xi,yi),其中i∈(1,2,3,…,n),各点到圆心的距离平方与半径平方差为:
(18)
(19)
图10(a)为最小二乘法在原图上拟合效果图,图10(b)为内圆拟合局部放大图,白色点为亚像素点,黑色线为拟合线,可以看出对亚像素点拟合效果比较理想。
图10 转子冲片内外圆轮廓最小二乘法拟合效果
4.2.1 基于K-Means的冲片骨架亚像素轮廓分割
为了测量转子冲片骨架的宽度,需要先对亚像素轮廓进行感兴趣区域的划分,以提高算法的运行效率,减少无关区域的干扰。再基于K-Means聚类算法得到每条骨架线段,下面是该方法的具体步骤:
1)从亚像素坐标数据样本中随机选取k个质心{u1,u2,…,uk}作为初始聚类中心,设定阈值为每个骨架线段间的最小距离,由骨架数将k设置为24;
2)对剩余的数据点,算出其到每个质心的距离并划分到距离最近的质心簇中;
3)重新计算每个簇的均值作为新的聚类质心;
4)不断重复步骤2)和3),直到聚类中心不再变化或者小于指定的阈值,输出最终的聚类;
对于感兴趣区域内样本数据,通过聚类将每一条骨架线段划分为一个类,然后通过后续拟合算法算出骨架间距。
4.2.2 最小二乘法拟合直线
本文采用最小二乘法对K-Means提取的每一类进行直线拟合,算法实现步骤如下:假设一条直线方程为y=kx+b,图像上共有n个代拟合点{(xi,yi)}(i=1,…,n),每个点到直线的距离平方和为:
(20)
使用最小二乘法对K-Means聚类后的每一条骨架轮廓点集拟合效果如图11(b)所示,骨架拟合局部放大图如图11(c)所示,其中白色点为亚像素点,黑色线条为拟合结果,对所有点的拟合效果良好。为了测量骨架宽度尺寸,对每对平行线段进行测量取平均值作为最终结果。每对平行线段间距测量方式如图11(d)所示,假设基准直线为l1,另一条直线为l2,A,B为l2线段两个端点,两个端点到l1的距离分别为d1和d2,则两条直线间距d=(d1+d2)/2。
图11 转子冲片骨架直线拟合及测量示意图
在工件尺寸在线视觉测量中,相机标定是一个不可或缺的步骤。在进行图像采集之前,必须对相机进行标定。相机标定的目的是获得相机的内部参数,对制造过程中产生的畸变进行校正,以降低图像畸变对尺寸测量精度的影响。通过相机标定,可以确定像素与物理空间之间的转换关系,以及相机的光学中心、焦距、畸变参数等重要参数[22]。校准过程通常涉及使用已知尺寸的标定板或标定物体,在不同位置和姿态下进行拍摄并分析。
因此为了得到转子冲片的实际物理尺寸,需要建立视觉检测系统与世界坐标系之间的几何变换关系,计算出像素的当量尺寸。本文采用张正友标定法对相机进行标定并对制造过程中产生的畸变进行校正[23],采用制造误差为±0.005 mm的高精度圆形标定板,在不同位置和姿态下拍摄15幅标定图像,如图12所示,为每张标定图的重投影误差图,平均误差达到0.012 59个像素,标定精度高,最后计算得到内外参矩阵对图片进行畸变矫正,提高检测精度。
图12 标定误差图
计算像素当量,可由下式得到:k=a/r其中a为工件的实际尺寸,r为像素数。像素当量k的单位为mm/像素。它的物理意义是图像上像素的实际尺寸。
通过在测量平面测量矫正后的高精度标定板两圆心距得到像素尺寸,和实际尺寸4 mm对比可得到像素当量,如图13所示。
图13 标定板圆心距测量图
如表1所示,用本文算法测量了10组标定板两圆之间的圆心距,取10组圆心距测量值平均值148.800 1 pixel作为两圆圆心距像素尺寸,则可得相机的像素当量k=4/148.800 1=0.026 88 mm/pixel。然后将算法所得到的各转子冲片像素级尺寸乘以像素当量可得到实际物理尺寸。
表1 标定板两圆圆心距测量像素值
为了验证本测量算法的精确度,在不改变测量系统的情况下,改变转子冲片在画面中的位置进行8组尺寸测量,然后使用千分尺对转子各尺寸进行10次测量取其测量平均值作为标准值,测量值与标准值对比如表2所示。
表2 转子冲片各尺寸测量结果
由表2可知,各尺寸测量值与标准值平均绝对误差均在0.01 mm以下,同时方差很小,表明测量系统工作稳定,亚像素平均定位精度可达到0.4个像素,最大测量绝对误差在0.02 mm以下,均完全满足本文转子冲片检测精度需求,实验验证本文算法测量精度高。
为了对比像素级尺寸测量精度与亚像素尺寸测量精度,于是分别用像素级canny算法和本文亚像素算法对同一规格下8个转子冲片各尺寸进行测量并与标准值对比的绝对误差分析图,实验数据如图14所示。
图14 转子各尺寸测量误差图
由图14所示,基于Canny像素级对转子冲片各尺寸测量并不能很好地满足设计要求最低0.03 mm精度要求,其中外径测量误差均在0.03 mm以上,内径与骨架尺寸测量均有多数组绝对误差超过0.03 mm;而本文亚像素级8组尺寸测量绝对误差均在0.02 mm以下,且大多数绝对误差在0.01 mm以下,完全满足实际工业检测要求。同时,我们又分别统计了基于Canny算法、传统Zernike矩方法与本文改进Zernike算法对转子所有冲片尺寸测量的运行时间,如表3所示。
表3 基于3种算法的冲片尺寸测量时间
由表3可知,基于Canny像素级算法尺寸测量平均运行时间最少,但是其精度无法满足实际检测要求,需要采用更高分辨率的相机,但同时其硬件成本会大幅提升;基于传统Zernike矩算法尺寸测量达到8.5 s,运行效率太慢,不能满足转子冲片在线检测需求;而改进的Zernike矩算法测量转子尺寸平均运行时间在1.1 s左右,基本满足在线生产要求并适用于辅助人工检测提高检测效率和精度,相比于传统Zernike矩算法运行时间提升了8倍左右,同时一定程度上解决了像素级测量精度不够的问题。由于本文算法实验开发采用Python编写,后续使用速度更快的c++编写,代码整体运行效率会提升更多。
由于实验最初硬件选型按照0.03 mm的精度选取相关相机,镜头等硬件,但是像素级尺寸测量实验却不能完全达到0.03 mm,针对这一现象,本文分析了几个有可能导致测量精度产生误差的原因:
1)软件算法处理:由于图像在采集过后,需要经过图像预处理、边缘检测、尺寸检测等各种算法处理,尤其在图像预处理环节中的图像滤波,算法在滤波的同时,一定程度上降低了图像边缘的质量,后续算法处理都会对检测系统的精度产生一定的影响。
2)成像系统:由于CMOS相机相对于CCD相机成本较低,但CMOS相机采集物体边缘图像时对比度不如CCD相机高,从而导致了最后系统测量精度误差。
3)校准误差:由于普通镜头一般都会产生较大的畸变,虽然经过畸变矫正后,一定程度上降低了畸变产生的影响,但是在标定过程中系统会引入误差,也会对系统测量精度产生误差。
为了解决传统人工检测转子冲片尺寸的不足,本文提出了一种基于机器视觉的亚像素精度转子冲片尺寸检测方法,并在实验平台上进行了实现。首先,采集并预处理图像;针对传统Canny算法需要不断调参的问题,提出了加入Otsu算法的自适应阈值Canny边缘检测;利用改进的Zernike矩对像素级边缘进行亚像素定位,提高了代码运行效率;通过寻找每个角度内距离圆心最远和最近点的方法实现内外圆轮廓的分割,以及在感兴趣区域通过K-Means聚类实现骨架轮廓边缘的分割;最后,利用最小二乘法对内外圆和骨架进行拟合实现转子冲片尺寸测量。与千分尺测量结果进行比较,该方法的平均误差精度约为0.01 mm,满足实际测量要求,该方法通过软件算法处理达到了高精度测量,在一定程度上降低了硬件的使用成本。