一种基于自适应边缘检测和映射模型的一维码识别算法
【专利摘要】本发明公开了一种基于自适应边缘检测和映射模型的一维码识别算法。该算法利用一维码四个角点对一维码图片进行投影变换,校正一维码图像中可能存在的投影或者仿射变形,然后利用校正后的图像生成两种扫描线,一种是基于图像分块的,一种是基于梯度变化的,对于获得的扫描线采用一种自适应边缘检测算法来找到一维码条和空的边缘位置,接着采用一种边缘映射模型将获得的边缘位置映射到正确的编码位置,根据编码位置来获得条和空的宽度,从而依据条空的宽度比和编码规则求解一维码信息。按照本发明实现的一维码识别算法,能实现对变形,光照不均,噪声,模糊,以及变形加模糊的一维码都有较好的鲁棒性。
【专利说明】
一种基于自适应边缘检测和映射模型的一维码识别算法
技术领域
[0001] 本发明属于图像处理技术领域,涉及一种基于自适应边缘检测和映射模型的一维 码识别算法。
【背景技术】
[0002] -维码在生活和工业领域中都被广泛应用,目前生活中的一维码识别装置主要还 是激光扫描器,需要人为手持来实现识别,由于在日常生活中对于时间的要求不是很苛刻, 手持激光扫描器可以满足需求。然而在工业应用中,随着工业自动化的要求不断提高,希望 能够实现工业条码的自动识别,这是手持激光器没法满足的,因此基于图像的识别技术被 米用。
[0003] 图像识别技术只需通过CCD相机采集到一维码图像,然后利用图像处理算法来定 位到一维码的位置,以及进行正确解码。因此基于图像技术的一维码识别方法可以达到工 业自动化的要求。
[0004]目前在工业应用中,CCD相机采集到的一维码图像可能会出现旋转、变形、离焦模 糊、光照不均,甚至变形加模糊的情况,这些情况都会使得一维码条和空的宽度比发生变 化,给正确解码造成严重的干扰,使得一维码即使被定位到也不能获得正确的解码结果。
[0005] 目前的一些研究成果只能适应于上述影响中个别情况,但是难以解决所有情况。 因此,需要提出一种基于图像的一维码识别算法,对于旋转、变形、离焦模糊、光照不均,甚 至变形加模糊的情况都有较好的鲁棒性,在这些情况下都能够正确识别一维码。
【发明内容】
[0006] 针对现有技术的以上缺陷或改进需求,本发明提供了一种基于自适应边缘检测和 映射模型的一维码识别算法,由此解决了一维码识别算法中的变形和光线等原因引起的识 别精度不高的问题。
[0007] 为实现上述目的,按照本发明的一个方面,提供了一种基于自适应边缘检测和映 射模型的一维码识别算法,其特征在于,该算法包括如下步骤:
[0008] (1)投影校正
[0009] 依据所采集的所述一维码图像的四个角点,将所述四个角点所确定的矩形区域里 的像素进行投影变换,得到校正后的图像1C;
[0010] (2)自适应边缘检测,其中该步骤包括如下子步骤:
[0011] (2-1)创建两类扫描线:
[0012] 首先获得Μ条基于梯度的扫描线:
[0013] 第m条线的起始点hj/OhmAhmelUM]
,其中fr〇und是四舍五 入取整操作,则第m条基于梯度的扫描线计算如下:
[0014]
[0015] 获得Μ条扫描线中的每条扫描线的起始点:
[0016] hm(x+l)=hm(x)+fround(kA χ)
[0017] 获得Μ条梯度扫描线的集合:
[0018]
[0019]其次获得基于图像分块的扫描线:
[0020] 从校正后图像Ic中截取Ν块,第η个图像块的纵坐标起始点为hn = nA 2,终止点为hn + Ah,基于第η个图像块获得的第η条扫描线的计算如下,把图像分块中的像素点函数进行 求和:
[0021] 7~η?
[0022]共获得Μ+Ν条扫描线集合
[0023] (2-2)自适应边界检测
[0024]对通过所述步骤(2-1)中获得的扫描线集合Sdx)逐条进行处理,主要分为如下步 骤:
[0025] (2-2-1)对每条所述扫描线求取均值
其中尽7与扫描线Si(x)会形 成一系列的交点Ρ^( j),Ρ^( j)是第j个交点的坐标,j是在1和J之间,J表示总的交点数目, 对?^。)进行圆整,将其变为整数值;
[0026] (2-2-2)依据所获得的交点P^U),计算每两个交点间的扫描线的间隔均值
形成方波曲_
,其中t为交点的序号编号,t 在1与T之间,其中j是否是在1与T之间;
[0027] (2-2-3)由所述方波曲线0 (X)及参考线及;(X)按如下过程迭代来获得新的参 考线:
[0028]
[0029] 其中,y = 0.6,G(x)是一维高斯函数
当t = l时, < 所述迭代步骤中形成的参考线与扫描线会形成新的交点,如果t<T返回到第 二步形成新的方波曲线,同时t = t+l,否则进入步骤(2-2-4);
[0030] (2-2-4)完成T次迭代后,参考线<(λ·)与扫描线Si(x)的交点就是一维码条和空的 边缘位置;
[0031] (3)边缘映射
[0032] 所述校正后的一维码图像中的边缘位置和编码位置之间的关系为:
[0033] fb(fp(PT(j)))= yU(j)+b
[0034] 其中
[0035] ρο是一维码第一个边缘位置的坐标,c = sin9/(p〇cos9),θ是一维码平面与相机采 图平面的夹角,Ρ0是相机的焦距,Ρ是一维码到相机的距离
;目当于缩放项,其不影 响像素宽度的比值,所以可以简化为1,所以
[0036] fb为依据确定的模糊影响下的校正公式,轻微的模糊
对边缘位置的影响可以看做 是边缘位置的移动,观察发现条变宽、空变窄了,宽度变化相同,这里定义宽度变化为mur, 所以模糊的边缘位置校正公式为:
[0037] fb(PT( j)) = PT( j )+mur(_l)j,带入获得最终的校正模型为:
[0038] (4)对于变形的一维码,可以通过分块,将边缘位置分成K块,每一小块的变形可以 简化为投影变形;初始化参数是在1和J之间,J表示总的交点数目,叾是用于编 码的条和空的平均宽度,y =2,其余参数b,c,p〇和rbiur初始化为0,采用Levenberg-Marquardt算法迭代求取所有参数的最优解;将每组优化得到的编码位置U(T),其中,τ是每 组的位置索引,组合起来得到的U(j)值就是优化后的编码位置,利用U(j)进行解码,如果失 败,重新将U( j)分成K组,用LM算法对每组进行优化求解,组合得到新的U( j),在进行解码, 直至解码成功或者迭代次数达到设定阈值获得最终U(j);
[0039] (5)从所述步骤(4)获得一维码编码位置U(j)后,依据编码规则实现解码。
[0040] 按照本该发明实现的一维码识别算法,能够高效精确的实现一维码的识别,减小 因变形或者模糊引起的编码失误。
【附图说明】
[0041] 图1是按照本发明实现的一维码识别算法中的一维码图像示意图;
[0042] 图2是按照本发明实现的按照采集后的一维码投影校正示意图;
[0043] 图3是按照本发明实现的算法中的基于梯度的扫描线的示意图;
[0044] 图4是按照本发明实现的算法中的基于图像分块的扫描线的示意图;
[0045] 图5是按照本发明实现的自适应边界检测中的对扫描线求取均值的示意图;
[0046] 图6是按照本发明实现的自适应边界检测中的对扫描线求取方波曲线的示意图;
[0047] 图7是按照本发明实现的自适应边界检测中的对扫描线求取参考线的示意图;
[0048] 图8是按照本发明实现的自适应边界检测中的完成迭代之后所形成的最终结果;
[0049] 图9是本发明的正常一维码图像中边缘位置和编码位置的关系示意图;
[0050] 图10是按照本发明实现的边缘映射模型中的投影变形模型的示意图;
[0051] 图11是按照本发明实现的边缘映射模型中的模糊模型的示意图;
[0052]图12是按照本发明实现的边缘映射和解码流程示意图;
[0053]图13按照本发明实现的对EAN-13码条和空的边缘位置与编码位置获取的示意图。
【具体实施方式】
[0054]为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对 本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并 不用于限定本发明。此外,下面所描述的本发明各个实施方式中所涉及到的技术特征只要 彼此之间未构成冲突就可以相互组合。
[0055] 本发明提供了一种基于自适应边缘提取方法和映射模型的一维码识别算法,用于 提高在不同影响情况下的一维码的识别率。
[0056] 基于图像的一维码识别是指,计算出图像中一维码条和空的准确宽度,依据条和 空的宽度比,按照编码规则,得到对应的编码字符,从而获得一维码信息。
[0057]本发明的一维码识别方法分为投影校正,自适应边缘检测和边缘映射三个阶段。 以下对本发明提出的识别方法作如下详细说明,整个一维码识别方法具体包括步骤如下: [0058] (1)投影校正阶段
[0059] 依据一维码四个角点,如图1所示,"^",…^^为一维码的四个角点"等四个角 点所确定的矩形区域里(如图1虚线框内的区域)的像素进行投影变换,得到校正后的图像 I。,如图2所示,其中校正后的图像中条码的宽度为W,条码的高度为H。
[0060] (2)自适应边缘检测阶段
[0061 ]分成两步进行:一、创建扫描线;二、边缘位置检测。
[0062] (2.1)创建扫描线
[0063] 在本例实施中,主要创建两类扫描线,一种是基于梯度的扫描线,另一种是基于图 像分块的扫描线。在本发明中,采用上述两类的扫描线,能够显著地解决条码变形的问题, 而另外一类基于图像分块的扫描线,能够解决一维码图像采集中因为光照等因素引起的图 像噪声等问题。
[0064] 基于梯度的扫描线如图3所示,获得Μ条基于梯度的扫描线,第m条线的起始点hm (0) =mΔ 1,me [ 1,Μ],Δ,
其中fr〇und是四舍五入取整操作,则第m条基于梯度 的扫描线计算如下:
[0065] 获得每条扫描线的梯度系数:
[0066]
[0067] 获得Μ条扫描线中的每条扫描线的起始点:
[0068] hm(x+l)=hm(x)+fround(kA χ)
[0069] 获得梯度扫描线的集合:
[0070]
[0071] 其中x,y分别是一维码校正图像中像素点坐标,其中基于图像分块的扫描线。
[0072]如图4所示,获得N条基于图像分块的扫描线,从校正后图像I。中截取N块,第η个图 像块的纵坐标起始点为hn = η Δ 2,终止点为hn+ Δ h,基于第η个图像块获得的第η条扫描线的 计算如下,该计算方法主要是把图像分块中的像素点函数进行求和获得:
[0073]
[0074] 通过上述两种方法,共获得Μ+Ν条扫描线:ie[l,M+ N]〇
[0075] (2.2)自适应边界检测
[0076]对获得的扫描线逐条进行处理,自适应边界检测主要分为四步:
[0077] 第一步,对扫描线求取均
,如图5中直线所示的其中一条求取均 值后的结果,其中尽与扫描线Sdx)会形成一系列的交点PAjhPAj)是第j个交点的坐 标,j是在1和J之间,J表示总的交点数目,对进行圆整,将其变为整数值。
[0078] 第二步,依据所获得的交点,计算每两个交点间的扫描线的均值
形成类似于方波的曲线
其中t为交点的序号编号,t在1与Τ之间,其中j是否是在1 与J之间,其中方波曲线如图6所示。
[0079] 第三步,由获得的方波曲线和参考线<来获得新的参考线,如图7所示,
其中,y = 〇.6,G(x)是一维高斯函数,
.。新的参考线与扫描线会形成新的交点,如 果t<T返回到第二步形成新的方波曲线,同时t = t+l,否则进行第四步。
[0080] 第四步,完成T次迭代后,参考线与扫描线31(1)的交点就是一维码条和空的 边缘位置,如图8所示的位置。
[0081 ] (3)边缘映射模型
[0082] 对于正常的一维码图像,边缘位置和编码位置之间的关系(以EAN-13码为例)如图 9所示和图13所示,为线形关系P T(j)=yU(j)+b,其中γ和b为常数,PT(j)是图片中一维码 的边缘位置,U(j)为模型映射后得到的编码位置,D(j)是取整后的编码宽度,γ是图片中条 和空的最小宽度。
[0083] 由于变形或者模糊的影响,对于通过两相邻的边缘位置求差得到的条或空的宽度 除以最小的条或空的宽度得到的编码宽度并不一定准确,因此需要建立不精准的边缘位置 和准确的编码位置之间的关系模型。其中本发明涉及的一维码识别算法中的投影变形的模 型如图10所示,模糊模型如图11所示。
[0084] 校正后的一维码图像中的边缘位置和编码位置之间的关系为:
[0085] fb(fp(PT(j)))= yU(j)+b
[0086] 其中fp为依据图10确定的投影变形关系推导得到的校正公式为:
[0087]
[0088] ρο是一维码第一个边缘位置的坐标,c = sin9/(p〇cos9),θ是一维码平面与相机采 图平面的夹角,Ρ0是相机的焦距,Ρ是一维码到相机的距离相当于缩放项,其不影 ? <J
响像素宽度的比值,所以可以简化为1,所b
f b为依据图11确 定的模糊影响下的校正公式,轻微的模糊对边缘位置的影响可以看做是边缘位置的移动, 观察发现条变宽空变窄了,宽度变化相同,这里定义宽度变化为mur,所以模糊的边缘位置 校正公式为fb(P T( j)) =PT( j )+mur(-l)j,带入获得最终的校正模型为:
[0089] 对于变形的一维码,可以通过分块,将边缘位置分成K块,每一小块的变形可以简 化为投影变形。初始化参数(7(/:) = 5/, j是在1和J之间,J表示总的交点数目,3是用于编码 的条和空的平均宽度(以EAN-13条码为例,用来编码的一个字符需要两个条和两个空,总宽 度为7,m = 7/.4 = 1.75 ),y = 2,其余参数b,c,p〇和rbiur初始化为0。用Levenberg-Marquardt (LM)算法迭代求取所有参数的最优解。将每组优化得到的编码位置υ(τ)(τ是每组的位置索 弓丨)组合起来得到的U(j)值就是优化后的编码位置,其数值为亚像素精度。利用U(j)进行解 码,如果失败,重新将U( j)分成K组,用LM算法对每组进行优化求解,组合得到新的U( j),在 进行解码,直至解码成功或者迭代次数达到设定阈值。具体的流程如图12所示。
[0090] (4) 一维码解码
[0091] 获得一维码编码位置U(j)后,条和空的编码宽度为D(j) = fr_d(Uj+1-Uj),圆整误 差为E( j) = (Uj+1-Uj)-D( j),依据编码规则,用来编码一个字符的条和空的宽度总和是确定 的值,每个条和空的最大宽度和最小宽度是确定的(比如EAN-13条码,最小宽度为1,最大宽 度为4)。
[0092] 首先检测每个条和空的宽度,如果D(j)大于最大宽度,则将D(j)值修改为最大宽 度值,若D( j)小于最小宽度,则将D( j)值改为最小宽度值。然后检测用来编码每个字符的条 和空的总宽度(以EAN-13条码为例,用于编码的条和空的总宽度等于7),如果总宽度大于规 则确定的值,按照这些条和空的误差值由小到大依次对该误差所对应的条或空的宽度减去 1,直到宽度总和等于规定值为止;如果总宽度小于规则确定的值,按照这些条和空的误差 值由大到小依次对该误差所对应的条或空的宽度加上1,直到宽度总和等于规定值为止。最 后根据这些校正后的条码宽度对照编码规则进行解码,从而获得条码信息。
[0093] 本发明所提出的方法,利用建立多条不同的扫描线,应对变形和光照不均对于一 维码边缘位置提取的影响,提出自适应边缘提取算法,使得边缘位置提取能够避免噪声,光 照的引入伪边缘的情况。依据获得的边缘,通过建立边缘映射模型,来消除模糊和变形对条 码条和空的位置以及基准宽度影响,从而获得较为精确的条和空的编码位置。最后依据编 码规则对求得的条和空的宽度进行校正,进一步获得更为精确的编码宽度,从而准确地获 得一维码信息。图13按照本发明实现的对EAN-13码条和空的边缘位置与编码位置获取的示 意图。
[0094]本领域的技术人员容易理解,以上所述仅为本发明的较佳实施例而已,并不用以 限制本发明,凡在本发明的精神和原则之内所作的任何修改、等同替换和改进等,均应包含 在本发明的保护范围之内。
【主权项】
1. 一种基于自适应边缘检测和映射模型的一维码识别算法,其特征在于,该算法包括 如下步骤: (1) 投影校正 依据所采集的所述一维码图像的四个角点,将所述四个角点所确定的矩形区域里的像 素进行投影变换,得到校正后的图像IC; (2) 自适应边缘检测,其中该步骤包括如下子步骤: (2-1)创建两类扫描线: 首先获得Μ条基于梯度的扫描线: 第m条线的起始点hm(〇)=mAi,me[l,M]其中frcmnd是四舍五入取 整操作,则第m条基于梯度的扫描线计算如下:获得Μ条扫描线中的每条扫描线的起始点: hm(X+l)二hm(X)+f roui id(kA χ) 获得Μ条梯度扫描线的集合: 巧(.、·+〇 = /(-v+i,/?",(.v+i)) 其次获得基于图像分块的扫描线: 从校正后图像Ic中截取N块,第η个图像块的纵坐标起始点为hn = nA2,终止点为hn+Δ h,基于第η个图像块获得的第η条扫描线的计算如下,把图像分块中的像素点函数进行求 和:共获得Μ+Ν条扫描线集合,ie[l,M+N]; (2-2)自适应边界检测 对通过所述步骤(2-1)中获得的扫描线集合Si(x)逐条进行处理,主要分为如下步骤: (2-2-1)对每条所述扫描线求取均值,其中玲与扫描线Si(x)会形成一 系列的交点CX/'),片(./)是第j个交点的坐标,j是在1和J之间,J表示总的交点数目,对 巧(./)进行圆整,将其变为整数值; (2-2-2)依据所获得的交点种(./),计算每两个交点间的扫描线的间隔均值,形成方波曲线0 ,其中t为交点的序号编号,t 在1与T之间,其中j在1与T之间; (2-2-3)由所述方波曲线及参考线货;按如下过程迭代来获得新的参考 线:其中,y = 0.6,G(x)是一维高斯函数所述迭代步骤中形成的参考线与扫描线会形成新的交点,如果t<T返回到第二步形成新的 方波曲线,同时t = t+l,否则进入步骤(2-2-4); (2-2-4)完成T次迭代后,参考线皆(.、-)与扫描线Si(x)的交点就是一维码条和空的边缘 位置; (3) 边缘映射 所述校正后的一维码图像中的边缘位置和编码位置之间的关系为:P0是一维码第一个边缘位置的坐标,c = sin9/(p〇cos9),0是一维码平面与相机采图平 面的夹角,P0是相机的焦距,P是一维码到相机的距离,旧当于缩放项,其不影响像 素宽度的比值,所W可W简化为1,所化; fb为依据确定的模糊影响下的校正公式,轻微的模糊对边缘位置的影响可W看做是边 缘位置的移动,观察发现条变宽空变窄了,宽度变化为niur,所W模糊的边缘位置校正公式 为: fb(pT(j))=pT(j)+mur(-l)^带入获得最终的校正模型为:(4) 对于变形的一维码,可W通过分块,将边缘位置分成K块,每一小块的变形可W简化 为投影变形;初始化参数叫/)=而/',j是在1和J之间,J表示总的交点数目,品是用于编码的 条和空的平均宽度,丫 = 2,其余参数b,C,P日和niur初始化为0,采用Levenberg-Marquar化算 法迭代求取所有参数的最优解;将每组优化得到的编码位置υ(τ),其中,τ是每组的位置索 引,组合起来得到的U(j)值就是优化后的编码位置,利用U(j)进行解码,如果失败,重新将U (j)分成K组,用LM算法对每组进行优化求解,组合得到新的U (j ),在进行解码,直至解码成 功或者迭代次数达到设定阔值获得最终U(j); (5) 从所述步骤(4)获得一维码编码位置U(j)后,依据编码规则实现解码。
【文档编号】G06K7/14GK105975894SQ201610310506
【公开日】2016年9月28日
【申请日】2016年5月11日
【发明人】杨华, 陈廉政, 陈逸凡
【申请人】华中科技大学, 武汉华威科智能技术有限公司