一种快速定位Dotcode码的方法及其系统与流程

文档序号:26007651发布日期:2021-07-23 21:26阅读:444来源:国知局
一种快速定位Dotcode码的方法及其系统与流程

本发明涉及图像处理技术,尤其涉及一种快速定位dotcode码的方法及其系统。



背景技术:

dotcode码是一种点码,属于一种这一两年才在欧洲地区小范围使用的全新种类的二维码,常使用在公共领域。它将数据编码在一系列名义上不相连的点中,而这些点位于可能位置的规则网格内。dotcode码的数组是矩形的,在这矩形网格中只有一半是可能的点位置可以进行打印,类似棋盘上的深色正方形,这些点位置中大约56%最终按照数据编码规则打印。与其他点码和所有其他矩阵符号不同的是,这样会导致点在与符号矩形轮廓边缘成对角线的网格上对齐。dotcode码通过reed—solomon纠错算法进行错误纠正,它的设计能够容忍部分点的丢失或者多余、放置错误的点。因此,它的灵活性和高纠错能力使得它对那些需要使用条形码的安全性和持久性的行业很有吸引力。目前主要制造商正在将其添加至产品和包装中用于跟踪以及工作流管理解决方案,一些航运和邮政机构也已经开始在航运标签上使用dotcode码。

对dotcode图像进行解码还原出码所包含的数据的过程来说,如何实现定位是关键的一步,首先需要确定矩形网格中的一点,并且由该点出发寻找原始图像中的两个主点轴方向,即为定位。在dotcode码的国际符号标准中的参考解码算法里,公开了一种方法,通过找到一个闭合轨迹确定一个合适起始点的轮廓,然后利用快速傅里叶变换处理原始图像的一个正方形区域找出原始图像中的两个主点轴的方向确定点码所在区域和方向以进行后续进一步识别解码,但是这种方法存在着计算量较大,运算时间较长的问题,直接影响了dotcode码整个解码流程的效率。



技术实现要素:

为了解决上述技术问题,本发明提出一种快速定位dotcode码的方法及其系统,可以在避免快速傅里叶的大计算量的情况下,也能确定dotcode码的一个起始点,并且由该起始点出发精确的找出原始图像的两个主点轴的方向,能够实现快速高效的定位。

本发明的技术方案一:

一种快速定位dotcode码的方法,其特征在于,包括如下步骤:

s1:由包含dotcode码的原始图像任意点发出扫描线,并记录所述扫描线上的像素点灰度值。

s2:取所述扫描线上n个相邻像素点的灰度值,通过比对灰度值,获取灰度值增减或减增边界。

s3:对成对交替出现的一组相邻的减增或增减边界位置,计算边界中心点及当前方向的边界宽度。

s4:由所述边界中心点位置向多个方向发出扫描线,重复s2-s3步骤,寻找其他过渡边界,并进行多个方向的边界宽度计算,若各个方向的边界宽度相同,则所述边界中心点所在的像素点集合记为第一数据点;若各个方向的边界宽度不相同,则回到步骤s3。

s5:由所述第一数据点出发,进行多个方向上的扫描,按照步骤s2-s4的方法确定多个候选数据点。

s6:计算所述多个候选数据点分别和所述第一数据点的距离,选择距离最短的候选数据点作为第二数据点,所述第一数据点和第二数据点构成的直线记为45°方向,即第一主点轴方向。

s7:寻找所述45°方向直线上的所有数据点,以所述所有数据点分别作为原点,沿着垂直于所述45°方向直线的方向分别寻找同一条直线上的其他数据点,并记录其他数据点的中心点坐标。

s8:判断垂直于所述45°方向直线的每条直线上的各数据点之间的距离关系,若各个相邻数据点之间的最小距离不小于所述45°方向直线上的各个相邻数据点之间的最小距离,则所述直线方向是第二主点轴方向。

所述s3步骤中,中心点和宽度的计算公式为:

其中,x,y为中心点的位置坐标,(x0,y0),(x1,y1)分别为两个间隔点的位置坐标,w为宽度。

所述步骤s3中,当dotcode码为白底黑点时,选择减增边界作为目标边界,当dotcode码为黑底白点时,选择增减边界作为目标边界。

所述步骤s4中,当所述边界中心点所在的边界宽度和其他边界宽度不相等时,则所述边界中心点不是所述数据点的中心点,所述数据点的中心点位于,原点为所述边界中心点并且垂直于所述扫描线的直线上,所述直线方向上的边界中心点为所述数据点的中心点。

所述步骤s5中,若垂直于所述45°方向直线的直线上找不到其他数据点,或者该方向上的直线中,相邻数据点之间的最小距离小于所述45°方向直线上的各个相邻数据点之间的最小距离,则所述45°方向寻找错误,返回步骤s1,重新计算。

技术方案二

一种快速定位dotcode码的系统,其特征在于,包括存储器和处理器,所述存储器存储有指令,所述指令适于由处理器加载并执行以下步骤:

s1:由包含dotcode码的原始图像任意点发出扫描线,并记录所述扫描线上的像素点灰度值。

s2:取所述扫描线上n个相邻像素点的灰度值,通过比对灰度值,获取灰度值增减或减增边界。

s3:对成对交替出现的一组相邻的减增或增减边界位置,计算边界中心点及当前方向的边界宽度。

s4:由所述边界中心点位置向多个方向发出扫描线,重复s2-s3步骤,寻找其他过渡边界,并进行多个方向的边界宽度计算,若各个方向的边界宽度相同,则所述边界中心点所在的像素点集合记为第一数据点;若各个方向的边界宽度不相同,则回到步骤s3。

s5:由所述第一数据点出发,进行多个方向上的扫描,按照步骤s2-s4的方法确定多个候选数据点。

s6:计算所述多个候选数据点分别和所述第一数据点的距离,选择距离最短的候选数据点作为第二数据点,所述第一数据点和第二数据点构成的直线记为45°方向,即第一主点轴方向。

s7:寻找所述45°方向直线上的所有数据点,以所述所有数据点分别作为原点,沿着垂直于所述45°方向直线的方向分别寻找同一条直线上的其他数据点,并记录其他数据点的中心点坐标。

s8:判断垂直于所述45°方向直线的每条直线上的各数据点之间的距离关系,若各个相邻数据点之间的最小距离不小于所述45°方向直线上的各个相邻数据点之间的最小距离,则所述直线方向是第二主点轴方向。

所述s3步骤中,中心点和宽度的计算公式为:

其中,x,y为中心点的位置坐标,(x0,y0),(x1,y1)分别为两个间隔点的位置坐标,w为宽度。

所述步骤s3中,当dotcode码为白底黑点时,选择减增边界作为目标边界,当dotcode码为黑底白点时,选择增减边界作为目标边界。

所述步骤s4中,当所述边界中心点所在的边界宽度和其他边界宽度不相等时,则所述边界中心点不是所述数据点的中心点,所述数据点的中心点位于原点为所述边界中心点并且垂直于所述扫描线的直线上,所述直线方向上的边界中心点为所述数据点的中心点。

所述步骤s5中,若垂直于所述45°方向直线的直线上找不到其他数据点,或者该方向上的直线中,相邻数据点之间的最小距离小于所述45°方向直线上的各个相邻数据点之间的最小距离,则所述45°方向寻找错误,返回步骤s1,重新计算。

本发明具有如下有益效果:

1、本发明的一种快速定位dotcode码的方法及系统,采用寻找灰度值渐变的像素区域确定待选数据点的边界和边界中心,根据数据点的特殊结构筛选符合要求的数据点,再通过初始数据点搜寻其他方向上的数据点,最终根据数据点之间的距离关系确定两个主点轴方向,计算方法简单,运算量低,效率高;

2、本发明的一种快速定位dotcode码的方法及系统,无论dotcode码是白底黑点还是黑底白点,计算方法相同,适应性高;

3、本发明的一种快速定位dotcode码的方法及系统,对原始图像的门槛要求低,不需要经过图像转正和二值化,减少运算步骤。

附图说明

图1为本发明的一种快速定位dotcode码的方法流程图;

图2为dotcode码的主点轴方向示意图;

图3为本发明的一个实施例的原始图像;

图4为本发明的一个实施例的经过扫描确认的第一数据点示意图;

图5为本发明的一个实施例的确定数据点中心点示意图;

图6为本发明的一个实施例的确认的第二数据点示意图;

图7为本发明的一个实施例的经过定位的两条主点轴方向示意图;

图8为本发明的另一个实施例的错误寻找示意图;

图9为本发明的另一个实施例的错误寻找示意图。

具体实施方式

下面结合附图和具体实施例来对本发明进行详细的说明。

首先定义数据点,45°方向以及135°方向的主点轴概念:

数据点:是在图片上的一个像素点集合,该像素点集合可视为一个接近圆形的闭环点。在dotcode符号标准里的定义里,每个打印出来的点都用一个像素集合来表示,像素集合的形状大部分情况近似圆形,少部分情况下为八角形或正方形。

45°方向:由于dotcode码的数据点是在矩形网格中的可打印位置才可打印,并且行、列方向上的可打印位置是间隔排列的,基于该特点,矩形网格中的对角方向网格都为可打印位置,可能存在打印出来的数据点。因此规定其中一条对角方向即为dotcode码的45°方向。

135°方向:与45°方向成垂直的另一条网格对角线的方向即为dotcode码的135°方向。45°与135°两个方向合称为两个主点轴的方向,如图2所示,图中分别表明了45°方向和135°方向。

实施例一

如图1所示,一种快速定位dotcode码的方法,包括如下步骤:

s1:由包含dotcode码的原始图像任意点发出扫描线,并记录所述扫描线上的像素点灰度值;

扫描线方向不唯一,搜索方式也不唯一,可以采用自定义隔n(n为自然数)行方式进行搜索。在现实使用场景中,dotcode码不是理想化的规整的放置,如图3所示,所述原始图像中dotcode码是倾斜放置的。如图4所示,在本实施例中,扫描线为水平直线,从整幅图像的1/4处开始进行第一次扫描。

s2:取所述扫描线上n个相邻像素点的灰度值,通过比对灰度值,获取灰度值增减或减增边界。

其中所述增减或减增过渡边界是通过比较相邻像素点的灰度值得到的,若该组像素点灰度值依次呈现递增趋势,即图像相邻像素点从暗到亮过渡,则该组像素点称为增边界;若该组灰度值依次呈现递减趋势,即图像相邻像素点从亮到暗过渡,则该过渡部分称为减边界。

一组n个相邻像素点的灰度值可以用(g1,g2,g3,g4...gn-1,gn)来表示,当gn-1<gn时,图像相邻像素点从暗到亮过渡,当gn-1>gn时,图像相邻像素点从亮到暗过渡。

在本实施例中,如图4所示,可以观察到扫描线经过了两个数据点,根据灰度值的变化,在图中出现的了4个过渡边界。

s3:对成对交替出现的一组相邻的减增或增减边界位置,计算边界中心点及当前方向的边界宽度。一般选取第一组相邻的边界作为目标边界进行计算。

所述s3步骤中,通过边界提取算法选择灰度变化幅度最大位置作为边界位置,即gn-gn-1的差值最大时,第n个像素点所在位置为边界位置,在本实施例中,图像的灰度值分布比较清晰,在扫描线与数据点交错的地方是明显的白黑变化区域,灰度差值为255。

所述s3步骤中,中心点和宽度的计算公式为:

其中,x,y为中心点的位置坐标,(x0,y0),(x1,y1)分别为两个间隔点的位置坐标,w为宽度。这里是通过简单的点和距离计算公式即可计算出中心点坐标和宽度。

所述步骤s3中,当dotcode码为白底黑点时,选择减增边界作为目标边界,当dotcode码为黑底白点时,选择增减边界作为目标边界。

在对dotcode进行定位前,需要判断dotcode码的类型,因为类型不同,作为数据点的边界灰度变化也是不同的。判断dotcode码的类型的方法有多种,常用的方法可以通过计算扫描线上连续出现的最短白色像素点集合和最短黑色像素点集合的关系来确定,当最短白色像素点集合大于最短黑色像素点集合,则当前dotcode码为白底黑点,反之为黑底白点。在现实运用中,大部分都是用白底黑点格式,少部分特殊场景使用黑底白点格式。也可以默认采用白底黑点格式来进行定位,当多次定位失败时采用黑底白点格式重新尝试定位。在本实施例中,dotcode码为白底黑点类型。

s4:由所述边界中心点位置向多个方向发出扫描线,重复s2-s3步骤,寻找其他过渡边界,并进行多个方向的边界宽度计算,若各个方向的边界宽度相同,则所述边界中心点所在的像素点集合记为第一数据点;若各个方向的边界宽度不相同,则回到步骤s3;

由于dotcode码的每个打印出来的像素阵列是近似圆形、正方形或者八角形的形状,根据这些闭环几何图形的特性,可以对已经计算得到的边界中心点进行多个方向的确认是否存在这些几何图形的几何特征。例如:可以由该中心点位置向外扩展寻找相邻像素点的从亮到暗或者从暗到亮的过渡,然后进行多个方向的边界宽度计算,如果多个方向都具有相同宽度,则判断该点是一个数据点的中心点位置。

所述步骤s4中,当所述边界中心点所在的边界宽度和其他边界宽度不相等时,则所述边界中心点不是所述数据点的中心点,所述数据点的中心点位于原点为所述边界中心点并且垂直于所述扫描线的直线上,所述直线方向上的边界中心点为所述数据点的中心点。

某些情况下,扫描线虽然经过了数据点,但没有经过数据点的中心,此时需要根据边界中心点来找到真正的数据点的中心。如图5所示,扫描线与数据点相交于ab两点,因为没有经过真正的中心点,所有ab的边界宽度会小于其他边界宽度,此时以ab边界中心点为原点,作垂直于ab的直线,得到两个边界点cd,cd的中心点o即为真正的数据点的中心点。这里依然是通过简单地点线关系计算可以得到,不再详述。

s5:由所述第一数据点出发,进行多个方向上的扫描,按照步骤s2-s4的方法确定多个候选数据点。

s6:计算所述多个候选数据点分别和所述第一数据点的距离,选择距离最短的候选数据点作为第二数据点,所述第一数据点和第二数据点构成的直线记为45°方向,即第一主点轴方向。

如图6所示,途中方框点即为所述第一数据点,通过扫描可以获得其周边的多个候选数据点。在所述s5步骤中可以获得所述多个候选数据点的中心点坐标,分别计算与所述第一数据点的中心点坐标距离,这里通过简单的点线关系即可获得。经过计算,图中圆圈选取的数据点距离最近,即为第二数据点,所述第一数据点和所述第二数据点之间连线构成的直线即为45°方向。

s7:寻找所述45°方向直线上的所有数据点,以所述所有数据点分别作为原点,沿着垂直于所述45°方向直线的方向分别寻找同一条直线上的其他数据点,并记录其他数据点的中心点坐标。

s8:判断垂直于所述45°方向直线的每条直线上的各数据点之间的距离关系,若各个相邻数据点之间的最小距离不小于所述45°方向直线上的各个相邻数据点之间的最小距离,则所述直线方向是第二主点轴方向。

如图7所示,所述45°方向直线上的各个数据点作垂直于所述45°方向的直线,可得到数个直线,每条直线上按照s2-s4的方法寻找并计算相邻数据点之间的距离,同时也要计算45°直线上各个数据点之间的最小距离,一般即为第一数据点和第二数据点之间的距离。各个直线上各个相邻数据点之间的最小距离不小于所述45°方向直线上的各个相邻数据点之间的最小距离,所述垂直直线方向为135°方向。

所述步骤s5中,若垂直于所述45°方向直线的直线上找不到其他数据点,或者该方向上的直线中,相邻数据点之间的最小距离小于所述45°方向直线上的各个相邻数据点之间的最小距离,则所述45°方向寻找错误,返回步骤s1,重新计算。

本发明的一种快速定位dotcode码的方法及系统,采用寻找灰度值渐变的像素区域确定待选数据点的边界和边界中心,根据数据点的特殊结构筛选符合要求的数据点,再通过初始数据点搜寻其他方向上的数据点,最终根据数据点之间的距离关系确定两个主点轴方向,计算方法简单,运算量低,效率高;无论dotcode码是白底黑点还是黑底白点,计算方法相同,适应性高;对原始图像的门槛要求低,不需要经过图像转正和二值化,减少运算步骤。

实施例二

本实施例描述s7-s8步骤方向寻找错误的情况:从所述45°方向直线上的每一个数据点出发,垂直于直线方向上去查找其他数据点,查找数据点依然采用s2-s4的方法,多个方向确认其宽度,并且此时由于已经存在所述45°方向直线,后续的数据点的宽度和所述45°方向直线上的数据点的宽度应该相一致或者相近,才能判断是数据点。此时分情况:

第一种情况,从所述45°方向直线上的每个数据点出发,其垂直方向都找不到第二个数据点,即垂直所述45°方向直线方向上不存在其他数据点直线,此时可以确定所述45°方向直线是错误的,重新查找;

第二种情况,若从所述45°方向直线上的某一个数据点出发,若找到了其垂直方向的第二个数据点,并且该垂直方向上存在一条数据点直线,此时需要进一步确认所述45°方向直线方向的正确性。由第二个数据点出发,按照所述45°方向直线去查找是否该方向同样存在数据点直线。

如图8所示,图像从上至下进行扫描时,选中的第一数据点为图中方框中的点,此时经过多角度方向扫描时,筛选点与点间距较小的作为所述45°方向上的数据点,即为图中圆圈处的数据点,作为第二数据点,两点方向作为所述45°方向,然后对其垂直方向进行扫描,查找其他数据点。

如图9所示,从所述45°方向直线上一数据点出发作垂直直线,获得一数据点,即图中方框所选的数据点记为第三数据点,以所述第三数据点作平行于所述45°直线的直线,所述平行直线上不存在其他好点,此时认为所述45°方向直线查找错误,进一步判断可以由所述第三数据点出发,按照查找所述45°方向的步骤即s5-s6,,进行多个角度方向上的扫描查找与所述第三数据点距离最近的其他数据点,如果在区别于所述45°方向,在其他角度方向上找到间距最小的数据点,比如图中圆圈处的数据点,此时可以完全确定所述45°方向查找错误。

本发明的一种快速定位dotcode码的方法及系统,采用寻找灰度值渐变的像素区域确定待选数据点的边界和边界中心,根据数据点的特殊结构筛选符合要求的数据点,再通过初始数据点搜寻其他方向上的数据点,最终根据数据点之间的距离关系确定两个主点轴方向,计算方法简单,运算量低,效率高;无论dotcode码是白底黑点还是黑底白点,计算方法相同,适应性高;对原始图像的门槛要求低,不需要经过图像转正和二值化,减少运算步骤。

实施例三

一种快速定位dotcode码的系统,其特征在于,包括存储器和处理器,所述存储器存储有指令,所述指令适于由处理器加载并执行以下步骤:

s1:由包含dotcode码的原始图像任意点发出扫描线,并记录所述扫描线上的像素点灰度值。

s2:取所述扫描线上n个相邻像素点的灰度值,通过比对灰度值,获取灰度值增减或减增边界。

s3:对成对交替出现的一组相邻的减增或增减边界位置,计算边界中心点及当前方向的边界宽度。

s4:由所述边界中心点位置向多个方向发出扫描线,重复s2-s3步骤,寻找其他过渡边界,并进行多个方向的边界宽度计算,若各个方向的边界宽度相同,则所述边界中心点所在的像素点集合记为第一数据点;若各个方向的边界宽度不相同,则回到步骤s3。

s5:由所述第一数据点出发,进行多个方向上的扫描,按照步骤s2-s4的方法确定多个候选数据点。

s6:计算所述多个候选数据点分别和所述第一数据点的距离,选择距离最短的候选数据点作为第二数据点,所述第一数据点和第二数据点构成的直线记为45°方向,即第一主点轴方向。

s7:寻找所述45°方向直线上的所有数据点,以所述所有数据点分别作为原点,沿着垂直于所述45°方向直线的方向分别寻找同一条直线上的其他数据点,并记录其他数据点的中心点坐标。

s8:判断垂直于所述45°方向直线的每条直线上的各数据点之间的距离关系,若各个相邻数据点之间的最小距离不小于所述45°方向直线上的各个相邻数据点之间的最小距离,则所述直线方向是第二主点轴方向。

所述s3步骤中,中心点和宽度的计算公式为:

其中,x,y为中心点的位置坐标,(x0,y0),(x1,y1)分别为两个间隔点的位置坐标,w为宽度。

所述步骤s3中,当dotcode码为白底黑点时,选择减增边界作为目标边界,当dotcode码为黑底白点时,选择增减边界作为目标边界。

所述步骤s4中,当所述边界中心点所在的边界宽度和其他边界宽度不相等时,则所述边界中心点不是所述数据点的中心点,所述数据点的中心点位于原点为所述边界中心点并且垂直于所述扫描线的直线上,所述直线方向上的边界中心点为所述数据点的中心点。

所述步骤s5中,若垂直于所述45°方向直线的直线上找不到其他数据点,或者该方向上的直线中,相邻数据点之间的最小距离小于所述45°方向直线上的各个相邻数据点之间的最小距离,则所述45°方向寻找错误,返回步骤s1,重新计算。

本发明的一种快速定位dotcode码的方法及系统,采用寻找灰度值渐变的像素区域确定待选数据点的边界和边界中心,根据数据点的特殊结构筛选符合要求的数据点,再通过初始数据点搜寻其他方向上的数据点,最终根据数据点之间的距离关系确定两个主点轴方向,计算方法简单,运算量低,效率高;无论dotcode码是白底黑点还是黑底白点,计算方法相同,适应性高;对原始图像的门槛要求低,不需要经过图像转正和二值化,减少运算步骤。

以上所述仅为本发明的实施例,并非因此限制本发明的专利范围,凡是利用本发明说明书及附图内容所作的等效结构或等效流程变换,或直接或间接运用在其他相关的技术领域,均同理包含在本发明的专利保护范围内。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1