用于确定解码方向的方法、装置及解码设备转让专利

申请号 : CN202211299354.1

文献号 : CN115438682B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 翟剑锋续素芬樊旭川

申请人 : 北京紫光青藤微系统有限公司

摘要 :

本申请涉及二维码识别技术领域,公开一种用于确定解码方向的方法。该方法首先从条码图像中确定出范围较小的目标数据区,然后沿着目标数据区的边界线的垂直方向,确定出多条直线构成的平行直线簇,根据该平行直线簇确定解码方向。由于本方法只对范围较小的目标数据区进行识别,有效减少了条码图像的解码运算量,提高了条码图像的解码速度。本申请还公开一种用于确定解码方向的装置及解码设备。

权利要求 :

1.一种用于确定解码方向的方法,其特征在于,所述方法包括:获取条码图像中的目标数据区的边界方向以及所述目标数据区中包含的多个边界点;

其中,边界点为所述目标数据区中每个数据模块与所述边界方向垂直的边界点;

从所有边界点中确定平行直线簇;其中,所述平行直线簇的方向与所述边界方向满足预设垂直关系;

根据所述平行直线簇的方向确定所述条码图像的解码方向;

其中,所述从所有边界点中确定平行直线簇,包括:将所述边界方向的垂直方向确定为初始解码方向;根据所述初始解码方向以及所述所有边界点的位置,在所述目标数据区中确定平行直线簇。

2.根据权利要求1所述的方法,其特征在于,获取所述条码图像中的目标数据区中包含的所有边界点的步骤,包括:根据预设的方向模板,在所述目标数据区中寻找局部最大值;

将所述局部最大值对应的像素点确定为边界点。

3.根据权利要求2所述的方法,其特征在于,根据预设的方向模板,在所述目标数据区中寻找局部最大值的步骤,包括:根据预设的方向模板对所述目标数据区进行滤波,得到滤波图像;

在所述滤波图像中沿着所述边界方向寻找局部最大值。

4.根据权利要求1所述的方法,其特征在于,根据所述初始解码方向以及所述所有边界点的位置,在所述目标数据区中确定平行直线簇的步骤,包括:根据预设分割规则,将所述目标数据区内沿着所述初始解码方向划分成第一数量个区间;

将每个区间内的边界点进行拟合,得到初始直线簇;

在初始直线簇中确定拟定直线簇;其中,所述拟定直线簇中的每条直线的方向与所述初始解码方向的夹角小于预设平行角度,且所述拟定直线簇中的每条直线的拟合误差小于预设误差阈值;

计算所述拟定直线簇在所述初始直线簇中的占比,如果所述占比大于占比阈值,确定所述拟定直线簇为平行直线簇。

5.根据权利要求1所述的方法,其特征在于,根据所述初始解码方向以及所述所有边界点的位置,在所述目标数据区中确定平行直线簇的步骤,包括:将所述目标数据区内的边界点在所述初始解码方向的垂直方向进行投影,得到投影后的分布曲线;

确定所述分布曲线中数值大于预设峰值的投影点作为峰点;

判断每相邻的两个所述峰点之间的距离的差值是否小于距离阈值;

如果是,根据各个峰点对应的边界点进行直线拟合,得到平行直线簇。

6.根据权利要求1或2所述的方法,其特征在于,获取所述条码图像中的目标数据区的边界方向的步骤,包括:在所述目标数据区中提取两条初始边界线;

判断所述两条初始边界线是否满足预设平行关系;

如果是,将任意一条初始边界线的方向确定为所述目标数据区的边界方向。

7.一种用于确定解码方向的装置,其特征在于,包括:获取模块,被配置为获取条码图像中的目标数据区的边界方向以及所述目标数据区中包含的多个边界点;其中,边界点为所述目标数据区中每个数据模块与所述边界方向垂直的边界点;

平行直线簇确定模块,被配置为从所有边界点中确定平行直线簇;其中,所述平行直线簇的方向与所述边界方向满足预设垂直关系;

解码方向确定模块,被配置为根据所述平行直线簇的方向确定所述条码图像的解码方向;

其中,所述平行直线簇确定模块进一步被配置为:将边界方向的垂直方向确定为初始解码方向;根据初始解码方向以及所有边界点的位置,在目标数据区中确定平行直线簇。

8.一种用于确定解码方向的装置,包括处理器和存储有程序指令的存储器,其特征在于,所述处理器被配置为在执行所述程序指令时,执行如权利要求1至6任一项所述的用于确定解码方向的方法。

9.一种解码设备,其特征在于,包括:

图像采集装置,被配置为获取条码图像;

如权利要求8所述的用于确定解码方向的装置;以及,处理器,被配置为根据所述解码装置确定的解码方向对所述条码图像进行解码。

说明书 :

用于确定解码方向的方法、装置及解码设备

技术领域

[0001] 本申请涉及二维码识别技术领域,例如涉及一种用于确定解码方向的方法、装置及解码设备。

背景技术

[0002] 随着智能手机的普及,条码图像被广泛应用于各个行业中,例如可用于证件、卡片等大容量、高可靠性信息自动存储。
[0003] 现有的条码图像的解码方向估算是依赖码图定位来实现的,基于条码区域丰富的边缘信息,结合数学形态学的方法,利用梯度特征将条码从背景中分割出来,从而获得条码的方向,进而解码。
[0004] 在实现本公开实施例的过程中,发现相关技术中至少存在如下问题:
[0005] 现有方法需要对含有条码的图片进行全图处理,运算量大,对处理平台的算力要求高,解码速度较慢。

发明内容

[0006] 为了对披露的实施例的一些方面有基本的理解,下面给出了简单的概括。所述概括不是泛泛评述,也不是要确定关键/重要组成元素或描绘这些实施例的保护范围,而是作为后面的详细说明的序言。
[0007] 本公开实施例提供了一种用于确定解码方向的方法、装置及解码设备,以降低条码图像的解码运算量,提高解码速度。
[0008] 在一些实施例中,所述方法包括:获取条码图像中的目标数据区的边界方向以及所述目标数据区中包含的多个边界点;从所有边界点中确定平行直线簇;其中,平行直线簇的方向与边界方向满足预设垂直关系;根据平行直线簇的方向确定条码图像的解码方向。
[0009] 可选地,获取条码图像中的目标数据区中包含的所有边界点的步骤,包括:根据预设的方向模板,在目标数据区中寻找局部最大值;将局部最大值对应的像素点确定为边界点。
[0010] 可选地,根据预设的方向模板,在目标数据区中寻找局部最大值的步骤,包括:根据预设的方向模板对目标数据区进行滤波,得到滤波图像;在滤波图像中沿着边界方向寻找局部最大值。
[0011] 可选地,从所有边界点中确定平行直线簇的步骤,包括:将边界方向的垂直方向确定为初始解码方向;根据初始解码方向以及所有边界点的位置,在目标数据区中确定平行直线簇。
[0012] 可选地,根据初始解码方向以及所有边界点的位置,在目标数据区中确定平行直线簇的步骤,包括:根据预设分割规则,将目标数据区内沿着初始解码方向划分成第一数量个区间;将每个区间内的边界点进行拟合,得到初始直线簇;在初始直线簇中确定拟定直线簇;其中,拟定直线簇中的每条直线的方向与初始解码方向的夹角小于预设平行角度,且拟定直线簇中的每条直线的拟合误差小于预设误差阈值;计算拟定直线簇在初始直线簇中的占比,如果占比大于占比阈值,确定拟定直线簇为平行直线簇。
[0013] 可选地,根据初始解码方向以及所有边界点的位置,在目标数据区中确定平行直线簇的步骤,包括:将目标数据区内的边界点在初始解码方向的垂直方向进行投影,得到投影后的分布曲线;确定分布曲线中数值大于预设峰值的投影点作为峰点;判断每相邻的两个峰点之间的距离的差值是否小于距离阈值;如果是,根据各个峰点对应的边界点进行直线拟合,得到平行直线簇。
[0014] 可选地,方法还包括:从条码图像中提取左行提示符、右行提示符和数据字符中的一个或多个区域作为目标数据区。
[0015] 可选地,方法还包括:在目标数据区中提取边界线;其中,边界线用于分割目标数据区与条码图像中的其他区域;将边界线的方向确定为边界方向。
[0016] 可选地,获取所述条码图像中的目标数据区的边界方向的步骤,包括:在目标数据区中提取两条初始边界线;判断两条初始边界线是否满足预设平行关系;如果是,将任意一条初始边界线的方向确定为目标数据区的边界方向。
[0017] 在一些实施例中,所述装置包括:获取模块,被配置为获取条码图像中的目标数据区的边界方向以及所述目标数据区中包含的多个边界点;其中,边界点为所述目标数据区中每个数据模块与所述边界方向垂直的边界点;平行直线簇确定模块,被配置为从所有边界点中确定平行直线簇;其中,平行直线簇的方向与边界方向满足预设垂直关系;解码方向确定模块,被配置为根据平行直线簇的方向确定条码图像的解码方向。
[0018] 在一些实施例中,所述装置包括:处理器和存储有程序指令的存储器,其特征在于,处理器被配置为在执行程序指令时,执行上述用于确定解码方向的方法。
[0019] 在一些实施例中,所述解码设备包括:图像采集装置,被配置为获取条码图像;上述用于确定解码方向的装置;以及,处理器,被配置为根据用于确定解码方向的装置确定的解码方向对条码图像进行解码。
[0020] 本公开实施例提供的用于确定解码方向的方法、装置及解码设备,可以实现以下技术效果:
[0021] 首先从条码图像中确定出范围较小的目标数据区,然后沿着目标数据取的边界线的垂直方向,确定出多条直线构成的平行直线簇,根据该平行直线簇确定解码方向。由于本技术只对范围较小的目标数据区进行识别,有效减少了条码图像的解码运算量,提高了条码图像的解码速度。
[0022] 以上的总体描述和下文中的描述仅是示例性和解释性的,不用于限制本申请。

附图说明

[0023] 一个或多个实施例通过与之对应的附图进行示例性说明,这些示例性说明和附图并不构成对实施例的限定,附图中具有相同参考数字标号的元件示为类似的元件,附图不构成比例限制,并且其中:
[0024] 图1是本公开实施例提供的一个用于确定解码方向的方法的示意图;
[0025] 图2是本公开实施例提供的一个条码图像的示意图;
[0026] 图3是本公开实施例提供的另一个条码图像的示意图;
[0027] 图4是本公开实施例提供的另一个用于确定解码方向的方法的示意图;
[0028] 图5是本公开实施例提供的一个方向模板的示意图;
[0029] 图6是本公开实施例提供的又一个用于确定解码方向的方法的示意图;
[0030] 图7是本公开实施例提供的再一个用于确定解码方向的方法的示意图;
[0031] 图8本公开实施例提供的一个用于确定解码方向的应用场景中的示意图;
[0032] 图9是本公开实施例提供的一个用于确定解码方向的装置的示意图;
[0033] 图10是本公开实施例提供的另一个用于确定解码方向的装置的示意图。

具体实施方式

[0034] 为了能够更加详尽地了解本公开实施例的特点与技术内容,下面结合附图对本公开实施例的实现进行详细阐述,所附附图仅供参考说明之用,并非用来限定本公开实施例。在以下的技术描述中,为方便解释起见,通过多个细节以提供对所披露实施例的充分理解。
然而,在没有这些细节的情况下,一个或多个实施例仍然可以实施。在其它情况下,为简化附图,熟知的结构和装置可以简化展示。
[0035] 本公开实施例的说明书和权利要求书及上述附图中的术语“第一”、“第二”等是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。应该理解这样使用的数据在适当情况下可以互换,以便这里描述的本公开实施例的实施例。此外,术语“包括”和“具有”以及他们的任何变形,意图在于覆盖不排他的包含。
[0036] 除非另有说明,术语“多个”表示两个或两个以上。
[0037] 本公开实施例中,字符“/”表示前后对象是一种“或”的关系。例如,A/B表示:A或B。
[0038] 术语“和/或”是一种描述对象的关联关系,表示可以存在三种关系。例如,A和/或B,表示:A或B,或,A和B这三种关系。
[0039] 条码图像,又可以称之为二维条码或二维码,是用某种特定的几何图形按一定规律在平面(二维方向上)分布的、黑白相间的、记录数据符号信息的图形。它比传统的Bar Code条形码能存更多的信息,也能表示更多的数据类型。其中,以PDF417条码为例,PDF417条码是目前应用最广泛的二维条码之一,它可用于证件、卡片等大容量、高可靠性信息自动存储。PDF417条码是一种多层、可变长、具有高数据容量和错误纠正能力的行排列式二维条码,它的行编码结构使得正确获取码字方向成为解码成功的前提。
[0040] 现有的条码解码方向估算是依赖码图定位来实现的,即基于条码区域丰富的边缘信息,结合数学形态学的方法,利用梯度特征将条码从背景中分割出来,从而获得条码的方向,进而解码。该方法一方面需要对含有条码的图片进行全图处理,运算量大,对处理平台的算力要求高。另一方面,其对污损或反光等图像质量低的码图适应性较差。
[0041] 基于以上问题,本公开实施例提供了一种用于确定解码方向的方法,首先从条码图像中确定出范围较小的目标数据区,然后沿着目标数据取的边界线的垂直方向,确定出多条直线构成的平行直线簇,如果直线之间满足平行条件,说明平行直线簇是条码方向,根据该平行直线簇可以确定解码方向。由于本方法只对范围较小的目标数据区进行识别,有效减少了条码图像的解码运算量,提高了解码速度。同时,该方法不依赖条码图像的留白特性,对污损或反光等图像质量低的PDF417的解码方向估算具有较高的鲁棒性,可有效提升解码能力,得到精确度较高的解码方向。
[0042] 上述方法可以应用于具有数据处理功能和信息获取功能的电子设备中,例如个人PC、服务器、智能终端等。
[0043] 结合图1所示,本公开实施例提供一种用于确定解码方向的方法,包括:
[0044] S101:电子设备获取条码图像中的目标数据区的边界方向以及目标数据区中包含的多个边界点。
[0045] 目标数据区是条码图像中的一部分数据区域。图2是一种条码图像的示意图,如图2所示,条码图像包含a‑g多个区域。其中,a为左空白区,b为起始符,c为左行指示符号字符,d为数据符号字符,e为右行指示符号字符,f为终止符,g为右空白区。其中的a和g区域没有数据信息,属于空白区域,因此无法作为目标数据区进行识别。b区域和f区域为起始标志,也不能作为目标数据区进行识别。而条码图像的中间区域c、d和e可以作为目标区域。该目标区域可以是单独的一个数据区,例如条码图像中的b区域,可以是连续的多个区域,例如包括c和d。
[0046] 边界方向是该目标区域与条码图像中其他区域的分界线,以目标区域为图2中的c区域为例,c区域具有四个分界线,如图3所示,示出了一种条码图像的示意图,其中,x方向上存在相互平行的两个分界线,y方向存在相互平行的两个分界线,而x方向上的两个分界线只能区分c区域和非条码图像区域,只有y方向的两个分界线可以区分c区域和条码图像中的其他区域,因此,边界方向为y方向。可以理解的是,图3中y方向的指示箭头只是一种示意,实际应用中,也可以将图3中y方向的反向作为边界方向。
[0047] 边界点为所述目标数据区中每个数据模块与所述边界方向垂直的边界点。继续参见图3,目标数据区包含了多个黑色的数据模块和白色的数据模块。其中,黑色数据模块为条,白色数据模块为空,条空的不同宽度组合构成了条码的数据信息。每个黑色的数据模块包含x方向的两个边界线和y方向的两个边界线,与边界方向(y方向)垂直的边界线上的点即为边界点。即,沿着y方向画一条直线,该直线与其中一个数据模块在边界上相交的点即为边界点。
[0048] 需要注意的是,对边界点的获取,可以获取所有边界点,也可以只获取全部边界点中大于占比阈值的边界点,因为边界点的数量很大,难以保证获得的边界点没有遗漏,此时,可以设定占比阈值,例如,占比阈值可以是某一面积内对应的边界点的数量,也可以是目标数据区中需要提取边界点的面积与目标数据区的面积的比值。
[0049] 具体应用时,可以在目标区域中直接使用局部最大值算法或模型寻找局部最大值的像素点作为边界点。也可以按照一定方向寻找到所有局部最大值作为边界点。进一步地,可以获取方向模板,使用方向模板对目标区域进行滤波,在基于滤波后的图像进行局部最大值的确定。局部最大值用于表征黑色和白色像素区域的分界点。
[0050] S102:电子设备从所有边界点中确定平行直线簇;其中,平行直线簇的方向与边界方向满足预设垂直关系。
[0051] 由于二维码通常成矩形设置,相邻两边互相垂直,或者满足一定的垂直关系,例如夹角在80‑100度之间。因此,沿着边界方向的垂直方向为解码方向的概率也较大,可以在边界方向的垂直方向上确定一系列直线簇。
[0052] 实际应用过程中,可以沿着边界方向的垂直方向进行直线的拟合,得到一系列直线构成的直线簇。或者,也可以将边界点进行投影,根据投影得到符合直线关系的边界点,从而确定出边界点构成的直线。
[0053] S103:电子设备根据平行直线簇的方向确定条码图像的解码方向。
[0054] 在得到平行直线簇后,可以直接将平行直线簇的方向确定为条码图像的解码方向。当然,如果平行直线簇中各个直线之间存在一定夹角,也可以将平行直线簇的方向均值作为条码图像的解码方向。基于解码方向,进行后续的解码操作,得到条码图像包含的信息。
[0055] 采用本公开实施例提供的上述用于确定解码方向的方法,首先从条码图像中确定出范围较小的目标数据区,然后沿着目标数据取的边界线的垂直方向,确定出多条直线构成的平行直线簇,根据该平行直线簇确定解码方向。由于本方法只对范围较小的目标数据区进行识别,有效减少了条码图像的解码运算量,提高了条码图像的解码速度。
[0056] 一个目标区域中的边界点的数量通常较大,为了加快边界点的识别速度,本公开实施例还提供了另一种用于确定解码方向的方法,如图4所示,该方法包括:
[0057] S401:电子设备根据预设的方向模板,在条码图像中的目标数据区中寻找局部最大值。
[0058] S402:电子设备将局部最大值对应的像素点确定为边界点。
[0059] S403:电子设备根据边界点确定目标数据区的边界方向。
[0060] S404:电子设备从所有边界点中确定平行直线簇;其中,平行直线簇的方向与边界方向满足预设垂直关系。
[0061] S405:电子设备根据平行直线簇的方向确定条码图像的解码方向。
[0062] 上述实施例中,通过局部最大值可以快速准确的进行边界点的确定,提高解码速度。
[0063] 可选地,上述步骤S401(根据预设的方向模板,在目标数据区中寻找局部最大值)包括步骤:L1:根据预设的方向模板对目标数据区进行滤波,得到滤波图像;L2:在滤波图像中沿着边界方向寻找局部最大值。这样,首先对目标数据区进行滤波,在滤波图像中寻找局部最大值,相比直接从目标数据区中识别局部最大值,可以有效提升识别效率,且沿着边界方向逐一寻找局部最大值,可以有效避免边界点的遗漏,提升解码方向的识别准确度。
[0064] 举例来说,可以按照如下步骤确定目标数据区中的所有边界点:
[0065] 步骤1、依据y方向构建方向模板T;
[0066] 进一步地,方向滤波可强化条码图像在y方向上的边界点与其他点的差异,该方向模板可由sobel、roberts、prewitt、canny等边缘检测算法生成,也可以根据条码图像的y方向的特点自行构建。图5为本公开实施例提供的一种方向模板的示意图,可以理解的是,在进行边界点识别过程中,还可以使用其他形式的方向模板,本公开实施例对此不进行限定。
[0067] 其中的反向模板是沿着图3中的y方向的模板,如图5所示,为本公开实施例提供的一种y方向模板的示意图。
[0068] 步骤2、使用方向模板T对目标数据区进行方向滤波得到图像I;
[0069] 步骤3、在图像I的y方向寻找局部最大值,所有局部最大值的点构成点集S,其中,S中的点为目标数据区中的边界点,S即为边界点集合。
[0070] 由于解码方向通常与条码图像的边界线存在一定角度关系,根据边界方向确定一个初始解码方向,再对初始解码方向进行微调,可以快速确定最终的解码方向,因此,本公开在上述实施例的基础上,还提供了一种用于确定解码方向的方法,该方法侧重于描述如何根据边界方向确定平行直线簇,进而确定解码方向的过程,如图6所示,该方法包括以下步骤:
[0071] S601:电子设备获取条码图像中的目标数据区中包含的所有边界点以及目标数据区的边界方向。
[0072] S602:电子设备将边界方向的垂直方向确定为初始解码方向。
[0073] 可以理解,边界方向的垂直方向可以是完全垂直,即初始解码方向与边界方向之间的夹角为90°。边界方向的垂直方向也可以是满足预设垂直关系的方向,即初始解码方向与边界方向之间的夹角满足预设垂直角度即可,预设垂直角度可以为一个角度范围,例如,为80°至100°。
[0074] S603:电子设备根据初始解码方向以及所有边界点的位置,在目标数据区中确定平行直线簇。
[0075] S604:电子设备根据平行直线簇的方向确定条码图像的解码方向。
[0076] 由于二维码通常成矩形设置,因此,相邻两边互相垂直的概率较大,沿着边界方向的垂直方向为解码方向的概率也较大,因此,可以在边界方向的垂直方向上确定一系列直线簇。这样,通过上述方法可以快速定位到与实际解码方向接近的方向上,进一步提升解码速度。
[0077] 针对上述方法中的步骤电子设备根据初始解码方向以及所有边界点的位置,在目标数据区中确定平行直线簇,可以有多种具体实施方式。
[0078] 在其中一种可能的实施方式中,可以根据预设分割规则,将目标数据区内沿着初始解码方向划分成第一数量个区间;将每个区间内的边界点进行拟合,得到初始直线簇;在初始直线簇中确定拟定直线簇;其中,拟定直线簇中的每条直线的方向与初始解码方向的夹角小于预设平行角度,且拟定直线簇中的每条直线的拟合误差小于预设误差阈值;计算拟定直线簇在初始直线簇中的占比,如果占比大于占比阈值,确定拟定直线簇为平行直线簇。
[0079] 其中,第一数量个区间的划分可以是对目标数据区进行N等分,N的值可以是根据目标数据区的大小确定。在划分出N‑1个区间后,对每个区间内的边界点进行拟合,每个区间拟合出一条直线,则得到N‑1条直线。N‑1条直线构成初始直线簇。由于目标数据区中的边界点信息较多,拟合得到的直线中有些直线可能明显与解码方向不符,这样的直线需要排除掉,因此,在得到初始直线簇后,还需要在初始直线簇中确定出拟定直线簇。
[0080] 具体地,判断初始直线簇中的每条直线与初始解码方向的夹角,将夹角小于预设平行角度的直线确定为第一拟定直线,即,第一拟定直线中的每条直线与初始解码方向要满足平行关系。需要注意的是,平行关系可以是该直线与初始解码方向的夹角小于预设平行角度,这样可以保证直线簇的方向与初始解码方向偏差较小,避免出现拟合后的直线簇严重偏离解码方向。
[0081] 在得到第一拟定直线后,进一步地,确定第一拟定直线中的每条直线的拟合误差,如果该直线的拟合误差小于预设误差阈值,则确定该直线为第二拟定直线,所有第二拟定直线构成拟定直线簇。这样,保证了拟定直线簇中的直线全部与初始解码方向的夹角小于预设平行角度,且拟定直线簇中的直线的拟合误差全部小于预设误差阈值。
[0082] 当然,如果在初始直线簇中,没有确定出拟定直线簇,则需要重新确定初始直线簇,避免了基于偏差较大的初始直线簇确定得到的解码方向与条码图像的实际解码方向偏差较大,可以提高解码方向的准确性。
[0083] 举例来说,可以具体按照如下流程确定平行直线簇:
[0084] 步骤1、将边界线L1垂线方向ori为初始解码方向,并设定ori更新步长step,ori更新次数i=0,解码方向最大验证次数为max_num,直线拟合误差上限阈值err_th,合法边界占比下限阈值th;
[0085] 步骤2、按照方向ori构建k分类线:以行高为间隔,以ori为方向,在码图区域内选取k条平行线;
[0086] 步骤3、分别对k类边界点,即k分类线间的边界点,执行直线拟合,生成k‑1条直线;
[0087] 步骤4、统计方向近似为ori,(与ori的差值小于预设阈值)且拟合误差小于err_th的直线数量n;
[0088] 步骤5、设平行线占比为nk,若nk=n/k大于设定阈值th,则确定解码方向为当前orii 值,否则,更新验证次数,设置i=i+1,更新解码方向ori = ori + (‑1) * i * step,并跳转至步骤2。
[0089] 在另一种可能的实施方式中,还可以将目标数据区内的边界点在初始解码方向的垂直方向进行投影,得到投影后的分布曲线;确定分布曲线中数值大于预设峰值的投影点作为峰点;判断每相邻的两个峰点之间的距离的差值是否小于距离阈值;如果是,根据各个峰点对应的边界点进行直线拟合,得到平行直线簇。
[0090] 具体地,首先将所有边界点在初始解码方向的垂直方向进行投影,可以得到投影后的分布曲线,即,将所有边界点投影到y方向上,得到的分布曲线的横坐标为边界点的位置,纵坐标为对应于每个位置的x方向上的边界点的数量。从分布曲线中可以观察到,处于峰值的位置处,该位置点的边界点较多,可以绘制出一条沿着x方向的直线。因此,首先将分布曲线中数值大于预设峰值的投影点作为峰点。
[0091] 进一步地,将每两个峰值之间的距离作为d,所有的相邻峰值之间的距离组成距离序列D,即D={d1,d2,…dn‑1},其中,n为峰值的个数。根据距离序列D中的每个距离之间的差值与距离阈值,确定是否可以对边界点进行边界拟合。具体地,在一些实施例中,可以首先计算距离序列中相邻两个距离的差值,如果所有差值均小于距离阈值,则可以对边界点进行直线拟合。在另一些实施例中,还可以首先计算距离序列中相邻两个距离的差值,如果所有差值的均值小于距离阈值,则可以对边界点进行直线拟合。
[0092] 由于当峰值之间的距离相差较小时,能够得到一定数量的平行直线。例如,最为理想的状态是,所有的距离d1=d2=…=dn‑1,即峰值为距离相等的一组点。如果峰值之间的距离相差较大,即大于距离阈值,则需要重新选取初始解码方向,并进行投影,得到较为集中的平行直线簇。
[0093] 举例来说,可以按照如下步骤确定平行直线簇:
[0094] 步骤1、设定边界线L1垂线方向为初始解码方向,并设定更新步长,更新次数,解码方向最大验证次数为,峰值判定阈值peak_th,峰值距离误差容限err_th。
[0095] 步骤2、设ori垂直方向为ori_v,将所有边界点在ori_v上做投影,得到分布H(x).[0096] 步骤3、对H(x)做平滑,减小噪声对分布的影响,平滑后的分布函数记为H/(x)。
[0097] 步骤4、标记H(x)的所有峰值。若峰值大于预设阈值Peak_th,且相邻峰值间的距离差Δd
[0098] 步骤5、对各峰值对应的边界点分别进行直线拟合,形成直线簇。直线簇的方向平均值为解码方向。
[0099] 可选地,本公开实施例提供的上述用于确定解码方向的方法,还可以包括:从条码图像中提取左行提示符、右行提示符和数据字符中的一个或多个区域作为目标数据区。
[0100] 如图2所示的条码图像包含多个彼此独立的区域,本公开实施例仅提取左行提示符,右行提示符和数据字符的区域,例如,可以只提取数据字符区域,为了提升解码方向识别的精确性,也可以提取左行提示符和数据字符的区域,这样仅需要识别部分条码图像,无需对整个条码图像进行识别,降低了运算量,提升了解码效率。
[0101] 可选地,本公开实施例提供的上述用于确定解码方向的方法,还可以包括:在目标数据区中提取边界线;其中,边界线用于分割目标数据区与条码图像中的其他区域;将边界线的方向确定为边界方向。
[0102] 条码的边界线是固定的,而边界线与解码方向会满足一定的规律,例如边界线与解码方向垂直,或者边界线与解码方向的夹角位于一定的区间内,因此,基于边界线进行解码方向的确定,可以有效节省寻找解码方向的时间,进一步提升解码效率。
[0103] 可选地,上述获取所述条码图像中的目标数据区的边界方向的步骤,包括:在目标数据区中提取两条初始边界线;判断两条初始边界线是否满足预设平行关系;如果是,将任意一条初始边界线的方向确定为目标数据区的边界方向。否则,重新提取两条初始边界线。
[0104] 具体来说,如果两条边界线不平行,说明提取出的边界线可能不是准确的边界线,如果基于不准确的边界线进行解码方向识别,势必会影响识别的效率和准确性,因此,可以通过判断两条边界线之间的关系,识出边界线识别失误的情况,只在边界线识别正确的前提下进行解码方向的识别,提升解码速度。
[0105] 结合图7,为本公开实施例提供的另一种用于确定解码方向的方法。该方法应用于电子设备,在电子设备的处理器中,可以执行如下步骤:
[0106] S701:从条码图像中提取左行提示符、右行提示符和数据字符中的一个或多个区域作为所述目标数据区。
[0107] S702:在所述目标数据区中提取所述边界线;其中,所述边界线用于分割所述目标数据区与所述条码图像中的其他区域。
[0108] S703:将所述边界线的方向确定为所述边界方向。
[0109] S704:根据预设的方向模板,在所述目标数据区中寻找局部最大值。
[0110] S705:将所述局部最大值对应的像素点确定为边界点。
[0111] S706:将所述边界方向的垂直方向确定为初始解码方向。
[0112] S707:根据所述初始解码方向以及所述所有边界点的位置,在所述目标数据区中确定平行直线簇。
[0113] S708:根据所述平行直线簇的方向确定所述条码图像的解码方向。
[0114] 上述实施例提供的用于确定解码方向的方法,利用了PDF417码的码图在边界方向(y方向)上各行的边界点相互平行的特性,通过寻找平行的直线簇来确定码图解码方向。无需估算PDF417整列数据区,减少了运算量,提高了运算效率。同时,上述方法不依赖条码图像的留白特性,对污损或反光等图像质量低的PDF417的条码,也可以较稳定的估算出解码方向,有效提升了对条码图像的解码能力。
[0115] 为了便于理解,下面结合图8说明实际应用场景中的一种用于确定解码方向的方法的流程,该方法以确定PDF417条码的解码方向为例,如图8所示,该方法包括:
[0116] S801:确定目标数据区,得到其起始边界线L1和终止边界线L2。
[0117] 具体地,边界线L1和L2通过边界跟踪方法获得,即寻找二维图像中线条边界梯度变化较大的特征。
[0118] S802:判断L1与L2是否近似平行。若是,执行步骤S803,否则重新执行步骤S801。
[0119] 可以理解,本步骤中的近似平行可以为L1与L2的夹角小于一个预设平行角度,例如2°、3°、5°或者10°。
[0120] S803:选取L1方向为条码的边界方向,即y方向,在y方向搜索所有边界点,得到点集S。
[0121] 步骤1、依据码图y方向构建方向模板T;
[0122] 进一步地,所述方向滤波可强化码图y方向边界点与其他点的差异,所述方向模板可由sobel、roberts、prewitt、canny等算子实现,也可以根据码图y方向特点自行构建。
[0123] 步骤2、用模板T对数据区进行方向滤波得到图像I;
[0124] 步骤3、在图像I的码图y方向寻找局部最大值,所有局部最大值的点构成点集S,S中的点为码图y方向边界点。
[0125] S804:在点集S中寻找平行的直线簇,直线簇的方向即为码图解码方向。
[0126] 直线簇的确定,可以使用k分类方法将点集S中的边界点根据位置关系分为k类,并对每类点进行直线拟合生成k条直线,若k条直线中平行线数量占比大于预设的阈值,则为平行直线簇。也可以使用投影变换分析方法,通过统计y方向边界点在解码方向垂直方向的投影分布来实现,若投影分布呈现多个大于预设阈值的峰值且相邻峰值间距离相等,则各峰值对应的边界点分别进行直线拟合后形成的直线簇为平行直线簇。
[0127] 结合图9所示,本公开实施例提供一种用于确定解码方向的装置,包括获取模块91、平行直线簇确定模块92和解码方向确定模块93。
[0128] 其中,获取模块91被配置为获取条码图像中的目标数据区的边界方向以及目标数据区中包含的多个边界点;
[0129] 平行直线簇确定模块92被配置为从所有边界点中确定平行直线簇;其中,所述平行直线簇的方向与所述边界方向满足预设垂直关系;
[0130] 解码方向确定模块93被配置为根据所述平行直线簇的方向确定所述条码图像的解码方向。
[0131] 采用本公开实施例提供的上述用于确定解码方向的装置,首先从条码图像中确定出范围较小的目标数据区,然后沿着目标数据取的边界线的垂直方向,确定出多条直线构成的平行直线簇,根据该平行直线簇确定解码方向。由于本方法只对范围较小的目标数据区进行识别,有效减少了条码图像的解码运算量,提高了条码图像的解码速度。
[0132] 可选地,上述获取模块91进一步被配置为:根据预设的方向模板,在目标数据区中寻找局部最大值;将局部最大值对应的像素点确定为边界点。
[0133] 可选地,上述根据预设的方向模板,在目标数据区中寻找局部最大值的过程,包括:根据预设的方向模板对目标数据区进行滤波,得到滤波图像;在滤波图像中沿着边界方向寻找局部最大值。
[0134] 可选地,上述平行直线簇确定模块92进一步被配置为:将边界方向的垂直方向确定为初始解码方向;根据初始解码方向以及所有边界点的位置,在目标数据区中确定平行直线簇。
[0135] 可选地,上述根据初始解码方向以及所有边界点的位置,在目标数据区中确定平行直线簇的过程,包括:根据预设分割规则,将目标数据区内沿着初始解码方向划分成第一数量个区间;将每个区间内的边界点进行拟合,得到初始直线簇;在初始直线簇中确定拟定直线簇;其中,拟定直线簇中的每条直线的方向与初始解码方向的夹角小于预设平行角度,且拟定直线簇中的每条直线的拟合误差小于预设误差阈值;计算拟定直线簇在初始直线簇中的占比,如果占比大于占比阈值,确定拟定直线簇为平行直线簇。
[0136] 可选地,上述根据初始解码方向以及所有边界点的位置,在目标数据区中确定平行直线簇的过程,包括:将目标数据区内的边界点在初始解码方向的垂直方向进行投影,得到投影后的分布曲线;确定分布曲线中数值大于预设峰值的投影点作为峰点;判断每相邻的两个峰点之间的距离的差值是否小于距离阈值;如果是,根据各个峰点对应的边界点进行直线拟合,得到平行直线簇。
[0137] 可选地,上述装置还包括:目标数据区确定模块,被配置为从条码图像中提取左行提示符、右行提示符和数据字符中的一个或多个区域作为目标数据区。
[0138] 可选地,上述装置还包括:边界线提取模块,被配置为在目标数据区中提取边界线;其中,边界线用于分割目标数据区与条码图像中的其他区域;边界方向确定模块,被配置为将边界线的方向确定为边界方向。
[0139] 可选地,上述获取所述条码图像中的目标数据区的边界方向的过程,包括:在目标数据区中提取两条初始边界线;判断两条初始边界线是否满足预设平行关系;如果是,将任意一条初始边界线的方向确定为目标数据区的边界方向。
[0140] 结合图10所示,本公开实施例提供一种用于确定解码方向的装置,包括处理器(processor)100和存储器(memory)101。可选地,该装置还可以包括通信接口(Communication Interface)102和总线103。其中,处理器100、通信接口102、存储器101可以通过总线103完成相互间的通信。通信接口102可以用于信息传输。处理器100可以调用存储器101中的逻辑指令,以执行上述实施例的用于确定解码方向的方法。
[0141] 此外,上述的存储器101中的逻辑指令可以通过软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。
[0142] 存储器101作为一种计算机可读存储介质,可用于存储软件程序、计算机可执行程序,如本公开实施例中的方法对应的程序指令/模块。处理器100通过运行存储在存储器101中的程序指令/模块,从而执行功能应用以及数据处理,即实现上述实施例中用于确定解码方向的方法。
[0143] 存储器101可包括存储程序区和存储数据区,其中,存储程序区可存储操作系统、至少一个功能所需的应用程序;存储数据区可存储根据终端设备的使用所创建的数据等。此外,存储器101可以包括高速随机存取存储器,还可以包括非易失性存储器。
[0144] 本公开实施例提供了一种解码设备,包含图像采集装置、处理器和上述的用于确定解码方向的装置,其中,图像采集装置被配置为获取条码图像,该解码设备根据图像采集装置采集的条码图像,利用上述用于确定解码方向的装置确定出条码图像的解码方向,处理器根据解码方向对条码图像进行解码,得到条码图像包含的信息。
[0145] 本公开实施例提供了一种计算机可读存储介质,存储有计算机可执行指令,所述计算机可执行指令设置为执行上述用于确定解码方向的方法。
[0146] 本公开实施例提供了一种计算机程序产品,所述计算机程序产品包括存储在计算机可读存储介质上的计算机程序,所述计算机程序包括程序指令,当所述程序指令被计算机执行时,使所述计算机执行上述用于确定解码方向的方法。
[0147] 上述的计算机可读存储介质可以是暂态计算机可读存储介质,也可以是非暂态计算机可读存储介质。
[0148] 本公开实施例的技术方案可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括一个或多个指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本公开实施例所述方法的全部或部分步骤。而前述的存储介质可以是非暂态存储介质,包括:U盘、移动硬盘、只读存储器(ROM,Read‑Only Memory)、随机存取存储器(RAM,Random Access Memory)、磁碟或者光盘等多种可以存储程序代码的介质,也可以是暂态存储介质。
[0149] 以上描述和附图充分地示出了本公开的实施例,以使本领域的技术人员能够实践它们。其他实施例可以包括结构的、逻辑的、电气的、过程的以及其他的改变。实施例仅代表可能的变化。除非明确要求,否则单独的部件和功能是可选的,并且操作的顺序可以变化。一些实施例的部分和特征可以被包括在或替换其他实施例的部分和特征。而且,本申请中使用的用词仅用于描述实施例并且不用于限制权利要求。如在实施例以及权利要求的描述中使用的,除非上下文清楚地表明,否则单数形式的“一个”(a)、“一个”(an)和“所述”(the)旨在同样包括复数形式。类似地,如在本申请中所使用的术语“和/或”是指包含一个或一个以上相关联的列出的任何以及所有可能的组合。另外,当用于本申请中时,术语“包括”(comprise)及其变型“包括”(comprises)和/或包括(comprising)等指陈述的特征、整体、步骤、操作、元素,和/或组件的存在,但不排除一个或一个以上其它特征、整体、步骤、操作、元素、组件和/或这些的分组的存在或添加。在没有更多限制的情况下,由语句“包括一个…”限定的要素,并不排除在包括所述要素的过程、方法或者设备中还存在另外的相同要素。本文中,每个实施例重点说明的可以是与其他实施例的不同之处,各个实施例之间相同相似部分可以互相参见。对于实施例公开的方法、产品等而言,如果其与实施例公开的方法部分相对应,那么相关之处可以参见方法部分的描述。
[0150] 本领域技术人员可以意识到,结合本文中所公开的实施例描述的各示例的单元及算法步骤,能够以电子硬件、或者计算机软件和电子硬件的结合来实现。这些功能究竟以硬件还是软件方式来执行,可以取决于技术方案的特定应用和设计约束条件。所述技术人员可以对每个特定的应用来使用不同方法以实现所描述的功能,但是这种实现不应认为超出本公开实施例的范围。所述技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的系统、装置和单元的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。
[0151] 本文所披露的实施例中,所揭露的方法、产品(包括但不限于装置、设备等),可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,所述单元的划分,可以仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另外,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例。另外,在本公开实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。
[0152] 附图中的流程图和框图显示了根据本公开实施例的系统、方法和计算机程序产品的可能实现的体系架构、功能和操作。在这点上,流程图或框图中的每个方框可以代表一个模块、程序段或代码的一部分,所述模块、程序段或代码的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。在有些作为替换的实现中,方框中所标注的功能也可以以不同于附图中所标注的顺序发生。例如,两个连续的方框实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这可以依所涉及的功能而定。在附图中的流程图和框图所对应的描述中,不同的方框所对应的操作或步骤也可以以不同于描述中所披露的顺序发生,有时不同的操作或步骤之间不存在特定的顺序。例如,两个连续的操作或步骤实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这可以依所涉及的功能而定。框图和/或流程图中的每个方框、以及框图和/或流程图中的方框的组合,可以用执行规定的功能或动作的专用的基于硬件的系统来实现,或者可以用专用硬件与计算机指令的组合来实现。