一种DataMatrix二维码的识别方法与流程

文档序号:12305909阅读:2414来源:国知局
本发明属于图像处理与识别领域,涉及一种二维码的定位识别方法,特别涉及一种datamatrix二维码的识别方法。
背景技术
::datamatrix二维码(dm码)是二维码的主要成员之一,广泛应用于工业制造领域以及民用领域。dm码由美国国际资料公司(idmatrix)发明,是一种矩阵式二维条码,它是现有二维条码中尺寸最小,密度最大,25mm2的面积可以编码30个数字,尤其适合于小零件的标识与直接印刷在实体上。dm码广泛使用于商品的防伪、统筹标识,虽然dm码的标准已经公开,但在国内研究的并不多。目前国内使用的dm码识别底层算法主要还是从国外进口,国外的产品识别率虽然高,但价格比较昂贵,且识别的原理没有公开,因此有必要自主研发一种dm码识别算法,以解决目前国内dm码识别依赖进口的现状,具有很高现实意义。在二维码识别领域,条码的定位与识别是难点,也是重点。关于条码的图像处理与定位,国内有些学者已经做过一些有益的研究,有采用纹理特征区域筛选的,有直接采用霍夫直线检测的,有采用神经网络方法的,他们有各自的适用范围及优缺点。目前国内现有的dm码识别技术的适用范围受限,对于某些背景复杂,有噪声的图像,识别率不高,或者时间消耗较长,不能满足实际应用的实时性,特别在嵌入式dm码识别的实时性要求。技术实现要素:本发明要解决的技术问题在于,针对现有技术的上述缺陷,提出一种datamatrix二维码的识别方法,图像适应能力较强,识别率高,并且速度快。本发明解决其技术问题所采用的技术方案是:提供一种datamatrix二维码的识别方法,包括:dm码粗定位的步骤,其具体包括图像边缘计算处理、二值化处理、池化处理、滤波处理、连通域标记处理以及候选图案切割处理;dm码精定位的步骤,其具体包括迭代法二值化处理、robert算子边缘计算处理、霍夫直线检测处理、“l”边直线筛选处理、虚边定位处理、虚边标志与模块计算处理;以及dm码识别的步骤,其具体包括网格数据获取处理和数据解码处理。其中,所述的图像边缘计算处理是采用自定义边缘检测算子对原图像进行边缘检测,自定义边缘检测算子为:其中,还包括:对原图进行金字塔变换,取第二层图像作为dm码粗定位的图像输入。其中,所述的池化处理是采用n×n的矩形区域,其中有大于等于t个白点,该区域池化为255,否则为0。其中,所述的图像滤波处理是求取当前点的八个邻域,如果有其中一个点为255,且当前点为255时,则置该当前点为255,否者为0。其中,所述的霍夫直线检测处理的核心计算代码为r=(x*costable[θ]+y*sintable[θ])>>n,即通过查表、整型乘法与移位操作实现,其中,r为极径,θ为极角,x,y为坐标值。其中,所述的网格数据获取处理采用了把定位到的x,y坐标分别在其左右、上下偏移1~2个像素,共有设定9个标志×标志的网格数据阵列送入解码模块解码,一旦某个阵列能解码就输出结果。其中,所述的网格数据获取处理是获取网格数据之前是对粗定位的图像进行迭代法二值化的;并且,把用迭代法求得的二值化阈值基础上加与减一个数值,作为不能解码的候选阈值;进一步地,把自适应二值化法二值化图像,作为不能解码的另一候选阈值。其中,还包括:在当前识别不成功时,更换候选区域进行再次尝试,直到成功解码或已经切割设定个数。其中,所述候选图案切割处理是切割下一个近似正方形且边缘信息丰富的最大连通域。本发明的有益效果在于,首先通过图像边缘计算、二值化、池化、滤波、连通域标记与候选图案切割等处理,完成dm码的粗定位;接着,通过对切割的图案进行迭代法二值化、robert算子边缘计算、霍夫直线检测、“l”边直线筛选、虚边定位以及虚边标志与模块计算等处理,完成dm码的精定位;然后,通过对精定位的dm码进行网格数据获取与数据解码等处理,完成dm码的识别,图像适应能力较强,识别率高,并且速度快。附图说明下面将结合附图及实施例对本发明作进一步说明,附图中:图1是本发明实施例的主流程图。图2是本发明实施例经过池化滤波后的样图。图3是本发明实施例经过霍夫直线检测后的样图。具体实施方式现结合附图,对本发明的较佳实施例作详细说明。参见图1,图1是本发明实施例的主流程图。本发明提出本发明一种datamatrix二维码的识别方法,包括s1、s2、s3、s4四大步骤。其中,步骤s1是对dm码进行粗定位,具体包括:对获取的图像进行自定义边缘检测,然后采用自动阈值二值化、图像池化、图像滤波、图像连通域的计算、找到近似正方形且边缘信息丰富的最大连通域,接着找到该连通域的上下左右四个顶点,然后根据四个顶点,把该矩形图像从原图中切割出来。步骤s2是对dm码进行精定位,具体包括:迭代法二值化粗定位图像、robert算子边缘检测、霍夫直线检测、l边直线筛选、虚边定位、符号(symbol)与模块(module)计算、dm码四个顶点坐标计算。步骤s3是对dm码进行识别,具体包括:根据dm码精定位的结果对它进行网格数据获取,然后把网格数据送入dm码解码模块解码。步骤s4是在当前识别不成功时,更换候选区域进行再次尝试,具体包括:如果解码未成功,就切割下一个近似正方形且边缘信息丰富的最大连通域(具体地,先求得连通域矩阵的直方图,即得到最大的连通域到最小的连通域所有连通域数值表,然后根据连通域直方图从大到小依次选择候选连通域),再进行精确定位,获取dm码网格数据,把数据送入dm码解码模块,直到成功解码或已经切割设定个数(例如:三个,具体数量,根据实际应用环境选择)以上满足条件的连通域才终止算法。在本实施例中,步骤s1具体包括以下六个子步骤。步骤s11、自定义边缘算子计算图像边缘;也即,采用自定义边缘检测算子对原图像进行边缘检测,其中,自定义边缘检测算子如下所示:用g1,g2算子分别对原图像进行计算,且一并计算边缘检测后的直方图。值得一提的是,如果原始图像分辨率较大时(该参数可以读图像文件获取或直接作为参数输入),可以对原图进行金字塔变换,取第二层图像作为dm码粗定位的图像输入,以加快粗定位速度。步骤s12、二值化阈值求取与二值化;也即,通过步骤s11获得的直方图,求取经过边缘检测后图像的二值化阈值,根据二值化阈值二值化经过步骤s11处理的边缘图像。步骤s13、阈值法图像池化;也即,对步骤s12处理后的图像进行池化。具体地,是采用n×n的矩形区域,其中有大于等于t个白点,该区域池化为255,否则为0。可以理解的是,采用n×n的矩形作为图像池化尺寸,并选取t作为池化阈值,该参数对正常应用的二维码图像具有较强的适应性,池化后不仅能够把dm码中间空心的部分变成实心,还能大大加快粗定位速度。步骤s14、图像滤波;也即,对步骤s13处理过后的图像进行滤波,消除孤立白点。具体地,是求取当前点的八个邻域,如果有其中一个点为255,且当前点为255时,则置该当前点为255,否者为0,图2示意出的一个经过池化滤波后的样图,图中最里层最大白色连通块对应于二维码区域。步骤s15、图像连通域标记;也即,对步骤s14处理后的图像进行连通域标注,把连通域的标号放到一个标记矩阵中。具体地,连通域标注的具体步骤如下:e1)初始化一个标记矩阵a,一个队列q及标记计数器n;e2)从左至右,从上至下顺序扫描待标记图像,当扫描到一个未标记的前景像素p时,n加1,在a中标记为p,接着扫描p的八个邻域,若存在未被标记的前景像素,则在a中标记,并放入队列q中,作为区域生长的种子;e3)当队列q不为空时,从队列中取出一个生长种子s,扫描s的八个邻域点,若有未标记的前景像素,则在a中标记,并入队列q;e4)检测队列q是否为空,非空转移到步骤e3,否者转移到步骤e5;e5)检测待标记图像是否扫描完毕,如果未扫描完成,转移到步骤e2,否则结束连通域标记。步骤s16、检测出近似正方形且边缘信息丰富的连通域;也即,根据步骤s15处理后的连通域矩阵,找出其中上下左右四个边界组成的矩形近似正方形、且内部边缘信息很丰富的最大连通域图像块。在本实施例中,步骤s2具体包括以下九个子步骤。步骤s21、从原图中切割候选区域图像;也即,根据步骤s16获取到的四个边界坐标,在原图中切割该图像块。步骤s22、迭代法二值化切割图像;也即,对步骤s21获取的图像块,采用迭代法二值化。步骤s23、robert边缘算子边缘计算;也即,采用robert算子处理步骤s22处理后的图像,具体地,robert算子如下所示:与求取|g(x,y)|=max(|f(x,y)-f(x+1,y+1)|,|f(x+1,y)-f(x,y+1|)做为结果。步骤s24、霍夫直线检测;也即,霍夫直线检测经过步骤s23处理后的图像,图3示意出dm码经过霍夫直线检测记录下来的10条直线样图,霍夫直线检测的具体步骤如下:j1)对二值图像进行霍夫变换;j2)求出变换域中最大的点并记录它们的极径r与极角θ;j3)把满足变换域中等于r与θ及其附近对应的直角坐标点记录下来,直线记录数量num加1;j4)将其变换域中等于r与θ及其附近的点清0;j5)如果num小于k,则表示还未记录满k条直线坐标,转移到步骤j2,否者结束。值得一提的是,在本实施例中,霍夫直线变换核心计算代码:r=x*cosθ+y*sinθ不是采用浮点数乘法,而是分别把cosθ与sinθ乘以2n取整后做成查找表,代码变为r=(x*costable[θ]+y*sintable[θ])>>n,所以核心计算公式由浮点数乘法变成整型乘法与移位操作,算法速度大大加快。步骤s25、“l”边候选直线筛选;也即,初步筛选l边直线及计算l边直线斜率k与截距b,具体地,对k条直线进行筛选,其筛选条件如下:k1)检测这k条直线连续长度是否大于40(单位:像素距离)以上;k2)检测这k条直线两两直线相减的角度绝对值是否在90°附近(例如:85°~95°)与270°附近(例如:265°~275°);k3)检测出这k条直线两两相交的交点,其交点是否离直线的起点或终点比较近(例如:两两相交的交点坐标,离直线的起点或终点坐标只差十几个像素距离);步骤s26、两条实边三个顶点坐标定位;也即,综合上述三个筛选条件,初步筛选出“l”边直线,从筛选的“l”边抽取其线上的点,采用最小二乘法进行直线拟合,求出直线斜率k与截距b。步骤s27、两条虚边定位;也即,定位dm码虚边坐标。步骤s28、计算dm码虚边symbol与module。步骤s29、根据两实边两虚边计算四个顶点。在本实施例中,步骤s3具体包括以下两个子步骤。步骤s31、二维码网格数据获取;也即,计算dm码的四个顶点坐标及l边直线方程、步骤s29计算得到的symbol与module,获取dm码网格数据,其具体步骤如下所述:m1)找到“l”边的三个顶点;m2)确定三个顶点的方位,按dm码的“l”边在左下方为基准进行网格数据划分与获取;m3)把定位到的“l”边的顶点及其它坐标分别在其左右、上下偏移一个约数值为1.0到2.0值(算法坐标计算是浮点数,取图像数据时会插值取整计算),进行网格数据获取,所以本实施例,共获取9个symbol×symbol的网格数据。值得一提的是,由于图像的光照原因或图像本身质量不是太理想,dm码精定位可能存在误差,为了使得到的网格数据能正确解码,本发明采用了把定位到的x,y坐标分别在其左右、上下偏移1~2个像素,所以本发明共有9个symbol×symbol的网格数据阵列送入解码模块解码,一旦某个阵列能解码就输出结果。值得一提的是,在具体实施获取网格数据之前,获取网格数据之前是对粗定位的图像进行迭代法二值化的,二值化阈值的选取受图像光照、对比度的影响,可能采用迭代法或其他阈值选取方法,二值化效果不是最佳,所以在本实施例中,把用迭代法求得的二值化阈值基础上加与减一个数值,作为不能解码的候选阈值。为了进一步减少光照对二值化的影响,在本实施例中,还采用了自适应二值化法二值化图像,作为不能解码的另一候选阈值。这种的采用迭代法、迭代法基础上加减某一数值、自适应二值化方法共四次二值化目标图像,能够减少由于二值化阈值不是最优而不能解码的几率,提高dm码的识别性能。步骤s32、datamatrix二维码解码;也即,根据步骤s31获得的网格数据送入dm码解码模块进行解码。在本实施例中,步骤s4是对是否成功解码或已经切割三个以上进行判断,是的话,就结束算法,否则转到步骤s2中的起始子步骤s21处。在一个具体实施中,是将实现上述方法的代码,移植到嵌入式处理器dspc66xx平台,测试200万像素图像。经实验测试,在图像背景较复杂时,算法最长耗时约233毫秒,能够满足工业、民用等领域dm码实时性识读要求。综上,本发明的datamatrix二维码的识别方法,首先,通过图像边缘计算、二值化、池化、滤波、连通域标记与候选图案切割等处理,完成dm码的粗定位;接着,通过对切割的图案进行迭代法二值化、robert算子边缘计算、霍夫直线检测、“l”边直线筛选、虚边定位以及虚边标志与模块计算等处理,完成dm码的精定位;然后,通过对精定位的dm码进行网格数据获取与数据解码等处理,完成dm码的识别,图像适应能力较强,识别率高,并且速度快。另外,借助精心设计的图像池化、多个粗定位候选区域切割、精确定位误差消除与基于多阈值二值网格数据的获取,有利于改善识别率与速度性能,很好地适用于工业制造机器视觉、民用等领域应用。应当理解的是,以上实施例仅用以说明本发明的技术方案,而非对其限制,对本领域技术人员来说,可以对上述实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改和替换,都应属于本发明所附权利要求的保护范围。当前第1页12当前第1页12
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1