一种线宽量测方法、系统及计算机存储介质
文献发布时间:2024-04-18 20:00:50
技术领域
本申请涉及线宽量测技术领域,具体而言,涉及一种线宽量测方法、系统及计算机存储介质。
背景技术
基于视觉的线宽量测技术被广泛的应用于工业领域。目前市面上常规的基于视觉的线宽量测技术,通常先提取到线条目标,再对线条提取边缘或是中线,在边缘或中线的法向上统计线宽。然而工业制造领域场景相对多样复杂,常规的线条量测算法通用性欠佳。
例如胶线在点胶的过程中经常会出现拉丝或者溢胶现象,导致线条存在较多毛刺与线条相连,常规的线宽量测算法无法区分同一根线条连通区域上的线条和非线条部分,会将毛刺也作为线条的分支进行测量,会引入测量误差。又例如工业制造场景中可能存在颜色或者形态与待检测线条相近的干扰物,导致无法锁定待检测目标,常规的线宽量测算法往往不能很好的在众多复杂的干扰中区分出待检测线条,可能会将干扰区域也进行量测,导致错误检测。另外线条通常并不是简单的直线,常规的线宽量测受到线条弯曲等影响,导致计算位置的法线方向不准,容易造成计算偏差。
目前工业领域暂无一种公开的且具有高鲁棒性的线宽量测视觉算法。
发明内容
本申请的目的在于提供一种线宽量测方法、系统及计算机存储介质。通过遍历提取骨架线并筛选出骨架线端点,再对骨架线端点进行去毛刺,以确保线条上的毛刺分支不会单独被计算线宽,从而提高线宽量测的准确性。
本申请第一方面提供了一种线宽量测方法,所述方法包括以下步骤:
获取线宽测量图像;
其中,所述线宽测量图像中包含:待测量线条;
获取所述待测量线条的线条遮罩mask,并根据所述待测量线条的线条遮罩mask提取线条骨架线;
对所述线条骨架线进行去毛刺处理,得到去毛刺后的线条骨架线,所述去毛刺后的骨架线包括:至少两个骨架点;
将所述至少两个骨架点映射值所述待测量线条上,计算每个骨架点位置处的线宽;
输出线宽测量结果,其中,所述线宽测量结果中包含:所述待测量线条在各个骨架点位置处的线宽。
可选地,所述获取所述待测量线条的线条遮罩mask,并根据所述待测量线条的线条遮罩mask提取线条骨架线,包括以下步骤:
输入线宽测量图像,并对该图像进行灰度化,得到线宽测量灰度图;
对线宽测量灰度图进行中值滤波,通过控制中值滤波图的中值滤波核的尺寸对线条提取进行卡控,以去除线宽测量灰度图中待测量线的干扰,得到去除干扰后的测量图像;
对去除干扰后的测量图像进行阈值分割,获取线条二值图;
利用线条锁定规则对线条二值图中的线条进行锁定;
对线条二值图进行空洞填充;
对线条二值图进行膨胀获取线条遮罩mask;
采用骨架提取算法在线条遮罩mask区域上提取骨架线。
可选地,所述对所述线条骨架线进行去毛刺处理,得到去毛刺后的线条骨架线,具体为:
对骨架线进行边缘屏蔽;获取边缘屏蔽后骨架线上的点集;对骨架点进行去毛刺,以实现对骨架线进行去毛刺;
对去毛刺后的骨架点从其中一个端点开始进行排序;
对每个骨架点通过曲率半径规则分配切线计算点;
遍历骨架点,根据切线计算点采用最小二乘法计算对应骨架点的切线;
根据计算的切线计算经过当前骨架点的法线函数;
将骨架点映射到线条二值图中,从骨架点按照法线方向,向两侧寻找线条的边界点,获取骨架线的两个边界交点;
根据每个骨架线位置上获取的边界交点,计算边界交点之间的欧式距离,即为当前骨架点位置的线宽;
统计每个骨架点位置的线宽进行输出。
可选地,所述通过控制中值滤波图的中值滤波核的尺寸对线条提取进行卡控,具体为:通过控制中值滤波图的中值滤波核的尺寸对提取线宽测量灰度图中的高频区域,屏蔽低频区域。
可选地,所述去除干扰后的测量图像,具体为:
若线宽测量灰度图中的线条为黑色,去除干扰后的测量图像为利用中值滤波图上的各像素值减去线宽测量灰度图上对应位置的像素值后再生成的图像;
若线宽测量灰度图中的线条为白色,去除干扰后的测量图像为利用线宽测量灰度图上的各像素值减去中值滤波图上对应位置的像素值后再生成的图像。
可选地,所述线条锁定规则如下:
利用标准中值滤波核对线条提取进行卡控,得到去除干扰后的测量图像,再对去除干扰后的测量图像进行阈值分割,获取标准二值图;
利用过大线条宽度两倍的中值滤波核对线条提取进行卡控,得到去除干扰后的测量图像,再对去除干扰后的测量图像进行阈值分割,获取粗线条二值图;
判断标准线条二值图和粗线条二值图共线率,如果其共线率在预设的共线率阈值以上,则代表锁定的标准线条和粗线条为同一线条组成部分;
若共线,则进行判断最大线宽区域像素面积,如果最大线宽区域像素面积达到设定值以上,则采用粗线条二值图进行处理;如果最大线宽区域像素面积未达到设定值,则采用标准线条二值图处理;
最大线宽像素面积 =最大连通域×(粗线条二值图的各像素值减去标准线条二值图对应位置的像素值后再生成的图像上的线条的面积);
若采用标准核提取的线条部分像素面积小于设定值,则采用粗线二值图进行处理;
若采用标准核提取的线条部分像素面积和采用大核提取的线条部分像素面积都小于预设的像素面积阈值,则直接报错,说明没有线条。
可选地,所述骨架提取算法为Zhang-suen算法,包括以下步骤:
假设目标像素点标记为1,背景像素点标记为0;
标记将被删除的边界点,标记点符合如下公式规则;
,
注:
,
注:
,
其中,
注:
,
注:3、5、7邻域位置相乘为0;
删除做了标记的点;
继续标记将被删除的剩余的边界点,标记点符合如下公式规则;
,
注:当前点邻域在2~6个之间;
,
注:当前点标记值为1;
,
注:1、3、7邻域位置相乘为0;
,
注:1、5、7邻域位置相乘为0;
删除标记过的点;
重复上述步骤,直到再也没有被删除的边界点为止,此时算法终止,生成该区域的骨架。
可选地,所述获取边缘屏蔽后骨架线上的点集,对骨架点进行去毛刺,以实现对骨架线进行去毛刺,包括:
获取边缘屏蔽后骨架线上的点集;
遍历点集,筛选出骨架线端点;
从每个端点开始往线条主干方向寻找分支,以分支的端点为分支点,并计算端点到分支点的路径长度;
若端点到分支点路径的长度小于预设长度阈值,则判断为毛刺骨线,则删除该路径上的所有点,实现该分支的去毛刺;
对剩余分支点进行判定,如果分支点是端点,则分支点是假分支点,对假分支点再进行去毛刺。
可选地,所述对每个骨架点通过曲率半径规则分配切线计算点,具体为:
如果骨架线总体计算点数量少于预设数量阈值,则直接将骨架线当作直线计算,每个骨架点位置的切线计算点为所有骨架点;
如果骨架线总体计算点数量超过预设值,则对每个骨架点位置,取其两侧各N/2数量的连续骨架点作为切线计算点,如果其中一侧不足N/2数量,则用另一侧进行弥补:
,
其中:N为计算点个数,K为比例系数,r为曲率半径。
本申请第二方面提供了一种线宽量测系统,该系统包括:存储器及处理器,所述存储器中包括一种线宽量测方法的程序,所述线宽量测方法的程序被所述处理器执行时实现一种线宽量测方法的步骤。
本申请第三方面提供了一种计算机可读存储介质,所述计算机可读存储介质中包括线宽量测方法程序,所述线宽量测方法程序被处理器执行时,实现所述的一种线宽量测方法的步骤。
由上可知,本申请提供的一种线宽量测方法、系统及计算机存储介质。针对线条上的毛刺对线条宽度计算的干扰问题,通过遍历提取骨架线并筛选出骨架线端点,再对骨架线端点进行去毛刺,以确保线条上的毛刺分支不会单独被计算线宽,从而提高线宽量测的准确性。针对颜色或者形态与待检测线条相近,通过利用中值滤波核去干扰和“线条锁定规则”进行过滤筛选,有效的防止干扰物造成的错检测。针对线条走线弯曲多变的问题,通过将曲率和计算点建立联系,能有效的提升线宽量测精度。此外,本申请还采用线条mask对Zhang-suen算法进行加速,有效的提升提取线条骨架线的效率。
本申请的其他特征和优点将在随后的说明书阐述,并且,部分地从说明书中变得显而易见,或者通过实施本申请实施例了解。本申请的目的和其他优点可通过在所写的说明书、权利要求书、以及附图中所特别指出的结构来实现和获得。
附图说明
为了更清楚地说明本申请实施例的技术方案,下面将对本申请实施例中所需要使用的附图作简单地介绍,应当理解,以下附图仅示出了本申请的某些实施例,因此不应被看作是对范围的限定,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他相关的附图。
图1为本申请实施例提供的一种线宽量测方法的流程图。
图2为本申请实施例提供的灰度化处理后的图片。
图3为图2经中值滤波后的图。
图4为去除干扰后的图像。
图5为存在形态上与线条类似的干扰物的图像。
图6为图5去除干扰后的图像。
图7为一种线宽量测系统的框图。。
具体实施方式
下面将结合本申请实施例中附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本申请一部分实施例,而不是全部的实施例。通常在此处附图中描述和示出的本申请实施例的组件可以以各种不同的配置来布置和设计。因此,以下对在附图中提供的本申请的实施例的详细描述并非旨在限制要求保护的本申请的范围,而是仅仅表示本申请的选定实施例。基于本申请的实施例,本领域技术人员在没有做出创造性劳动的前提下所获得的所有其他实施例,都属于本申请保护的范围。
应注意到,相似的标号和字母在下面的附图中表示类似项,因此,一旦某一项在一个附图中被定义,则在随后的附图中不需要对其进行进一步定义和解释。同时,在本申请的描述中,术语“第一”、“第二”等仅用于区分描述,而不能理解为指示或暗示相对重要性。
请参照图1,为本申请一些实施例中的线宽量测方法的流程图。该电表数据采集方法用于终端设备中,例如电脑、手机终端等。该线宽量测方法,包括以下步骤:
S102:获取线宽测量图像;
其中,所述线宽测量图像中包含:待测量线条;
S104:获取所述待测量线条的线条遮罩mask,并根据所述待测量线条的线条遮罩mask提取线条骨架线;
S106:对所述线条骨架线进行去毛刺处理,得到去毛刺后的线条骨架线,所述去毛刺后的骨架线包括:至少两个骨架点;
S108:将所述至少两个骨架点映射值所述待测量线条上,计算每个骨架点位置处的线宽;
S110:输出线宽测量结果,其中,所述线宽测量结果中包含:所述待测量线条在各个骨架点位置处的线宽。
需要说明的是,所述线条遮罩mask为线条二值图通过3x3的核进行膨胀后获取的,仅用于确定骨架线提取时的遍历位置点(线条遮罩mask上的白色区域),骨架线提取时,线条图像只对线条遮罩mask提供的位置点采用提取规则进行骨架线提取。相当于原先是线条全图进行形态学操作提取骨架线,通过遮罩mask进行提取目标锁定,只对mask区域上的点进行遍历提取,起到加速作用。
根据本发明实施例,所述获取所述待测量线条的线条遮罩mask,并根据所述待测量线条的线条遮罩mask提取线条骨架线,包括以下步骤:
输入线宽测量图像,并对该图像进行灰度化,得到线宽测量灰度图;
对线宽测量灰度图进行中值滤波,通过控制中值滤波图的中值滤波核的尺寸对线条提取进行卡控,以去除线宽测量灰度图中待测量线的干扰,得到去除干扰后的测量图像;
需要说明的是,本申请通过控制中值滤波核的宽度实现对线条提取的卡控,能够有效的去除颜色或形态上与待测量线条类似的干扰。
需要说明的是,中值滤波能有效的提取高频区域,屏蔽低频区域,而线条部分属于高频区域,干扰部分大多属于低频区域。图2为灰度化处理后的图片,例如将图2去除干扰后的测量图像经中值滤波后得到的中值滤波图如图3所示。
对去除干扰后的测量图像进行阈值分割,获取线条二值图;
利用线条锁定规则对线条二值图中的线条进行锁定;
对线条二值图进行空洞填充;
对线条二值图进行膨胀获取线条遮罩mask;
采用骨架提取算法在线条遮罩mask区域上提取骨架线。
需要说明的是,本申请中去除干扰后的测量图像具体为:
若线条为黑色:去除干扰后的测量图像 = 中值滤波图 - 灰度图
若线条为白色:除干扰后的测量图像 = 灰度图 - 中值滤波图
本申请通过控制中值滤波核尺寸,能有效的控制线条目标提取。核尺寸建议为标准线宽的2倍。
对于存在低频干扰物(颜色相近),其提取效果如图4所示,图4为去除干扰后的图像。
对于存在形态上与线条类似的干扰物,如图5所示为存在形态上与线条类似的干扰物的图像,其提取效果如图6所示,即图6为图5去除干扰后的图像。
需要说明的是,本申请通过控制中值滤波核进行线条目标的提取之后,获取线条二值图,线条二值图中面积最大的目标为待检测线条,此时通过提取最大连通域获取到线条连通域。
需要说明的是,在线条提取时,如果发生线条部分区域宽度过大,则通过标准中值滤波核(检测标准线宽的核尺寸)提取线条,可能会造成线条不连续(过宽的区域发淡)。如果直接将中值滤波核尺寸提升到过大宽度的两倍,则可能会导致形态上与线条类似的宽度较大的区域被提取。则可以通过一个大核结合标准核进行锁定。分别通过一个标准核和一个过大宽度两倍左右的核进行S104~S106的步骤得到一个标准线条二值图和粗线条二值图,再通过线条锁定规则对目标线条进行锁定。
需要说明的是,本申请对线条二值图进行填充,防止内部的孔洞对骨架线提取造成干扰(若内部存在孔洞,则可能会造成骨架线分叉,骨架线分叉会引入计算误差)。
需要说明的是,本申请通过采用3x3(建议值)核对二值图进行膨胀获取线条遮罩mask(用于提取骨架线时定位线条区域,加速计算)。
根据本发明实施例,所述对所述线条骨架线进行去毛刺处理,得到去毛刺后的线条骨架线,具体为:
对骨架线进行边缘屏蔽;获取边缘屏蔽后骨架线上的点集;对骨架点进行去毛刺,以实现对骨架线进行去毛刺;
对去毛刺后的骨架点从其中一个端点开始进行排序;
对每个骨架点通过曲率半径规则分配切线计算点;
遍历骨架点,根据切线计算点采用最小二乘法计算对应骨架点的切线;
根据计算的切线计算经过当前骨架点的法线函数;
将骨架点映射到线条二值图中,从骨架点按照法线方向,向两侧寻找线条的边界点,获取骨架线的两个边界交点;
根据每个骨架线位置上获取的边界交点,计算边界交点之间的欧式距离,即为当前骨架点位置的线宽;
统计每个骨架点位置的线宽进行输出。
需要说明的是,本申请获取边缘屏蔽后骨架线上的点集后遍历点集,筛选出骨架线端点。由于胶线上存在毛刺,毛刺的骨架线也会被提取,会造成一条骨架线有多个端点,而理想的骨架线应只有两个端点。
需要说明的是,本申请从其中一个端点开始以8连通域的方式检索连通域,通过这种方式对连通域点进行了排序,便于计算。
需要说明的是,本申请对骨架线每个位置的计算点进行分配(计算点用于计算切线函数)。理论上越弯曲的线段其切线计算点应越少,否则计算切线函数会引入较多弯曲区域的点,会存在较大偏差;越平直的线段其切线计算点应越多,否则计算切线函数容易受到局部扰动影响,导致误差。
需要说明的是,本申请遍历骨架线位置点,使用分配好的点计算当前点的切线斜率,再确定对应骨架点的切线。
需要说明的是,本申请根据计算的切线斜率计算出法线斜率,根据法线经过骨架点,计算出每个骨架点位置的法线函数。
根据本发明实施例,所述通过控制中值滤波图的中值滤波核的尺寸对线条提取进行卡控,具体为:通过控制中值滤波图的中值滤波核的尺寸对提取线宽测量灰度图中的高频区域,屏蔽低频区域。
根据本发明实施例,所述去除干扰后的测量图像,具体为:
若线宽测量灰度图中的线条为黑色,去除干扰后的测量图像为利用中值滤波图上的各像素值减去线宽测量灰度图上对应位置的像素值后再生成的图像;
若线宽测量灰度图中的线条为白色,去除干扰后的测量图像为利用线宽测量灰度图上的各像素值减去中值滤波图上对应位置的像素值后再生成的图像。
需要说明的是,中值滤波图和线宽测量灰度图是两个尺寸相同的图像,利用中值滤波图上的像素点的像素值与测量灰度图上的像素点的像素值一一相减,得到新的像素点,再由新的像素点组成一幅新的图像,新的图像的尺寸与中值滤波图和线宽测量灰度图的尺寸一致。
根据本发明实施例,所述线条锁定规则如下:
利用标准中值滤波核对线条提取进行卡控,得到去除干扰后的测量图像,再对去除干扰后的测量图像进行阈值分割,获取标准二值图;
利用过大线条宽度两倍的中值滤波核对线条提取进行卡控,得到去除干扰后的测量图像,再对去除干扰后的测量图像进行阈值分割,获取粗线条二值图;
判断标准线条二值图和粗线条二值图共线率,如果其共线率在预设的共线率阈值以上,则代表锁定的标准线条和粗线条为同一线条组成部分;
若共线,则进行判断最大线宽区域像素面积,如果最大线宽区域像素面积达到设定值以上,则采用粗线条二值图进行处理;如果最大线宽区域像素面积未达到设定值,则采用标准线条二值图处理;
最大线宽像素面积 =最大连通域×(粗线条二值图的各像素值减去标准线条二值图对应位置的像素值后再生成的图像上的线条的面积);需要说明的是,粗线条二值图和标准线条二值图是两个尺寸相同的图像,利用粗线条二值图上的像素点的像素值与标准线条二值图上的像素点的像素值一一相减,得到新的像素点,再由新的像素点组成一幅新的图像,新的图像的尺寸与粗线条二值图和标准线条二值图的尺寸一致。
若采用标准核提取的线条部分像素面积小于设定值,则采用粗线二值图进行处理;
若采用标准核提取的线条部分像素面积和采用大核提取的线条部分像素面积都小于预设的像素面积阈值,则直接报错,说明没有线条。
根据本发明实施例,所述骨架提取算法为Zhang-suen算法,包括以下步骤:
假设目标像素点标记为1,背景像素点标记为0;
标记将被删除的边界点,标记点符合如下公式规则;
,
注:
,
注:
,
其中,
注:
,
注:3、5、7邻域位置相乘为0;
删除做了标记的点;
继续标记将被删除的剩余的边界点,标记点符合如下公式规则;
,
注:当前点邻域在2~6个之间;
,
注:当前点标记值为1;
,
注:1、3、7邻域位置相乘为0;
,
注:1、5、7邻域位置相乘为0;
删除标记过的点;
重复上述步骤,直到再也没有被删除的边界点为止,此时算法终止,生成该区域的骨架。
需要说明的是,由于边界的骨架线会带来计算干扰,所以本申请屏蔽图像边界的骨架线图像。
需要说明的是,Zhang-suen是一种基于形态学的骨架线提取算法,如果对全图进行操作会带来较大的耗时,仅对线条区域进行操作能有效的提速。
根据本发明实施例,所述获取边缘屏蔽后骨架线上的点集,对骨架点进行去毛刺,以实现对骨架线进行去毛刺,包括:
获取边缘屏蔽后骨架线上的点集;
遍历点集,筛选出骨架线端点;
从每个端点开始往线条主干方向寻找分支,以分支的端点为分支点,并计算端点到分支点的路径长度;
若端点到分支点路径的长度小于预设长度阈值,则判断为毛刺骨线,则删除该路径上的所有点,实现该分支的去毛刺;
对剩余分支点进行判定,如果分支点是端点,则分支点是假分支点,对假分支点再进行去毛刺。
根据本发明实施例,所述对每个骨架点通过曲率半径规则分配切线计算点,具体为:
如果骨架线总体计算点数量少于预设数量阈值,则直接将骨架线当作直线计算,每个骨架点位置的切线计算点为所有骨架点;
如果骨架线总体计算点数量超过预设值,则对每个骨架点位置,取其两侧各N/2数量的连续骨架点作为切线计算点,如果其中一侧不足N/2数量,则用另一侧进行弥补:
,
其中:N为计算点个数,K为比例系数,r为曲率半径。
如图7所示,本申请第二方面提供了一种线宽量测系统,所述线宽量测系统8包括:存储器81及处理器82,所述存储器81中包括一种线宽量测方法的程序,所述线宽量测方法的程序被所述处理器82执行时实现所述线宽量测方法的步骤。
本申请第三方面提供一种计算机可读存储介质,所述计算机可读存储介质中包括线宽量测方法程序,所述线宽量测方法程序被处理器执行时,实现所述线宽量测方法的步骤。
由上可知,本申请提供的一种线宽量测方法、系统及计算机存储介质。针对线条上的毛刺对线条宽度计算的干扰问题,通过遍历提取骨架线并筛选出骨架线端点,再对骨架线端点进行去毛刺,以确保线条上的毛刺分支不会单独被计算线宽,从而提高线宽量测的准确性。针对颜色或者形态与待检测线条相近,通过利用中值滤波核去干扰和“线条锁定规则”进行过滤筛选,有效的防止干扰物造成的错检测。针对线条走线弯曲多变的问题,通过将曲率和计算点建立联系,能有效的提升线宽量测精度。此外,本申请还采用线条mask对Zhang-suen算法进行加速,有效的提升提取线条骨架线的效率。
在本申请所提供的几个实施例中,应该理解到,所揭露的设备和方法,可以通过其它的方式实现。以上所描述的设备实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,如:多个单元或组件可以结合,或可以集成到另一个系统,或一些特征可以忽略,或不执行。另外,所显示或讨论的各组成部分相互之间的耦合、或直接耦合、或通信连接可以是通过一些接口,设备或单元的间接耦合或通信连接,可以是电性的、机械的或其它形式的。
上述作为分离部件说明的单元可以是、或也可以不是物理上分开的,作为单元显示的部件可以是、或也可以不是物理单元;既可以位于一个地方,也可以分布到多个网络单元上;可以根据实际的需要选择其中的部分或全部单元来实现本实施例方案的目的。
另外,在本发明各实施例中的各功能单元可以全部集成在一个处理单元中,也可以是各单元分别单独作为一个单元,也可以两个或两个以上单元集成在一个单元中;上述集成的单元既可以采用硬件的形式实现,也可以采用硬件加软件功能单元的形式实现。
本领域普通技术人员可以理解:实现上述方法实施例的全部或部分步骤可以通过程序指令相关的硬件来完成,前述的程序可以存储于可读取存储介质中,该程序在执行时,执行包括上述方法实施例的步骤;而前述的存储介质包括:移动存储设备、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,Random Access Memory)、磁碟或者光盘等各种可以存储程序代码的介质。
或者,本发明上述集成的单元如果以软件功能模块的形式实现并作为独立的产品销售或使用时,也可以存储在一个可读取存储介质中。基于这样的理解,本发明实施例的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机、服务器、或者网络设备等)执行本发明各个实施例所述方法的全部或部分。而前述的存储介质包括:移动存储设备、ROM、RAM、磁碟或者光盘等各种可以存储程序代码的介质。
- 乘客输送机的安全装置以及乘客输送机的安全引导方法
- 乘客输送机排气装置、乘客输送机及乘客输送机排气方法