一种一维条码的边界筛选方法及设备与流程

文档序号:18010923发布日期:2019-06-26 00:03阅读:189来源:国知局
一种一维条码的边界筛选方法及设备与流程

本发明涉及一种一维条码的边界筛选方法及设备,属于条码识别技术领域。



背景技术:

条形码是由宽度不同、反射率不同的条和空,按照一定的编码规则(码制)编制成的,用以表达一组数字或字母符号信息的图形标识符.为了阅读出条形码所代表的信息,需要一套条形码识别系统,它由条形码扫描器、放大整形电路、译码接口电路和计算机系统等部分组成,即使用条码阅读机(条码扫描器又叫条码扫描枪或条码阅读器)扫描,得到一组反射光信号,此信号经光电转换后变为一组与线条、空白相对应的电子讯号,经解码后还原为相应的文数字,再传入电脑。条形码技术具有输入速度快、可靠性高、采集信息量大、灵活实用等优点。

目前设备由于光照、距离、条码对象背景等因素的干扰,采集的条码图像转换得到的ad数据会包括很多冗余杂波,这些冗余杂波通常出现在条码区域两侧会对条码识读产生不良影响,甚至导致条码扫描设备的解码失败。



技术实现要素:

为了解决上述现有技术中存在的问题,本发明提供一种条形码边界筛选方法对采集到的ad数据在条码边界判断阶段进行处理,减少错误边界的产生,从而提高解码的正确率。

本发明的技术方案如下:

技术方案一

一种条形码边界筛选方法,包括以下步骤:

获取条形码的灰度值的ad数据,进行所述条形码的边界判断,得到条形码的条码边界,将得到的所有条码边界在ad数据中的位置顺次记录在边界数组edge[]中;

根据边界数组edge[],获取所述ad数据每个上升阶段的峰值以及所述ad数据每个下降阶段的谷值,顺次记录在数组peak[]中;

根据数组peak[],计算所述ad数据中相邻的峰值和谷值之间的幅度,顺次记录在幅度数组amplitude[]中;

设定阈值t,对所述幅度数组amplitude[]进行判断,若amplitude[k]及相邻两个幅度amplitude[k-1]、amplitude[k+1]均小于设定阈值t,则认为条码边界edge[k]与edge[k+1]为冗余杂波产生的错误边界,将条码边界edge[k]与edge[k+1]赋值为0,否则保留对应边界原值;

删除边界数组edge[]中值为0的边界;

其中,amplitude[k]表示幅度数组amplitude[]中的第k个幅度数值,edge[k]表示边界数组edge[]中的第k个条码边界的位置。

进一步的,所述边界判断的步骤具体为:获取当前ad数据上升或者下降阶段的最小值m和幅度amp,在所有ad数据中取得最大值data_max,计算该阶段的幅度阈值t=max(39,min(199,(data_max-m)/16)),若amp>t,则认为该上升或者下降阶段存在条码边界;

其中,max(a,b)表示取a和b间的最大值,min(a,b)表示取a和b间的最小值。

进一步的,在所述数组peak[]中,peak[k]等于edge[k]所处位置对应的ad数据的数值;所述amplitude[k]=丨peak[k+1]-peak[k]丨。

进一步的,所述阈值t取幅度数组amplitude[]中部1/3部分数值的平均值的1/10。

技术方案二

一种条形码边界筛选设备,包括存储器和处理器,所述存储器存储有指令,所述指令适于由处理器加载并对扫描获得的条码图像执行以下步骤:

获取条形码的灰度值的ad数据,进行所述条形码的边界判断,得到条形码的条码边界,将得到的所有条码边界在ad数据中的位置顺次记录在边界数组edge[]中;

根据边界数组edge[],获取所述ad数据每个上升阶段的峰值以及所述ad数据每个下降阶段的谷值,顺次记录在数组peak[]中;

根据数组peak[],计算所述ad数据中相邻的峰值和谷值之间的幅度,顺次记录在幅度数组amplitude[]中;

设定阈值t,对所述幅度数组amplitude[]进行判断,若amplitude[k]及相邻两个幅度amplitude[k-1]、amplitude[k+1]均小于设定阈值t,则认为条码边界edge[k]与edge[k+1]为冗余杂波产生的错误边界,将条码边界edge[k]与edge[k+1]赋值为0,否则保留对应边界原值;

删除边界数组edge[]中值为0的边界;

其中,amplitude[k]表示幅度数组amplitude[]中的第k个幅度数值,edge[k]表示边界数组edge[]中的第k个条码边界的位置。

进一步的,所述边界判断的步骤具体为:获取当前ad数据上升或者下降阶段的最小值m和幅度amp,在所有ad数据中取得最大值data_max,计算该阶段的幅度阈值t=max(39,min(199,(data_max-m)/16)),若amp>t,则认为该上升或者下降阶段存在条码边界;

其中,max(a,b)表示取a和b间的最大值,min(a,b)表示取a和b间的最小值。

进一步的,在所述数组peak[]中,peak[k]等于edge[k]所处位置对应的ad数据的数值;所述amplitude[k]=丨peak[k+1]-peak[k]丨。

进一步的,所述阈值t取幅度数组amplitude[]中部1/3部分数值的平均值的1/10。

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

1、本发明对采集到的条形码的ad数据在条码边界判断阶段进行处理,减少错误边界的产生,从而提高解码的正确率。

2、本发明通过幅度数组amplitude[]中部数值计算阈值t,幅度数组amplitude[]中部数值才是实际的条形码中条与空之间的变换产生的幅度数据,避免了因为条形码两端空白区域产生的冗余杂波对阈值t取值造成影响。

附图说明

图1为本发明的流程图;

图2为本发明实施例中,获取到的ad数据的示例图;

图3为本发明实施例中,条形码的示例图;

图4为本发明实施例中,条形码的ad数据的波形图以及条码边界位置的示例图;

图5为本发明实施例中,条码边界经过筛选后的示例图。

具体实施方式

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

实施例一

参见图1和图2,一种条形码边界筛选方法,包括以下步骤:

获取条形码的灰度值的ad数据(如图2所示,图2为code39码的1500个ad数据),进行边界判断,得到条形码的条码边界(所述条码边界,指的是条形码中黑条与空白之间的边界),将得到的所有条码边界在ad数据中的位置顺次记录在边界数组edge[]中;例如,找到的第一个条码边界为第20个ad数据,则edge[1]=20;

根据边界数组edge[],获取所述ad数据每个上升阶段的峰值以及所述ad数据每个下降阶段的谷值,顺次记录在数组peak[]中;因为ad数据每个上升阶段的波峰或每个下降阶段的波谷就是条码边界所处的位置,所以ad数据每个上升阶段的峰值或每个下降阶段的谷值对应条码边界所处位置的ad数据的数值,例如edge[1]=20,而第20个ad数据的数值为3619,则peak[1]=3619;

根据数组peak[],计算所述ad数据中相邻的峰值和谷值之间的幅度,顺次记录在幅度数组amplitude[]中;

设定阈值t,对所述幅度数组amplitude[]进行判断,若amplitude[k]及相邻两个幅度amplitude[k-1]、amplitude[k+1]均小于设定阈值t,则认为条码边界edge[k]与edge[k+1]为冗余杂波产生的错误边界,将条码边界edge[k]与edge[k+1]赋值为0,否则保留对应边界原值;

删除边界数组edge[]中值为0的边界;生成新的边界数组,用于后续解码。

其中,amplitude[k]表示幅度数组amplitude[]中的第k个幅度数值,edge[k]表示边界数组edge[]中的第k个条码边界的位置。

本实施例对采集到的ad数据在条码边界判断阶段进行处理,减少冗余杂波产生的错误边界生,从而提高解码的正确率。

实施例二

进一步的,所述边界判断步骤具体为:获取当前ad数据上升或者下降阶段的最小值m和幅度amp,在所有ad数据中取得最大值data_max,计算该阶段的幅度阈值t=max(39,min(199,(data_max-m)/16)),若amp>t,则认为该上升或者下降阶段存在条码边界;max(a,b)表示取a和b间的最大值,min(a,b)表示取a和b间的最小值;具体参见图2,例如,第三行的最后一个数据3227到第四行的第六个数据3140,这是一个ad数据的下降阶段,这个下降阶段的最小值m是3140,幅度amp是87,在图2中所有的ad数据里,data_max=3739;按上述公式可得幅度阈值t=max(39,min(199,(3739-3140)/16))=39,因为这个阶段的幅度amp=89大于幅度阈值t=39,所以当前阶段存在条码边界。

进一步的,在所述数组peak[]中,peak[k]等于edge[k]所处位置对应的ad数据的数值;所述amplitude[k]=丨peak[k+1]-peak[k]丨;例如若peak[1]=3619,peak[2]=3016,则amplitude[1]=丨peak[2]-peak[1]丨=603。

进一步的,所述阈值t取幅度数组amplitude[]中部1/3部分数值的平均值的1/10,例如幅度数组amplitude[]内总共有21个数值,包括amplitude[0]、amplitude[1]、amplitude[2]……amplitude[20],则取amplitude[7]、amplitude[8]、amplitude[9]……amplitude[13]的平均值的1/10作为阈值t;具体参见图3,因为读取到的条形码左右为空白区,空白区内对应的ad数据容易产生杂波,所以取中间稳定ad数据的平均幅度值的1/10作为阈值t。

具体参见图3-图5,图3为code39条形码的扫描图,其包含的信息为*abc123*;图4中,上方的波形图为ad数据的变化曲线,下方的竖线表示的经过边界判断后得到的条码边界的位置,如图所示,ad数据的变化曲线波形振幅稳定的区域大致在中间位置,前面的杂波为条形码空白区的ad数据,图4中的条码边界为未判断各条码边界是否为冗余杂波得到的结果,杂波部分产生的条码边界在解码后译为“*”,使得code39错误解码为**abc123*;

在图5中,下方的竖线为条码边界经过判断是否为冗余杂波得到的结果,杂波部分产生的条码边界被过滤,过滤后的边界数组edge[]在解码后得到正确的结果*abc123*。

本实施例不仅具备实施例一的有益效果,还提出了通过幅度数组amplitude[]中部1/3的数值来计算阈值t,幅度数组amplitude[]中部数值才是实际的条形码中条与空之间的变换产生的幅度数据,避免了因为条形码两端空白区域产生的冗余杂波对阈值t取值造成影响。

实施例三

一种条形码边界筛选设备,包括存储器和处理器,所述存储器存储有指令,所述指令适于由处理器加载并对扫描获得的条码图像执行以下步骤:

获取条形码的灰度值的ad数据(如图2所示,图2为code39码的1500个ad数据),进行边界判断,得到条形码的条码边界(所述条码边界,指的是条形码中黑条与空白之间的边界),将得到的所有条码边界在ad数据中的位置顺次记录在边界数组edge[]中;例如,找到的第一个条码边界为第20个ad数据,则edge[1]=20;

根据边界数组edge[],获取所述ad数据每个上升阶段的峰值以及所述ad数据每个下降阶段的谷值,顺次记录在数组peak[]中;因为ad数据每个上升阶段的波峰或每个下降阶段的波谷就是条码边界所处的位置,所以ad数据每个上升阶段的峰值或每个下降阶段的谷值对应条码边界所处位置的ad数据的数值,例如edge[1]=20,而第20个ad数据的数值为3619,则peak[1]=3619;

根据数组peak[],计算所述ad数据中相邻的峰值和谷值之间的幅度,顺次记录在幅度数组amplitude[]中;

设定阈值t,对所述幅度数组amplitude[]进行判断,若amplitude[k]及相邻两个幅度amplitude[k-1]、amplitude[k+1]均小于设定阈值t,则认为条码边界edge[k]与edge[k+1]为冗余杂波产生的错误边界,将条码边界edge[k]与edge[k+1]赋值为0,否则保留对应边界原值;

删除边界数组edge[]中值为0的边界;生成新的边界数组,用于后续解码。

其中,amplitude[k]表示幅度数组amplitude[]中的第k个幅度数值,edge[k]表示边界数组edge[]中的第k个条码边界的位置。

本实施例对采集到的ad数据在条码边界判断阶段进行处理,减少冗余杂波产生的错误边界生,从而提高解码的正确率。

实施例四

进一步的,所述边界判断步骤具体为:获取当前ad数据上升或者下降阶段的最小值m和幅度amp,在所有ad数据中取得最大值data_max,计算该阶段的幅度阈值t=max(39,min(199,(data_max-m)/16)),若amp>t,则认为该上升或者下降阶段存在条码边界;max(a,b)表示取a和b间的最大值,min(a,b)表示取a和b间的最小值;具体参见图2,例如,第三行的最后一个数据3227到第四行的第六个数据3140,这是一个ad数据的下降阶段,这个下降阶段的最小值m是3140,幅度amp是87,在图2中所有的ad数据里,data_max=3739;按上述公式可得幅度阈值t=max(39,min(199,(3739-3140)/16))=39,因为这个阶段的幅度amp=89大于幅度阈值t=39,所以当前阶段存在条码边界。

进一步的,在所述数组peak[]中,peak[k]等于edge[k]所处位置对应的ad数据的数值;所述amplitude[k]=丨peak[k+1]-peak[k]丨;例如若peak[1]=3619,peak[2]=3016,则amplitude[1]=丨peak[2]-peak[1]丨=603。

进一步的,所述阈值t取幅度数组amplitude[]中部1/3部分数值的平均值的1/10,例如幅度数组amplitude[]内总共有21个数值,包括amplitude[0]、amplitude[1]、amplitude[2]……amplitude[20],则取amplitude[7]、amplitude[8]、amplitude[9]……amplitude[13]的平均值的1/10作为阈值t;具体参见图3,因为读取到的条形码左右为空白区,空白区内对应的ad数据容易产生杂波,所以取中间稳定ad数据的平均幅度值的1/10作为阈值t。

具体参见图3-图5,图3为code39条形码的扫描图,其包含的信息为*abc123*;图4中,上方的波形图为ad数据的变化曲线,下方的竖线表示的经过边界判断后得到的条码边界的位置,如图所示,ad数据的变化曲线波形振幅稳定的区域大致在中间位置,前面的杂波为条形码空白区的ad数据,图4中的条码边界为未判断各条码边界是否为冗余杂波得到的结果,杂波部分产生的条码边界在解码后译为“*”,使得code39错误解码为**abc123*;

在图5中,下方的竖线为条码边界经过判断是否为冗余杂波得到的结果,杂波部分产生的条码边界被过滤,过滤后的边界数组edge[]在解码后得到正确的结果*abc123*。

本实施例不仅具备实施例三的有益效果,还提出了通过幅度数组amplitude[]中部1/3的数值来计算阈值t,幅度数组amplitude[]中部数值才是实际的条形码中条与空之间的变换产生的幅度数据,避免了因为条形码两端空白区域产生的冗余杂波对阈值t取值造成影响。

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

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