基于机器视觉的螺纹计数方法研究

2024-01-05 05:42易焕银
广东交通职业技术学院学报 2023年4期
关键词:波谷中轴线波峰

易焕银

(广东交通职业技术学院,广东 广州 510650)

1 引言

作为一种常见的连接紧固零件,螺钉由于具有结构简单、价格低廉、连接可靠等特点,在工程、工业、电子等领域有着不可取代的地位[1]。不合格的螺纹可能导致产品、机构甚至整个系统失效,因此需要对螺纹的参数进行严格管控[2]。螺纹数目是重点监控的参数之一,手工计数工作量大、效率低且难以保障测量结果的可靠性和一致性。关于螺纹的视觉检测,张昊[3]提出了一种基于角点检测和支持向量机的外螺纹参数检测方法;吴智峰等[4]使用高倍远心镜头测量矿山钻孔所用的钻杆接头外螺纹;周策策等[5]采用旋转工件和相机跟拍来测量螺纹参量;田野等[6]提出了一种基于机器视觉的内螺纹检测方法;包能胜等[7]提出了一种对连续运动螺纹的尺寸进行检测的机器视觉方法;李晋惠等[8]设计了一种基于双远心光学系统的外螺纹参数视觉测量系统。刘文龙[9]设计了一种能够自动进行螺纹计数的设备,但该设备基于物理接触式测量螺纹数,相对于视觉测量方法效率较低,且该设备结构较为复杂,包括机台、由伺服电机驱动的线性滑台、软轴固定座、计数头和控制装置等,一定程度上限制了该设备的应用范围。

针对人工检测的不足、目前公开的自动螺纹计数设备存在型号适应性较弱且需对工件的位置进行控制等问题,本文以对螺钉两侧部分螺纹近似直线的检测为出发点,以根据螺纹边沿点到中轴线距离的变化趋势来定位螺纹波峰点和波谷点为突破口,提出了一种快速对螺钉螺纹进行计数的机器视觉方法。基于该方法实现的螺纹计数系统运行时只需拍摄一张图片即可在50 ms左右完成螺纹计数,且系统自动适应螺钉型号、摆放角度和位置的变化。

2 方法设计

2.1 图像采集

系统包括上位机、工业相机、镜头和LED背光光源。上位机与工业相机连接,LED背光光源的亮度可调,用于建立光照环境;工业相机和镜头用于获取工件图像;上位机用于控制工业相机进行图像采集和算法的运行与结果显示。选型方面,系统采用500万像素国产CMOS面阵黑白相机和国产LED背光源,镜头采用日本某公司生产的25 mm工业镜头。图1a为系统采集到的螺钉原图。

(a)采集到的螺钉原图

2.2 图像预处理

图像预处理用于提取螺钉的边沿并去除背景噪声。首先,对原图进行反向二值化,得到二值图像,由式(1)得到。

(1)

式中T为经实验得到的最优阈值,实验中T取245。对图像gb(x,y)以半径2像素圆盘形结构元素为参数进行形态学开运算以去除孤立的小毛刺,得到结果图记为g0(x,y)。再以半径1像素圆盘形结构元素为参数进行形态学腐蚀运算,得到结果图记为ge(x,y)。再与腐蚀前图像相减,如式(2)所示,得1像素宽度的螺纹边沿图像记为gt(x,y)。最后对gt(x,y)进行连通域分析后保留面积最大的连通域,得到去除噪声后的边沿图像,记为g(x,y),结果如图1b所示。此部分获取较细的螺纹边沿是为了提高后续边沿遍历的速度和保证所获取螺纹波峰点和波谷点的准确性。

gt(x,y)=go(x,y)-ge(x,y)

(2)

2.3 螺纹两侧边沿直线和中轴线获取

最初的方案为一次性检测左右两侧的螺纹边沿直线段。但在批量测试过程中发现,该方案在一些测试用例中只能检测到一条直线。经分析,其原因是当左右两侧直线段得分相差较大时,hough直线检测函数会过滤掉其中一条直线。本方法采用了两次hough直线检测的方案,把首先检测到的那条直线段周围区域的边沿点屏蔽,再检查另一边的直线段。

1)检测螺纹一侧的边沿直线,结果如图2a所示。对图1b中的,首先采用概率霍夫变换[10]进行直线检测,然后合并距离相近且夹角较小的线段并保留最长的线段L1,该线段的两个端点记为P1、P2。

(a)hough直线检测得到的一侧边沿直线L1

2)屏蔽L1周围区域的边沿点,结果如图2b所示。屏蔽方法:以P1、P2为起止点绘制一定像素宽度(实验中取20)的背景色直线,结果如图2b所示。

3)首先,用步骤1)相同的方法对图2b进行直线检测,得到另一侧的直线段L2,并将L2与L1的两个端点调整为同一方向。然后,求取两线段的中线,得到螺纹中线L3,结果如图2c所示。

2.4 螺纹波峰点和波谷点获取

1)以P1为起始点按连通域关系依次遍历螺纹的所有边沿点(利用队列结构),并保存边沿点的坐标和到中轴线的距离信息。根据边沿点到中轴线L3距离公式中加绝对值运算前的计算结果的正负,将直线左右两边的边沿点分开,并将点坐标和距离绝对值信息按顺序分别保存到结构体数组points_pos和points_neg中。式(3)为L3的直线方程,边界点到中轴线L3的距离由式(4)表示,其中(x0,y0)为边界点的坐标。

Ax+By+C=0

(3)

(4)

因为本算法只用到相对距离,所有边界点到中轴线的距离公式的分母都为同一值,所以计算时舍弃除以分母的操作以提高速度。将Ax0+By0+C>0的边界点的坐标及到L3的距离保存到points_pos结构体数组中,将Ax0+By0+C>0的边界点的坐标及到L3的距离保存到points_neg结构体数组中。

2)将points_pos和points_neg结构体数组中保存的距离进行均值滤波处理以降低噪声边沿点的干扰,以当前点前后K个点的值为参数(实验中K取5),均值滤波由式(5)表示。

(5)

3)分别以points_pos和points_neg结构体数组为对象搜索螺纹波峰点和波谷点,方法是判断绝对上升个数和绝对下降个数的数量是否均达到预设阈值。

以结构体数组points_pos中的波峰点检测为例,从points_pos中的第2个边沿点开始到最后一个边沿点为止,以当前点到中轴线距离与前一个点到中轴线距离相比较来判断变化的趋势,共有三种情况:上升、下降或维持不变。若待检测点左侧绝对上升的边沿点计数数目up_N达到N个(螺纹波动幅度越大阈值N越大),且右侧绝对下降的边沿点计数数目down_N也达到N个,则判定该点为波峰点。

下面以图3中的三种情况为例详细说明搜索波峰点的具体操作方法,波谷点的判断方法与波峰点类似。

图3 搜索波峰点的三种情况

图3a为最常见的情况,即先连续上升再连续下降的边沿点数目都大于阈值N。达到局部顶点A点时up_N大于N,然后到达B点时down_N达到N,即可判断A点为波峰点,并将A点加入到峰值点集合中。

图3b为遍历过程中有局部变化出现反复相反趋势的情况。由于遍历到局部顶点A时的up_N大于N,故将A点标记为候选峰值点。但达到局部低谷点B时down_N未达到阈值N,候选峰值点A未能判为波峰点。而到局部顶点C点后趋势变为下降,此时up_N大于A点时的up_N,因此C点代替A点成为新的候选峰值点。C点到D点之间为下降趋势,其间down_N从C点开始每遍历一个点down_N自增1,up_N自减1(若减到0则不再变化)。由于达到D点时down_N未达到阈值N,因此候选峰值点C点此时未能判为峰值点。此后D点到E点之间趋势变为上升,其间每遍历一个点up_N自增1,down_N自减1(若减到0则不再变化)。直到E点后一个点的趋势变为下降,因为此时up_N小于C点时的up_N,所以E点未能代替C点成为新的候选峰值点。E点到F点之间为下降趋势,其间每遍历一个点down_N自增1,up_N自减1。当遍历至F点时down_N达到阈值N,因此将候选峰值点C点判为峰值点,并将C点加入到峰值点集合中。

图3c为达到峰值A点后趋势为维持不变的情况,此时需同时记录达到峰值后趋势维持不变的最后一个点B点(根据遍历到B点的后一个点时趋势变为下降来判断),当遍历到C点时down_N已经达到阈值N,此时将候选峰值点A点和B点的中间位置X点判为峰值点,并将X点加入到峰值点集合中。

4)删除伪波峰点和伪波谷点。图4中的空心圆点和实心圆点分别为搜索到的波峰点和波谷点。由图中可见,所得到的波峰点和波谷点中存在少部分误判点。图中将误判点标注为3类,其特点分别为:1类和2类伪点并非在L1、L2两条边界线附近,1类伪点距离中轴线过近,2类伪点距离中轴线过远;3类伪点在边界线L1、L2附近,但其两侧的波动幅度较小,不构成螺纹的波峰和波谷,而且该类伪波峰点和伪波谷点经常以相邻成对的形式出现。①清除1类和2类伪波峰点和伪波谷点的方法:分别计算波峰点、波谷点到中轴线L3的平均距离,删除与平均距离偏差过大的波峰点和波谷点。②清除3类伪波峰点和伪波谷点的方法:计算波峰点、波谷点到中轴线L3的平均距离,其差值记为GAP,若相邻波峰点和波谷点的差值<β×GAP(实验中β取0.2),则删除这一对邻波峰点和波谷点。

图4 搜索得到的波峰点和波谷点

2.5 螺纹计数与结果显示

首先,按式(6)计算螺纹数c,其中a、b分别为波峰点和波谷点的数量。

(6)

然后,根据中轴线L3与螺纹边沿的两个交点确定螺钉的长度,并根据螺钉长度和螺纹数c确定螺钉的型号。最后,获取该型号的螺纹数的预设阈值,并根据测量值是否在阈值范围内判断该螺钉是否通过检测。检测结果如图5所示,图中小圆点为波峰点和波谷点。

图5 检测结果的图像显示

3 算例

以M6×50、M6×40、M5×40、M4×30、M3×30共5个型号的螺钉为实验对象(前一组数据表示螺纹外径,后一组数据表示螺纹长度),分别进行100次测试,共得到500组实验数据,统计信息如表1所示。算法运行速度方面,在测试笔记本电脑上(型号:华硕FX86F,CPU主频:2.2GHz,RAM:8G)运行,用OpenCV实现的该算法对2448*2048的采集图像(500万像素)的平均运行速度为50.31 ms。

表1 测试螺纹信息

实验结果显示,算法的螺纹计数误差为±1个螺纹,测量均值与真实值最大相差0.23个螺纹(型号为M5×40),最大方差为0.448(型号为M4×30),说明本方法对螺纹数目的测量准确度较高。引起误差的主要原因是,本方法基于二维视觉,两端的螺纹在不同旋转视角下的成像起伏变化较大,从而引起波峰点和波谷点数目的波动,导致螺纹计数出现1个左右的差异。

4 结论

针对目前的螺纹计数方法和设备检测效率低、适应性较弱等不足,提出了一种基于机器视觉的快速螺纹计数方法,包括如下步骤:①通过两次hough直线检测得到螺纹两侧的边沿直线进而获得螺钉中轴线;②根据边沿点的连通关系遍历螺纹边沿点及由各边沿点到中轴线的距离的变化趋势得到螺纹的波峰点和波谷点;③计算得到螺纹数。通过算例实验验证,该方法运行速度较快(50 ms左右)、精度较高(±1个螺纹波动),自动适应工件摆放位置、角度和型号的变化,降低了人工检测的工作强度并提高了检测的效率。

猜你喜欢
波谷中轴线波峰
漫画北京中轴线(一)
中轴线旁“小江南”
行走中轴线 寻找城市灵魂
板厚与波高对波纹钢管涵受力性能影响分析
梅缘稻
作用于直立堤墙与桩柱的波峰高度分析计算
儿童标准12导联T波峰末间期的分析
基于音节时间长度高斯拟合的汉语音节切分方法
Dynamic Loads and Wake Prediction for Large Wind Turbines Based on Free Wake Method
北京中轴线掠影