CN109657515B - 一种一维条形码的解码方法及设备 - Google Patents
一种一维条形码的解码方法及设备 Download PDFInfo
- Publication number
- CN109657515B CN109657515B CN201811548245.2A CN201811548245A CN109657515B CN 109657515 B CN109657515 B CN 109657515B CN 201811548245 A CN201811548245 A CN 201811548245A CN 109657515 B CN109657515 B CN 109657515B
- Authority
- CN
- China
- Prior art keywords
- data
- boundary
- bar code
- decoding
- original
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06K—GRAPHICAL DATA READING; PRESENTATION OF DATA; RECORD CARRIERS; HANDLING RECORD CARRIERS
- G06K7/00—Methods or arrangements for sensing record carriers, e.g. for reading patterns
- G06K7/10—Methods or arrangements for sensing record carriers, e.g. for reading patterns by electromagnetic radiation, e.g. optical sensing; by corpuscular radiation
- G06K7/14—Methods or arrangements for sensing record carriers, e.g. for reading patterns by electromagnetic radiation, e.g. optical sensing; by corpuscular radiation using light without selection of wavelength, e.g. sensing reflected white light
- G06K7/1404—Methods for optical code recognition
- G06K7/1408—Methods for optical code recognition the method being specifically adapted for the type of code
- G06K7/1413—1D bar codes
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06K—GRAPHICAL DATA READING; PRESENTATION OF DATA; RECORD CARRIERS; HANDLING RECORD CARRIERS
- G06K7/00—Methods or arrangements for sensing record carriers, e.g. for reading patterns
- G06K7/10—Methods or arrangements for sensing record carriers, e.g. for reading patterns by electromagnetic radiation, e.g. optical sensing; by corpuscular radiation
- G06K7/14—Methods or arrangements for sensing record carriers, e.g. for reading patterns by electromagnetic radiation, e.g. optical sensing; by corpuscular radiation using light without selection of wavelength, e.g. sensing reflected white light
- G06K7/1404—Methods for optical code recognition
- G06K7/1439—Methods for optical code recognition including a method step for retrieval of the optical code
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06K—GRAPHICAL DATA READING; PRESENTATION OF DATA; RECORD CARRIERS; HANDLING RECORD CARRIERS
- G06K7/00—Methods or arrangements for sensing record carriers, e.g. for reading patterns
- G06K7/10—Methods or arrangements for sensing record carriers, e.g. for reading patterns by electromagnetic radiation, e.g. optical sensing; by corpuscular radiation
- G06K7/14—Methods or arrangements for sensing record carriers, e.g. for reading patterns by electromagnetic radiation, e.g. optical sensing; by corpuscular radiation using light without selection of wavelength, e.g. sensing reflected white light
- G06K7/1404—Methods for optical code recognition
- G06K7/146—Methods for optical code recognition the method including quality enhancement steps
Landscapes
- Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- Toxicology (AREA)
- Health & Medical Sciences (AREA)
- Electromagnetism (AREA)
- General Health & Medical Sciences (AREA)
- Artificial Intelligence (AREA)
- Computer Vision & Pattern Recognition (AREA)
- General Physics & Mathematics (AREA)
- Theoretical Computer Science (AREA)
- Quality & Reliability (AREA)
- Printers Characterized By Their Purpose (AREA)
- Character Input (AREA)
Abstract
本发明涉及一种一维条形码的解码方法,包括以下步骤:通过一维CCD传感器获取一组包含所要识别的条码区域的原始AD数据;通过边界识别算法,找到“条”与“空”的边界,形成边界索引;搜寻条码区域,根据边界索引,确定原始AD数据内的“条”与“空”的宽度,将“条”与“空”的宽度比例与各条码的起始符和终止符进行匹配,判断是何种条码以及扫描方向,生成条码区域;译码,将条码区域送入译码模块进行解码处理,若译码成功,则结束,若译码失败,则进入数据放大步骤;对译码失败的条码区域进行放大,将该条码区域内数据的点数放大一定倍数,再依次进行搜寻条码区域和译码;若译码成功,则进入步骤结束,若译码任然失败,则放弃此组原始AD数据。
Description
技术领域
本发明涉及一种一维条形码的解码方法及设备,属于条码识别技术领域。
背景技术
条码技术是计算机技术与信息技术基础上发展起来的集编码,印刷,数据采集与识别处理的新兴技术,条码技术由于其识别快速准确而且可靠,成本低廉等优势广泛应用于商业,仓储物流管理,工业控制以及移动支付领域,并且势必在逐渐兴起的“物联网”应用中发挥重大的作用。
目前被广泛使用的条码包括一维条码与二维条码;一维条码又称为线性条码,是由平行排列的多个“条”和“空”单元组成,线性条码依靠条和空的不同宽度和位置来表示;二维条码则是由一定的规律在二维方向上分布黑白相间的特定几何图形组成,其可以在二维方向上表达信息。
在条码识读的过程中,通常是利用扫描设备对条码进行扫描以获取反射的光信号,或者是利用摄影设备对条码进行拍摄,以获取条码的图像,通过对反射的光信号或者对条码图像进行识别处理来获取条码信息;现有技术在识别高密度条码的情况下,识别速度慢,稳定性差,容易出现错误解码。
发明内容
为了解决上述现有技术中存在的问题,本发明提供一种解码方法,可用于一维条形码的快速识别,并且对高密度条码识读性能良好,且具有一定的景深。
本发明的技术方案如下:
技术方案一:
一种一维条形码的解码方法,包括以下步骤:
S1、数据采集,通过一维CCD传感器获取一组包含所要识别的条码区域的原始AD数据;
S2、建立边界索引,通过边界识别算法,找到“条”与“空”的边界,并记录每个“条”与“空”的边界在原始AD数据中的位置,形成边界索引;
S3、搜寻条码区域,根据各所述边界索引,确定原始AD数据内的“条”与“空”的宽度,将“条”与“空”的宽度比例与各条码的起始符和终止符进行匹配,判断是何种条码以及扫描方向,生成条码区域;
S4、译码,将所述条码区域送入译码模块进行解码处理,若译码成功,则进入S6步骤,若译码失败,则进入S5步骤;
S5、对译码失败的条码区域进行数据放大处理,将该条码区域内的原始AD数据的点数放大一定倍数,再依次进行上述S2至S4步骤;若译码成功,则进入步骤S6,若译码任然失败,则放弃此组原始AD数据;
S6、输出译码成功后的条码信息。
进一步的,通过一维CCD传感器获取的每组包含所要识别的条码区域的原始AD数据的数据点数为1500点;所述边界识别算法具体为:
对原始AD数据进行数据统计,获取内部最大数值vMax以及最小数值vMin;
计算用于判定边界幅度的波形幅度参数vA,vA=(vMax-vMin)>>n,“>>”为移位运算符,n为一调整精度的参数,为自然数;
记录原始AD数据中连续下降的累计幅度,遇到第一个上升的点终止,将累计下降幅度与波形幅度参数vA进行比较,若累计下降幅度大于波形幅度参数vA且连续下降的起点和终点的水平距离大于p,p取2~10,则判断当前位置是一个“条”与“空”分界的降边界;记录原始AD数据中连续上升的累计幅度,遇到第一个下降的点终止,将累计上升幅度与波形幅度参数vA进行比较,若累计上升幅度满大于波形幅度参数vA且连续上升的起点和终点的水平距离大于p,p取2~10,则判断当前位置是一个“条”与“空”分界的升边界;记录找到的升边界与降边界在原始AD数据中的位置,形成边界索引。
进一步的,条码区域搜寻步骤具体为:
将边界索引送入条码区域搜寻模块,根据相邻的升边界与降边界的间距,计算“条”与“空”的宽度,相邻的升边界到降边界的距离为“空”的宽度,相邻的降边界到升边界的距离为“条”的宽度;
搜索与每种条码起始符和终止符相匹配的“条空”比例组合,确定原始AD数据内的条码种类以及条码区域,并通过起始符和终止符的方向,确定条码的扫描方向。
进一步的,所述译码模块的具体工作过程为:根据各条码区域内的条码种类将各条码区域送入对应条码的译码模块中,将条码区域边缘的“条空”组合转换为对应的符号数据,译码模块通过对每种码制的条码码词对所述符号数据进行编码处理,再利用排序的方式进行译码处理。
进一步的,所述数据放大处理的具体步骤为:先将条码区域内的数据乘以一定倍数得到放大后的数据,再对放大后的数据采用线性插值的方式拟合原数据函数并获取更多的拟合数据点数;所述线性插值的方式具体如下:
获取乘以一定倍数得到的数据上的数据区间[x0,x1],设拟合数据的函数为F(x,y)=(y-y0)/(y1-y0)-(x-x0)/(x1-x0)=0,令ai=(xi-x0)/(x1-x0),添加不同的xi取值算出ai,再求出yi,即可得到复数个在(x0,y0),(x1,y1)之间插值(xi,yi)。
(y-y0)/(y1-y0)=(x-x0)/(x1-x0),令ai=(xi-x0)/(x1-x0),添加不同的xi取值算出ai,再求出yi,即可得到复数个在(x0,y0),(x1,y1)之间插值(xi,yi)。
技术方案二:
一种一维条形码的解码设备,包括存储器和处理器,所述存储器存储有指令,所述指令适于由处理器加载并对扫描获得的条码图像执行以下步骤:
S1、数据采集,通过一维CCD传感器获取一组包含所要识别的条码区域的原始AD数据;
S2、建立边界索引,通过边界识别算法,找到“条”与“空”的边界,并记录每个“条”与“空”的边界在原始AD数据中的位置,形成边界索引;
S3、搜寻条码区域,根据各所述边界索引,确定原始AD数据内的“条”与“空”的宽度,将“条”与“空”的宽度比例与各条码的起始符和终止符进行匹配,判断是何种条码以及扫描方向,生成条码区域;
S4、译码,将所述条码区域送入译码模块进行解码处理,若译码成功,则进入S6步骤,若译码失败,则进入S5步骤;
S5、对译码失败的条码区域进行数据放大处理,将该条码区域内的原始AD数据的点数放大一定倍数,再依次进行上述S2至S4步骤;若译码成功,则进入步骤S6,若译码任然失败,则放弃此组原始AD数据;
S6、输出译码成功后的条码信息。
进一步的,通过一维CCD传感器获取的每组包含所要识别的条码区域的原始AD数据的数据点数为1500点;所述边界识别算法具体为:
对原始AD数据进行数据统计,获取内部最大数值vMax以及最小数值vMin;
计算用于判定边界幅度的波形幅度参数vA,vA=(vMax-vMin)>>n,“>>”为移位运算符,n为一调整精度的参数,为自然数;
记录原始AD数据中连续下降的累计幅度,遇到第一个上升的点终止,将累计下降幅度与波形幅度参数vA进行比较,若累计下降幅度大于波形幅度参数vA且连续下降的起点和终点的水平距离大于p,p取2~10,则判断当前位置是一个“条”与“空”分界的降边界;记录原始AD数据中连续上升的累计幅度,遇到第一个下降的点终止,将累计上升幅度与波形幅度参数vA进行比较,若累计上升幅度满大于波形幅度参数vA且连续上升的起点和终点的水平距离大于p,p取2~10,则判断当前位置是一个“条”与“空”分界的升边界;记录找到的升边界与降边界在原始AD数据中的位置,形成边界索引。
进一步的,条码区域搜寻步骤具体为:
将边界索引送入条码区域搜寻模块,根据相邻的升边界与降边界的间距,计算“条”与“空”的宽度,相邻的升边界到降边界的距离为“空”的宽度,相邻的降边界到升边界的距离为“条”的宽度;
搜索与每种条码起始符和终止符相匹配的“条空”比例组合,确定原始AD数据内的条码种类以及条码区域,并通过起始符和终止符的方向,确定条码的扫描方向。
进一步的,所述译码模块的具体工作过程为:根据各条码区域内的条码种类将各条码区域送入对应条码的译码模块中,将条码区域边缘的“条空”组合转换为对应的符号数据,译码模块通过对每种码制的条码码词对所述符号数据进行编码处理,再利用排序的方式进行译码处理。
进一步的,所述数据放大处理的具体步骤为:先将条码区域内的数据乘以一定倍数得到放大后的数据,再对放大后的数据采用线性插值的方式拟合原数据函数并获取更多的拟合数据点数;所述线性插值的方式具体如下:
获取乘以一定倍数得到的数据上的数据区间[x0,x1],设拟合数据的函数为F(x,y)=(y-y0)/(y1-y0)-(x-x0)/(x1-x0)=0,令ai=(xi-x0)/(x1-x0),添加不同的xi取值算出ai,再求出yi,即可得到复数个在(x0,y0),(x1,y1)之间插值(xi,yi)。
(y-y0)/(y1-y0)=(x-x0)/(x1-x0),令ai=(xi-x0)/(x1-x0),添加不同的xi取值算出ai,再求出yi,即可得到复数个在(x0,y0),(x1,y1)之间插值(xi,yi)。
本发明具有如下有益效果:
1、本发明利用先识别条码边界的方法,排除对非条码区域的干扰,只在条码区域内搜寻条形码并进行解码,提高解码效率;并通过数据放大处理提高对高密度条形码的识读能力。
2、通过数据的最大值和最小值判断数据的升降幅度,并计算出一用于对比波形幅度的波形幅度参数vA,通过波形幅度参数vA来判断数据的升降幅度,能够准确高效的识别数据内“条空”间的升降边界。
3、排序的方式进行译码处理,比通过直接比较模块宽度解码概率更高,并且通过排序可以减少各个条空与标准条空之间宽度比例的计算与判断,提高效率。
4、数据乘以一定倍数进行放大后,通过线性插值的方法拟合放大后的数据函数,并且通过增添更多的插值提增加数据的更多细节,提高高密度条形码的识读能力。
附图说明
图1为本发明解码流程图;
图2为一维CCD获取到的原始AD数据的示意波形图;
图3为边界索引与原始AD数据对照的示意图;
图4为一Code39条形码的示意图;
图5为升边界和降边界在条形码中位置的示意图。
具体实施方式
下面结合附图和具体实施例来对本发明进行详细的说明。
实施例一
参见图1-5,一种一维条形码的解码方法,包括以下步骤:
S1、数据采集,通过一维CCD传感器获取一组包含所要识别的条码区域的原始AD数据(如图2所示);
S2、建立边界索引,通过边界识别算法,找到“条”与“空”的边界,并记录每个“条”与“空”的边界在原始AD数据中的位置,形成边界索引(如图3所示,原始AD数据下方的方形波段即为找到的边界索引);
S3、搜寻条码区域,根据各所述边界索引,确定原始AD数据内的“条”与“空”的宽度,将“条”与“空”的宽度比例与各条码的起始符和终止符进行匹配,判断是何种条码以及扫描方向,生成条码区域;如图4,在理想情况下,找到的边界都正确且没有干扰的情况下,找到的第一个边界的位置即为条码的起始位置,找到的最后一个边界的位置即为条码的终止位置,对于每种码制有其特定的起始符终止符编码模式,以图中Code39条码为例,其起始符终止符均是以五条四空相互间隔组成的且正向的情况下各个模块比例为:121121211;通过计算五条四空的宽度比例发现该条码可能为Code39,则继续向后寻找终止符;如果终止符存在则记录终止符最后一个边界位置,起始符第一个边界位置到终止符最后一个边界位置即为码区域;
S4、译码,将所述条码区域送入译码模块进行解码处理,不同的码制对数据的编码模式不同,译码主要根据条空宽度比例,以及编码格式进行,如在Code39条码中其标识一个数据需要五条四空,每个数据编码之间插入一个间隔,其编码的条空比例为:211211112;若译码成功,则进入S6步骤,若译码失败,则进入S5步骤;
S5、对译码失败的条码区域进行数据放大处理,将该条码区域内的原始AD数据的点数放大一定倍数,再依次进行上述S2至S4步骤;若译码成功,则进入步骤S6,若译码任然失败,则放弃此组原始AD数据;
S6、输出译码成功后的条码信息。
本实施例通过边界识别算法寻找条码内的条码边界信息,形成边界索引,通过边界索引判断条码中的条码区域,再对条码区域内的条码进行译码处理,排除条码区域外的干扰因素,提高译码效率和准确度;译码失败的数据进行数据放大处理后进行二次译码,降低解码的失误率。
实施例二
进一步的,通过一维CCD传感器获取的每组包含所要识别的条码区域的原始AD数据的数据点数为1500点;所述边界识别算法具体为:
对原始AD数据进行数据统计,获取内部最大数值vMax以及最小数值vMin;
计算用于判定边界幅度的波形幅度参数vA,vA=(vMax-vMin)>>n,“>>”为移位运算符,n为一调整精度的参数,为自然数,n可根据所读条码的质量以及寻找边界的精度适当调整,n值越大要求的精度就越高;
记录原始AD数据中连续下降的累计幅度,遇到第一个上升的点终止,将累计下降幅度与波形幅度参数vA进行比较,若累计下降幅度大于波形幅度参数vA且连续下降的起点和终点的水平距离大于p,p取2~10,则判断当前位置是一个“条”与“空”分界的降边界;记录原始AD数据中连续上升的累计幅度,遇到第一个下降的点终止,将累计上升幅度与波形幅度参数vA进行比较,若累计上升幅度满大于波形幅度参数vA且连续上升的起点和终点的水平距离大于p,p取2~10,则判断当前位置是一个“条”与“空”分界的升边界;以下说明判断过程:
根据得到的波形幅度参数vA开始遍历1500点数据,记(A1,A2)为一对数据,A1位置在A2位置之前;起始时,A1为1500点数据中的第一个数据的值,A2为1500点中的第二个数据的值;所述遍历方式如下:若A1等于A2,则向后移动A2的位置并更新A2的值,再与A1进行比较,若相等则继续向后移动A2,直到A1不等于A2,A1不等于A2只存在两种情况需要分析,A1>A2或者A1<A2,如果A1>A2,则进行下降趋势的边界识别,更新A1的值与当前A2的值相等,且更新A1的位置与当前A2的位置相同,向后移动A2的位置并更新A2的值,如果A1>A2则继续移动A2位置,保持A1的位置和数值不变,并记录A1与A2值之间的差值的绝对值K;直到A2>=A1时停止,此时开始计算K与vA之间的关系,如果K>vA则继续计算A1与A2之间距离的关系,如果A1与A2之间的位置相差大于p(p为一个用于限制条空宽度的参数,可以取2,3,4等,用来保证条空宽度大于一定值,防止条码损坏时,条内出现白丝,影响识别)则记录A1的位置入边界索引信息,认为A1所处位置为一个降边界的位置;如果A1<A2,则进行上升趋势的边界识别,更新A1的值与当前A2的值相等,且更新A1的位置与当前A2的位置相同,向后移动A2的位置并更新A2的值,如果A1<A2则继续移动A2位置,保持A1的位置和数值不变,并记录A1与A2值之间的差值的绝对值K;直到A2<=A1时停止,此时开始计算K与vA之间的关系,如果K>vA则继续计算A1与A2之间距离的关系,如果A1与A2之间的位置相差大于p则记录A1的位置入边界索引信息,认为A1所处位置为一个升边界的位置;
记录找到的升边界与降边界在原始AD数据中的位置,形成边界索引:升边界与降边界的位置参见图5。
进一步的,条码区域搜寻步骤具体为:
将边界索引送入条码区域搜寻模块,根据相邻的升边界与降边界的间距,计算“条”与“空”的宽度,相邻的升边界到降边界的距离为“空”的宽度,相邻的降边界到升边界的距离为“条”的宽度;
搜索与每种条码起始符和终止符相匹配的“条空”比例组合,确定原始AD数据内的条码种类以及条码区域,并通过起始符和终止符的方向,确定条码的扫描方向,如Code39:起始符和终止符均为比例为“121121211”的“条空”组合,反向的情况下搜索到的比例恰好相反为“112121121”。
进一步的,所述译码模块的具体工作过程为:根据各条码区域内的条码种类将各条码区域送入对应条码的译码模块中,将条码区域边缘的“条空”组合转换为对应的符号数据,既将“条空”转换为0和1的字符串,译码模块通过对每种码制的条码码词对上述字符串进行编码处理,再利用排序的方式进行译码处理。
进一步的,所述数据放大处理的具体步骤为:先将条码区域内的数据乘以一定倍数得到放大后的数据,再对放大后的数据采用线性插值的方式拟合原数据函数并获取更多的拟合数据点数;所述线性插值的方式具体如下:
获取乘以一定倍数得到的数据上的数据区间[x0,x1],设拟合数据的函数为F(x,y)=(y-y0)/(y1-y0)-(x-x0)/(x1-x0)=0,令ai=(xi-x0)/(x1-x0),添加不同的xi取值算出ai,再求出yi,即可得到复数个在(x0,y0),(x1,y1)之间插值(xi,yi)。(y-y0)/(y1-y0)=(x-x0)/(x1-x0),令ai=(xi-x0)/(x1-x0),添加不同的xi取值算出ai,再求出yi,即可得到复数个在(x0,y0),(x1,y1)之间插值(xi,yi)。
本实施例不仅具备实施例一的优点,还提出了一种具体的边界识别算法,通过数据的最大值和最小值和参数计算模块计算出一波形幅度参数vA,根据数据上升幅度和下降幅度与波形幅度参数vA的对比,判断出数据内的升边界和降边界,再通过识别升边界和降边界内的条空组合判断条码类型和条码区域,最后再进行解码处理。通过升边界和降边界的判定提高识别条码区域的准确度。
译码过程采用排序的方式进行译码,可以减少各个条空与标准条空之间宽度比例的计算与判断,提高效率。
通过线性插值的方式增添放大后的数据点数,增加数据的更多细节。
实施例三
参见图1-5,一种一维条形码的解码设备,包括存储器和处理器,所述存储器存储有指令,所述指令适于由处理器加载并对扫描获得的条码图像执行以下步骤:
S1、数据采集,通过一维CCD传感器获取一组包含所要识别的条码区域的原始AD数据(如图2所示);
S2、建立边界索引,通过边界识别算法,找到“条”与“空”的边界,并记录每个“条”与“空”的边界在原始AD数据中的位置,形成边界索引(如图3所示,原始AD数据下方的方形波段即为找到的边界索引);
S3、搜寻条码区域,根据各所述边界索引,确定原始AD数据内的“条”与“空”的宽度,将“条”与“空”的宽度比例与各条码的起始符和终止符进行匹配,判断是何种条码以及扫描方向,生成条码区域;如图4,在理想情况下,找到的边界都正确且没有干扰的情况下,找到的第一个边界的位置即为条码的起始位置,找到的最后一个边界的位置即为条码的终止位置,对于每种码制有其特定的起始符终止符编码模式,以图中Code39条码为例,其起始符终止符均是以五条四空相互间隔组成的且正向的情况下各个模块比例为:121121211;通过计算五条四空的宽度比例发现该条码可能为Code39,则继续向后寻找终止符;如果终止符存在则记录终止符最后一个边界位置,起始符第一个边界位置到终止符最后一个边界位置即为码区域;
S4、译码,将所述条码区域送入译码模块进行解码处理,不同的码制对数据的编码模式不同,译码主要根据条空宽度比例,以及编码格式进行,如在Code39条码中其标识一个数据需要五条四空,每个数据编码之间插入一个间隔,其编码的条空比例为:211211112;若译码成功,则进入S6步骤,若译码失败,则进入S5步骤;
S5、对译码失败的条码区域进行数据放大处理,将该条码区域内的原始AD数据的点数放大一定倍数,再依次进行上述S2至S4步骤;若译码成功,则进入步骤S6,若译码任然失败,则放弃此组原始AD数据;
S6、输出译码成功后的条码信息。
本实施例通过边界识别算法寻找条码内的条码边界信息,形成边界索引,通过边界索引判断条码中的条码区域,再对条码区域内的条码进行译码处理,排除条码区域外的干扰因素,提高译码效率和准确度;译码失败的数据进行数据放大处理后进行二次译码,降低解码的失误率。
实施例四
进一步的,通过一维CCD传感器获取的每组包含所要识别的条码区域的原始AD数据的数据点数为1500点;所述边界识别算法具体为:
对原始AD数据进行数据统计,获取内部最大数值vMax以及最小数值vMin;
计算用于判定边界幅度的波形幅度参数vA,vA=(vMax-vMin)>>n,“>>”为移位运算符,n为一调整精度的参数,为自然数,n可根据所读条码的质量以及寻找边界的精度适当调整,n值越大要求的精度就越高;
记录原始AD数据中连续下降的累计幅度,遇到第一个上升的点终止,将累计下降幅度与波形幅度参数vA进行比较,若累计下降幅度大于波形幅度参数vA且连续下降的起点和终点的水平距离大于p,p取2~10,则判断当前位置是一个“条”与“空”分界的降边界;记录原始AD数据中连续上升的累计幅度,遇到第一个下降的点终止,将累计上升幅度与波形幅度参数vA进行比较,若累计上升幅度满大于波形幅度参数vA且连续上升的起点和终点的水平距离大于p,p取2~10,则判断当前位置是一个“条”与“空”分界的升边界;以下说明判断过程:
根据得到的波形幅度参数vA开始遍历1500点数据,记(A1,A2)为一对数据,A1位置在A2位置之前;起始时,A1为1500点数据中的第一个数据的值,A2为1500点中的第二个数据的值;所述遍历方式如下:若A1等于A2,则向后移动A2的位置并更新A2的值,再与A1进行比较,若相等则继续向后移动A2,直到A1不等于A2,A1不等于A2只存在两种情况需要分析,A1>A2或者A1<A2,如果A1>A2,则进行下降趋势的边界识别,更新A1的值与当前A2的值相等,且更新A1的位置与当前A2的位置相同,向后移动A2的位置并更新A2的值,如果A1>A2则继续移动A2位置,保持A1的位置和数值不变,并记录A1与A2值之间的差值的绝对值K;直到A2>=A1时停止,此时开始计算K与vA之间的关系,如果K>vA则继续计算A1与A2之间距离的关系,如果A1与A2之间的位置相差大于p(p为一个用于限制条空宽度的参数,可以取2,3,4等,用来保证条空宽度大于一定值,防止条码损坏时,条内出现白丝,影响识别)则记录A1的位置入边界索引信息,认为A1所处位置为一个降边界的位置;如果A1<A2,则进行上升趋势的边界识别,更新A1的值与当前A2的值相等,且更新A1的位置与当前A2的位置相同,向后移动A2的位置并更新A2的值,如果A1<A2则继续移动A2位置,保持A1的位置和数值不变,并记录A1与A2值之间的差值的绝对值K;直到A2<=A1时停止,此时开始计算K与vA之间的关系,如果K>vA则继续计算A1与A2之间距离的关系,如果A1与A2之间的位置相差大于p则记录A1的位置入边界索引信息,认为A1所处位置为一个升边界的位置;
记录找到的升边界与降边界在原始AD数据中的位置,形成边界索引。
进一步的,条码区域搜寻步骤具体为:
将边界索引送入条码区域搜寻模块,根据相邻的升边界与降边界的间距,计算“条”与“空”的宽度,相邻的升边界到降边界的距离为“空”的宽度,相邻的降边界到升边界的距离为“条”的宽度;
搜索与每种条码起始符和终止符相匹配的“条空”比例组合,确定原始AD数据内的条码种类以及条码区域,并通过起始符和终止符的方向,确定条码的扫描方向,如Code39:起始符和终止符均为比例为“121121211”的“条空”组合,反向的情况下搜索到的比例恰好相反为“112121121”。
进一步的,所述译码模块的具体工作过程为:根据各条码区域内的条码种类将各条码区域送入对应条码的译码模块中,将条码区域边缘的“条空”组合转换为对应的符号数据,既将“条空”转换为0和1的字符串,译码模块通过对每种码制的条码码词对上述字符串进行编码处理,再利用排序的方式进行译码处理。
进一步的,所述数据放大处理的具体步骤为:先将条码区域内的数据乘以一定倍数得到放大后的数据,再对放大后的数据采用线性插值的方式拟合原数据函数并获取更多的拟合数据点数;所述线性插值的方式具体如下:
获取乘以一定倍数得到的数据上的数据区间[x0,x1],设拟合数据的函数为F(x,y)=(y-y0)/(y1-y0)-(x-x0)/(x1-x0)=0,令ai=(xi-x0)/(x1-x0),添加不同的xi取值算出ai,再求出yi,即可得到复数个在(x0,y0),(x1,y1)之间插值(xi,yi)。(y-y0)/(y1-y0)=(x-x0)/(x1-x0),令ai=(xi-x0)/(x1-x0),添加不同的xi取值算出ai,再求出yi,即可得到复数个在(x0,y0),(x1,y1)之间插值(xi,yi)。
本实施例不仅具备实施例一的优点,还提出了一种具体的边界识别算法,通过数据的最大值和最小值和参数计算模块计算出一波形幅度参数vA,根据数据上升幅度和下降幅度与波形幅度参数vA的对比,判断出数据内的升边界和降边界,再通过识别升边界和降边界内的条空组合判断条码类型和条码区域,最后再进行解码处理。通过升边界和降边界的判定提高识别条码区域的准确度。
译码过程采用排序的方式进行译码,可以减少各个条空与标准条空之间宽度比例的计算与判断,提高效率。
通过线性插值的方式增添放大后的数据点数,增加数据的更多细节。以上所述仅为本发明的实施例,并非因此限制本发明的专利范围,凡是利用本发明说明书及附图内容所作的等效结构或等效流程变换,或直接或间接运用在其他相关的技术领域,均同理包括在本发明的专利保护范围内。
Claims (10)
1.一种一维条形码的解码方法,其特征在于,包括以下步骤:
S1、数据采集,通过一维CCD传感器获取一组包含所要识别的条码区域的原始AD数据;
S2、建立边界索引,通过边界识别算法,找到“条”与“空”的边界,并记录每个“条”与“空”的边界在原始AD数据中的位置,形成边界索引;
S3、搜寻条码区域,根据各所述边界索引,确定原始AD数据内的“条”与“空”的宽度,将“条”与“空”的宽度比例与各条码的起始符和终止符进行匹配,判断是何种条码以及扫描方向,生成条码区域;
S4、译码,将所述条码区域送入译码模块进行解码处理,若译码成功,则进入S6步骤,若译码失败,则进入S5步骤;
S5、对译码失败的条码区域进行数据放大处理,将该条码区域内的原始AD数据的点数放大一定倍数,再依次进行上述S2至S4步骤;若译码成功,则进入步骤S6,若译码仍然失败,则放弃此组原始AD数据;
S6、输出译码成功后的条码信息。
2.根据权利要求1所述的一种一维条形码的解码方法,其特征在于:通过一维CCD传感器获取的每组包含所要识别的条码区域的原始AD数据的数据点数为1500点;所述边界识别算法具体为:
对原始AD数据进行数据统计,获取内部最大数值vMax以及最小数值vMin;
计算用于判定边界幅度的波形幅度参数vA,vA=(vMax-vMin)>>n,“>>”为移位运算符,n为一调整精度的参数,为自然数;
记录原始AD数据中连续下降的累计幅度,遇到第一个上升的点终止,将累计下降幅度与波形幅度参数vA进行比较,若累计下降幅度大于波形幅度参数vA且连续下降的起点和终点的水平距离大于p,p取2~10,则判断当前位置是一个“条”与“空”分界的降边界;记录原始AD数据中连续上升的累计幅度,遇到第一个下降的点终止,将累计上升幅度与波形幅度参数vA进行比较,若累计上升幅度满大于波形幅度参数vA且连续上升的起点和终点的水平距离大于p,p取2~10,则判断当前位置是一个“条”与“空”分界的升边界;记录找到的升边界与降边界在原始AD数据中的位置,形成边界索引。
3.根据权利要求2所述的一种一维条形码的解码方法,其特征在于,条码区域搜寻步骤具体为:
将边界索引送入条码区域搜寻模块,根据相邻的升边界与降边界的间距,计算“条”与“空”的宽度,相邻的升边界到降边界的距离为“空”的宽度,相邻的降边界到升边界的距离为“条”的宽度;
搜索与每种条码起始符和终止符相匹配的“条空”比例组合,确定原始AD数据内的条码种类以及条码区域,并通过起始符和终止符的方向,确定条码的扫描方向。
4.根据权利要求1所述的一种一维条形码的解码方法,其特征在于,所述译码模块的具体工作过程为:根据各条码区域内的条码种类将各条码区域送入对应条码的译码模块中,将条码区域边缘的“条空”组合转换为对应的符号数据,译码模块通过对每种码制的条码码词对所述符号数据进行编码处理,再利用排序的方式进行译码处理。
5.根据权利要求1所述的一种一维条形码的解码方法,其特征在于,所述数据放大处理的具体步骤为:先将条码区域内的数据乘以一定倍数得到放大后的数据,再对放大后的数据采用线性插值的方式拟合原数据函数并获取更多的拟合数据点数;所述线性插值的方式具体如下:
获取乘以一定倍数得到的数据上的数据区间[x0,x1],设拟合数据的函数为F(x,y)=(y-y0)/(y1-y0)-(x-x0)/(x1-x0)=0,令ai=(xi-x0)/(x1-x0),添加不同的xi取值算出ai,再求出yi,即可得到复数个在(x0,y0),(x1,y1)之间插值(xi,yi)。
6.一种一维条形码的解码设备,其特征在于,包括存储器和处理器,所述存储器存储有指令,所述指令适于由处理器加载并对扫描获得的条码图像执行以下步骤:
S1、数据采集,通过一维CCD传感器获取一组包含所要识别的条码区域的原始AD数据;
S2、建立边界索引,通过边界识别算法,找到“条”与“空”的边界,并记录每个“条”与“空”的边界在原始AD数据中的位置,形成边界索引;
S3、搜寻条码区域,根据各所述边界索引,确定原始AD数据内的“条”与“空”的宽度,将“条”与“空”的宽度比例与各条码的起始符和终止符进行匹配,判断是何种条码以及扫描方向,生成条码区域;
S4、译码,将所述条码区域送入译码模块进行解码处理,若译码成功,则进入S6步骤,若译码失败,则进入S5步骤;
S5、对译码失败的条码区域进行数据放大处理,将该条码区域内的原始AD数据的点数放大一定倍数,再依次进行上述S2至S4步骤;若译码成功,则进入步骤S6,若译码任然失败,则放弃此组原始AD数据;
S6、输出译码成功后的条码信息。
7.根据权利要求6所述的一种一维条形码的解码设备,其特征在于:通过一维CCD传感器获取的每组包含所要识别的条码区域的原始AD数据的数据点数为1500点;所述边界识别算法具体为:
对原始AD数据进行数据统计,获取内部最大数值vMax以及最小数值vMin;
计算用于判定边界幅度的波形幅度参数vA,vA=(vMax-vMin)>>n,“>>”为移位运算符,n为一调整精度的参数,为自然数;
记录原始AD数据中连续下降的累计幅度,遇到第一个上升的点终止,将累计下降幅度与波形幅度参数vA进行比较,若累计下降幅度大于波形幅度参数vA且连续下降的起点和终点的水平距离大于p,p取2~10,则判断当前位置是一个“条”与“空”分界的降边界;记录原始AD数据中连续上升的累计幅度,遇到第一个下降的点终止,将累计上升幅度与波形幅度参数vA进行比较,若累计上升幅度满大于波形幅度参数vA且连续上升的起点和终点的水平距离大于p,p取2~10,则判断当前位置是一个“条”与“空”分界的升边界;记录找到的升边界与降边界在原始AD数据中的位置,形成边界索引。
8.根据权利要求7所述的一种一维条形码的解码设备,其特征在于,条码区域搜寻步骤具体为:
将边界索引送入条码区域搜寻模块,根据相邻的升边界与降边界的间距,计算“条”与“空”的宽度,相邻的升边界到降边界的距离为“空”的宽度,相邻的降边界到升边界的距离为“条”的宽度;
搜索与每种条码起始符和终止符相匹配的“条空”比例组合,确定原始AD数据内的条码种类以及条码区域,并通过起始符和终止符的方向,确定条码的扫描方向。
9.根据权利要求6所述的一种一维条形码的解码设备,其特征在于,所述译码模块的具体工作过程为:根据各条码区域内的条码种类将各条码区域送入对应条码的译码模块中,将条码区域边缘的“条空”组合转换为对应的符号数据,译码模块通过对每种码制的条码码词对所述符号数据进行编码处理,再利用排序的方式进行译码处理。
10.根据权利要求6所述的一种一维条形码的解码设备,其特征在于,所述数据放大处理的具体步骤为:先将条码区域内的数据乘以一定倍数得到放大后的数据,再对放大后的数据采用线性插值的方式拟合原数据函数并获取更多的拟合数据点数;所述线性插值的方式具体如下:
获取乘以一定倍数得到的数据上的数据区间[x0,x1],设拟合数据的函数为F(x,y)=(y-y0)/(y1-y0)-(x-x0)/(x1-x0)=0,令ai=(xi-x0)/(x1-x0),添加不同的xi取值算出ai,再求出yi,即可得到复数个在(x0,y0),(x1,y1)之间插值(xi,yi)。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201811548245.2A CN109657515B (zh) | 2018-12-18 | 2018-12-18 | 一种一维条形码的解码方法及设备 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201811548245.2A CN109657515B (zh) | 2018-12-18 | 2018-12-18 | 一种一维条形码的解码方法及设备 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN109657515A CN109657515A (zh) | 2019-04-19 |
CN109657515B true CN109657515B (zh) | 2022-02-11 |
Family
ID=66113557
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201811548245.2A Active CN109657515B (zh) | 2018-12-18 | 2018-12-18 | 一种一维条形码的解码方法及设备 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN109657515B (zh) |
Families Citing this family (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113408314A (zh) * | 2020-03-16 | 2021-09-17 | 华为技术有限公司 | 一种条码识别方法以及相关设备 |
CN111797646B (zh) * | 2020-07-08 | 2021-06-29 | 北京京东振世信息技术有限公司 | 条形码识别方法及终端 |
CN112561014B (zh) * | 2020-12-21 | 2023-03-14 | 宁波尚臣物联科技有限公司 | 一种一维条码的编解码方法 |
CN112651260B (zh) * | 2020-12-30 | 2024-01-30 | 凌云光技术股份有限公司 | 一种自适应离散码转连续码的方法及系统 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101840496A (zh) * | 2010-06-01 | 2010-09-22 | 福建新大陆电脑股份有限公司 | 一维条码解码芯片 |
CN101882202A (zh) * | 2010-06-01 | 2010-11-10 | 福建新大陆电脑股份有限公司 | 符号字符提取模块及其提取方法 |
CN201927043U (zh) * | 2010-06-01 | 2011-08-10 | 福建新大陆电脑股份有限公司 | 一维条码解码芯片 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20060060654A1 (en) * | 2004-09-23 | 2006-03-23 | Kazukuni Hosoi | Method of decoding barcode symbols and the like using multiple scanning lines |
-
2018
- 2018-12-18 CN CN201811548245.2A patent/CN109657515B/zh active Active
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101840496A (zh) * | 2010-06-01 | 2010-09-22 | 福建新大陆电脑股份有限公司 | 一维条码解码芯片 |
CN101882202A (zh) * | 2010-06-01 | 2010-11-10 | 福建新大陆电脑股份有限公司 | 符号字符提取模块及其提取方法 |
CN201927043U (zh) * | 2010-06-01 | 2011-08-10 | 福建新大陆电脑股份有限公司 | 一维条码解码芯片 |
Non-Patent Citations (1)
Title |
---|
基于Halcon的一维条码识别技巧;公丕亮等;《计算机与现代化》;20130415(第04期);全文 * |
Also Published As
Publication number | Publication date |
---|---|
CN109657515A (zh) | 2019-04-19 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN109657515B (zh) | 一种一维条形码的解码方法及设备 | |
US6604682B2 (en) | Method of and apparatus for reading a two-dimensional bar code symbol and data storage medium | |
US7380718B2 (en) | Method for reading out symbol information and device for reading out symbol information | |
Chai et al. | Locating and decoding EAN-13 barcodes from images captured by digital cameras | |
US20170372107A1 (en) | Decoding barcodes | |
CN101840496B (zh) | 一维条码解码芯片 | |
US8333326B2 (en) | Stacked barcode reader and stacked barcode reading method | |
EP0685809A2 (en) | Method and apparatus for decoding two-dimensional bar code | |
US7949187B2 (en) | Character string recognition method and device | |
US9070033B2 (en) | Stack barcode reader and stack barcode reading method | |
CN101833644B (zh) | 一种基于动态模板的校正图形搜索方法 | |
US5052044A (en) | Correlated masking process for deskewing, filtering and recognition of vertically segmented characters | |
JP5676183B2 (ja) | バーコード読取装置およびバーコード読取方法 | |
CN102521559B (zh) | 一种基于亚像素边缘检测的四一七条码识别方法 | |
JP5379626B2 (ja) | スタック型バーコード情報読取方法及びスタック型バーコード情報読取装置 | |
CN109977715B (zh) | 基于轮廓识别的二维码识别方法及二维码 | |
US8313029B2 (en) | Apparatus and methods for decoding images | |
JP2007102386A (ja) | シンボル情報読取方法及びシンボル情報読取装置 | |
US5862267A (en) | Method and apparatus for locating data regions in stored images of symbols | |
CN111368576B (zh) | 一种基于全局优化的Code128条码自动识读方法 | |
JP6393226B2 (ja) | スタック型バーコード読取装置およびスタック型バーコード読取方法 | |
JP5683891B2 (ja) | スタック型バーコード読取装置およびスタック型バーコード読取方法 | |
JP5657987B2 (ja) | スタック型バーコード読取装置およびスタック型バーコード読取方法 | |
JP2011191957A (ja) | バーコード情報読取方法及びバーコード情報読取装置 | |
CN114298078B (zh) | 一种污损一维条码的解码方法 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
CB03 | Change of inventor or designer information |
Inventor after: Song Shaolong Inventor before: Chen Xiaojie Inventor before: Song Shaolong |
|
CB03 | Change of inventor or designer information | ||
GR01 | Patent grant | ||
GR01 | Patent grant |