背景技术
随着条码应用的加深,条码识别的设备也向小型化、安全可靠、多功能、经济适用、远距离、软硬件并举发展,出现了很多新型的设备。目前条码采集终端朝着集成多种通讯技术与网络技术一体化设备、便携性以及多功能综合的方向发展;条码的生成设备朝着小批量和专用性发展。具体表现有基于CDMA、GPRS的条码通讯识别条码和集数据采集、处理、交互、显示、认证等多功能一体的手机识读条码。国外的很多公司,已经很好地将条码技术与机器视觉有机的结合起来,应用到工业生产流水线的测量上,在欧美及日韩等国机器视觉的使用普及率已经相当高。2007年全球机器视觉市场总量约为90亿美元,并且以每年10.9%左右的速度迅速增长,到2012年将超过150亿美元。机器视觉技术发展最成熟而且使用量最大的地区主要集中在欧美和日本,知名厂商有PPTVision、Siemens、NI、Banner、Cognex等。
在实际的应用中,机器视觉一般很少作为一个单独的***,而是作为一个自动化***的一部分出现,在与数据采集、运动控制、逻辑控制和通讯网络相配合来实现其独特的优势。
目前,条码技术已经应用到我国很多的领域,有上千家企业与科研院从事条码方面研究、应用工作。其中,中国物品编码中心发明了汉信码,深圳矽感公司发明了GM码和CM码,这些自主知识产权的二维条码的研究已经打破国外科技公司在二维条码生成技术上的商业垄断。虽然国内在条码的生成与条码的识读算法方面取得了很大的进步,一些公司结合国外公司先进的产品以及识读技术进行二次开发与应用,还自主研发了具有知识产权的识读设备,但是和发达国家相比,仍有很大的差距,国际上应用较多的二维条码的核心识读技术仍然掌握在国外的科技企业手中。
陈媛媛等人提出利用投影图来对条码区域进行定位、提取。先对图像进行边缘检测,再对已经经过边缘处理的图像进行水平方向和垂直方向的投影,根据投影图中水平方向和垂直方向投影值比较大的区域来联合起来确定条码的大***置,最后将条码区域提取出来。这种方法是假设条码区域的边缘非常密集和复杂,与此同时,其他的区域边缘点比较简单而且灰度比较平坦。这种方法对背景简单、条码区域周围无太多干扰图案的图像比较适用,但对复杂背景的图像,则效果会大大降低。
目前一些方法均将图像进行分块,对每块计算所有点的梯度值来获取图像边缘,通过各个边缘点的方向以及数量等来判断是否为可能的条码区域,再对可能区域进行连通合并等处理来提取条码的区域。此方法是利用条码本身的纹理特征来去除条码伪区域。不过此方法对设定块的大小很关键,当块设置太大时,得到的区域会很大,而且包含一部分条码四周的物体,比较难进行潜在区域的选择;当块设置太小时,很难体现出条码的纹理特征。
吴佳鹏等提出基于Gabor滤波和BP神经网络的Data Matrix二维条码区域提取方法,其利用BP神经网络安装经Gabor滤波得到的图像纹理特征对像素进行分类,从而提取出条码区域。当背景比较复杂时,这种方法会将图像中灰度与条码区域相似的区域一同提取出来,形成大量伪区域,产生较高的虚警率。不过采用神经网络需要很多的训练样本,而且运行时间比较长,不太适合一般的日常的识别需要。
二维条码技术是一种全新的信息存储与传递技术,一直受到国际社会的重点关注。因其能提高信息的采集效率以及数据的处理速度而被广泛应用于信息化产业中。目前,二维条码几乎是在国外已经比较成熟,而国内仍处于研究阶段。尽管在条码的生成与识读技术方面取得了不小的进步,但与国外的条码技术水平仍存在较大的差距。
制约我国发展二维条码技术主要有三方面原因:
(1)、自主研发的二维条码虽然打破了国外公司在二维条码生成技术上的商业垄断,但是自主研发的二维条码应用范围很小,不被国际标准所接受。目前国际上通用的二维条码仍都是具有国际标准的二维条码。
(2)、对目前常用的二维条码识读核心技术并未完全掌握。识别算法的研究不是很透彻,很多是购买国外公司的识读软件开发包,未形成具有自主知识产权的识读算法。
(3)、二维条码的识读设备比较昂贵。虽然国内一些企业也设计与生成二维条码的识读设备,但是其产品大多是基于美国Sybol公司产品的二次开发,价格也相对较高;自主研发的识读设备在识读效果上又很难达到满意的效果。
因此,研究二维条码的识读技术、开发成本低的识读设备对推动二维条码技术在我国的发展、推进我国信息化的进程都有着非常重要的现实意义与长远意义。
发明内容
本发明的目的是克服现有技术中存在的不足,提供一种简单工况背景下的Data Matrix二维条码快速识别方法,其方法简单,计算量少,提高识别效率及识别精度,快速方便,安全可靠。
按照本发明提供的技术方案,一种简单工况背景下的Data Matrix二维条码快速识别方法,所述Data Matrix二维条码快速识别方法包括如下步骤:
a、采集包含有Data Matrix的灰度图像,并以所述灰度图像左上角为原点建立坐标系;利用Roberts边缘检测算子对所述灰度图像进行边缘检测,且利用最大类间方差法(OTSU)对已进行边缘检测后的灰度图像进行二值化;
b、对上述得到的图像采用递归标记法进行区域标记;
c、根据Data Matrix条码外部轮廓为矩形,并利用区域面积对上述标区域标记后的图像进行初步筛选,去除干扰区域后,初步获得包含Data Matrix条码区域的图像;
d、根据Data Matrix条码定位图像为“L”型直线,按照形状因子以及球状性进行二次筛选,筛选获得Data Matrix条码区域的图像;
e、对上述二次筛选获得Data Matrix条码区域的图像进行条码边界标记,并对获得的标记函数曲线进行求导,得到相应的导数曲线;根据导数曲线确定Data Matrix条码区域所需的旋转角度,以能根据旋转角度将Data Matrix条码区域旋转到水平正方位置。
对上述旋转到水平正方位置的Data Matrix条码区域采用网格法进行数据提取。
所述步骤a包括如下步骤:
a1、采用Roberts边缘检测算子进行边缘检测时,Roberts边缘检测算子的两个卷积核分别为 采用1范数梯度衡量幅值
a2、对上述边缘检测后的图像采用最大类间方差法阈值分割,剔除部分梯度较小的边缘点,以删除背景信息,保留前景目标信息。
所述步骤b包括如下步骤:
b1、对二值化后的图像从上往下、从左到右逐行逐列进行扫描,若在扫描时寻找到没有被标记过的点H,则给所述点H分配一个新的标记;
b2、若点H的邻域有目标像素则递归分频同一标记;
b3、将相互连接的像素全部进行标记,每个连通的区域采用同一的标记号,不同的连通区域采用不同的标记号;
b4、重复上述b1~b3的步骤,对图像中将未标记的目标点进行提前并对未标记目标点对应领域的目标点按照递归分配同一的标记号,直至图像中所有的目标点已经全部标记或寻找不到未标记的目标点。
所述步骤c中,计算步骤b中标记区域的相应面积,并将计算得到面积小于80个像素的区域筛除,初步获得包含Data Matrix条码区域的图像。
所述步骤d包括如下步骤:
d1、对初步获得包含Data Matrix条码区域的图像计算形状参数F,以获得若干类似于矩形的区域;
d2、筛选形状参数F在[4/π,7.2/π]的区域,并在筛选后的区域中计算球状性参数S;
d3、筛选球状性参数S在
的区域,以获得Data Matrix条码区域的图像。
所述形状参数F为F=‖B‖
2/(4πA),B为对应标记区域的周长,A为对应标记 区域的面积;面积A为
f(x,y)为对应标记区域内(x,y)的像素值,J为标记区域水平方向的大小,K为标记区域垂直方向的大小;球状性参数S为S=r
i/r
c,r
i,r
c分别表示标记区域对应内切圆、外接圆的半径;所述内切圆与外接圆的圆心均位于标记区域的重心上。
所述步骤e包括如下步骤:
e1、采用距离为角度的函数对区域边界进行标记,标记函数为λ=Wsecθ;其中,W表示重心到水平虚线边的距离或者是重心到水平实线边的距离,θ表示条码实线边上的点与重心间连接后的直线与水平方向的夹角,λ表示条码实线边上的点到重心的欧式距离;
e2、对所述区域边界标记函数求导后,寻找导数函数为0的点,并判断导数函数为0点是否为连续点,以获得Data Matrix条码中两条实线边的角度,并根据两条实线边的角度得到Data Matrix条码区域需要旋转的角度。
还包括步骤e3、沿着Data Matrix条码的实线边进行圆搜索,以得到Data Matrix条码实线的端点,并根据Data Matrix条码虚线边的交点,对Data Matrix条码准确定位。
采用8邻域的递归标记法进行区域标记。
本发明的优点:针对简单工业环境下条码图像,根据Data Matrix定位图形的特点,采用互相垂直方向上的差分作为梯度原理的Roberts算子进行边缘检测,有很强的针对性;在二值化等图像预处理后用8邻域递归法对图像中的区域进行标记,得到很多小区域后再然后结合Data Matrix的轮廓为矩形的特点,利用区域面积、形状参数和球状性对区域进行区域筛选,得到条码的大致区域,有很好的实时性。将条码2-D的“L”形边界用1-D的距离为角度的函数来表达,根据Data Matrix条码边界特性在边界函数中求取出边界的直线方程以及旋转的角度;并用圆搜索的方法减弱断裂直线对条码边界定位的影响;联立虚线边直线方程来确定虚线边的交点,达到对条码区域准确定位的目的。此边界标记算法是目前首先应用在条码的定位上,跳出了传统的条码定位思路,仅仅根据边界的标记曲线来对条码进行准确定位,不仅计算量小,还提高了Data Matrix的识别效率。
具体实施方式
下面结合具体附图和实施例对本发明作进一步说明。
本发明目的在于针对以往Data Matrix条码识别定位过分依赖与“L”形定位图形,且直线检测计算量大、耗时严重等缺点,提出在嵌入式***上实现二维条码快速、准确识别的方法。
如图4所示:在简单工况背景下,Data Matrix二维条码快速识别的方法包括如下步骤:
a、采集包含有Data Matrix的灰度图像,并以所述灰度图像左上角为原点建立坐标系;利用Roberts边缘检测算子对所述灰度图像进行边缘检测,且利用最大类间方差法(OTSU)对已进行边缘检测后的灰度图像进行二值化;
如图1所示:本发明所述待识别图像区域为矩形OXZY,并以O点为原点,OX方向为X轴,OY方向为Y轴,建立坐标系,图像像素坐标以该坐标系表示,且条码图像在该区域内;并且规定,后述图像及点坐标均以此坐标系为准。原点O为灰度图像的左上角;图像的二值化,就是将图像上的像素点的灰度值设置为0或255,也就是将整个图像呈现出明显的只有黑和白的视觉效果。
具体过程为:
a1、Roberts边缘检测算子对陡峭的低噪声图像有较好的处理效果,且能满足简单及快捷性要求,Roberts边缘检测算子是利用局部差分算子来寻找边缘的;采用Roberts边缘检测算子进行边缘检测时,Roberts边缘检测算子的两个卷积核分别为 采用1范数梯度衡量幅值
a2、对上述边缘检测后的图像采用最大类间方差法阈值分割,剔除部分梯度较小的边缘点,以删除背景信息,保留前景目标信息。
b、对上述得到的图像采用递归标记法进行区域标记;
采用8邻域递归标记法对图像进行区域标记,能较好地标记出连续区域,减少断裂的部分,具体地:
b1、对二值化后的图像从上往下、从左到右逐行逐列进行扫描,若在扫描时寻找到没有被标记过的点H,则给所述点H分配一个新的标记;
b2、若点H的邻域有目标像素则递归分频同一标记;
b3、将相互连接的像素全部进行标记,每个连通的区域采用同一的标记号,不同的连通区域采用不同的标记号;
b4、重复上述b1~b3的步骤,对图像中将未标记的目标点进行提前并对未标记目标点对应领域的目标点按照递归分配同一的标记号,直至图像中所有的目标点已经全部标记或寻找不到未标记的目标点。
c、根据Data Matrix条码外部轮廓为矩形,并利用区域面积对上述标区域标记后的图像进行初步筛选,去除干扰区域后,初步获得包含Data Matrix条码区域的图像;
当采用8邻域递归标记法标记后,计算各个标记区域的面积,因为是二值图片,面积计算就简化为对标记区域内像素点的计数;Data Matrix条码的最小规格是10*10,正常一个数据模块为3个像素,为保证可靠性以及边界跟踪可能不完全等因素,按照一个数据模块2个像素来进行计算,并将面积小于80个像素的区域筛除,初步获得包含Data Matrix条码区域的图像。
d、根据Data Matrix条码定位图像为“L”型直线,按照形状因子以及球状性进行二次筛选,筛选获得Data Matrix条码区域的图像;
由于Data Matrix条码一共具有30种规格,Data Matrix条码的寻位图形是一个“L”形的直线,考虑到是对Data Matrix条码的边缘像素进行计算,采用形状参数F进行筛选,又由于Data Matrix条码的寻位图形长宽比例范围为[1,4],采用球状性参数S筛选出标记的区域中条码区域;由于形状参数F计算简单,运算速度快,能初步筛选出目标区域,再用球状性参数S精确筛选出条码区域。
根据Data Matrix条码定位图像为“L”型直线,以及Data Matrix所有版本中定位图形的比例值范围,对步骤c筛选后的标记区域再按照形状因子及球状性进行二次筛选,具体地:
d1、对初步获得包含Data Matrix条码区域的图像计算形状参数F,以获得若干类似于矩形的区域;
所述形状参数F为F=‖B‖
2/(4πA),B为对应标记区域的周长,A为对应标记区域的面积;面积A为
f(x,y)为对应标记区域内(x,y)的像素值,J为标记区域水平方向的大小,K为标记区域垂直方向的大小;当标记区域为圆时,形状参数F等于1;而当标记区域为其他形状时,形状参数F大于1;
d2、筛选形状参数F在[4/π,7.2/π]的区域,并在筛选后的区域中计算球状性参数S;
球状性参数S为S=ri/rc,ri,rc分别表示标记区域对应内切圆、外接圆的半径;所述内切圆与外接圆的圆心均位于标记区域的重心上。不管圆心怎么选择,球状性参数S的值,当标记区域为圆时,都达到最大(S=1);而当区域为其他形状时则有S<1。球状性参数S比较适合当目标的变化既有伸长度方面的变化也有不规则性方面的变化,能够减少因轻微的条码变形或由于拍摄角度引起条码畸变等原因对条码初步定位的影响,提高条码初步定位的稳定性。
d3、筛选球状性参数S在
的区域,以获得Data Matrix条码区域的图像。
e、对上述二次筛选获得Data Matrix条码区域的图像进行条码边界标记,并对获得的标记函数曲线进行求导,得到相应的导数曲线;根据导数曲线确定DataMatrix条码区域所需的旋转角度,以能根据旋转角度将Data Matrix条码区域旋转到水平正方位置;
所述步骤e具体为:
e1、采用距离为角度的函数对区域边界进行标记,标记函数为λ=Wsecθ;其中,W表示重心到水平虚线边的距离或者是重心到水平实线边的距离,θ表示条码实线边上的点与重心间连接后的直线与水平方向的夹角,λ表示条码实线边上的点到重心的欧式距离;如图2所示;
因为Data Matrix条码区域包括两条实线边,针对Data Matrix条码的边界特点,采用距离为角度的函数来对边界进行标记。标记函数要求先求出对步骤d中获得Data Matrix条码区域的重心,然后获取两条实线上边界点与重心的距离为角度的函数。
这种标记不受Data Matrix条码区域平移的影响,但是会受Data Matrix条码区域旋转或者放缩而变换;放缩造成的影响是标记的幅度值会发生变化,这个问题可通过将最大幅度值归一化到单位值来解决,但是利用该标记受旋转的影响来获得条码的边界角度;
e2、对所述区域边界标记函数求导后,寻找导数函数为0的点,并判断导数函数为0点是否为连续点,以获得Data Matrix条码中两条实线边的角度,并根据两条实线边的角度得到Data Matrix条码区域需要旋转的角度;
因为Data Matrix条码的定位符号中有两条实边,另外两条虚线边,对获得的标记函数曲线进行一次求导,得到的导数曲线;求导后实线边是连续的,故在求导后的函数中寻找导数为0的点,进而判断该点是否是连续点就可获得2条实线边的角度,再取这两个角度的平均值就可得到条码需要旋转的的角度。当得到所需的旋转角度后,能够将获得Data Matrix条码区域旋转到水平正方的位置,以便对Data Matrix条码区域的读取,且对上述旋转到水平正方位置的DataMatrix条码区域采用网格法进行数据提取。
考虑到在边缘检测时,条码的实线边可能存在直线的断裂并在区域筛选时被筛选掉,所以仅根据“L”形边界标记函数来求取条码实线边的端点的位置是不可靠的。因而在边缘检测图上沿着条码实线边的方向进行圆搜索,确保实线边的完整的同时达到对条码位置的准确定位的目的。具体地为:
考虑图3的一般情况,“L”形边界与水平轴存在一定的角度,设点O(xo,yo),M(xm,ym),N(xn,yn),P(xp,yp),其中M、N、P对应的角度为θ1,θ2,θ3,与点O的距离对应为ρ1、ρ2、ρ3。
由已知重心点O(xo,yo)以及|MO|=ρ1、MO的角度θ1。可得方程:
解得点M的坐标:
同理可得N(xn,yn)、P(xp,yp):
直线MP、PN的方程为:
(xm-xp)y-(ym-yp)x+xmym-2xmyp+xpyp=0
(xn-xp)y-(yn-yp)x+xnyn-2xnyo+xpyp=0
因为Data Matrix的最小数据模板是3个像素,所以构建一个r=3、圆心在直线PM上的圆,并在PM的一端向前进行搜索。当在圆内存在5个以上的边界 点时,圆心就沿直线PM以直径2r为单位向前移动搜索。为了保证不丢失断裂的线段,当在圆的范围内无边界点或者边界点数目少于5个时则停止搜索,以最后搜索到的边界点到直线MP的垂足的点为实线边PM的另一个端点Q(xq,yq),同理可得实线边PN的另一个端点S(xs,ys)。
在Q点代入直线PN的斜率可得到直线QR的方程,在R点代入直线PM的斜率可得到RS的方程,直线QR、RS的方程为:
(xn-xp)y-(yn-yp)x-(xn-xp)yq+(yn-yp)xq=0
(xm-xp)y-(ym-yp)x-(xm-xp)ys+(ym-yp)xs=0
联立上述直线QR、RS方程可得到虚线边交点R(xr,yr):
具体实现:
①、以直线PM为圆心轨迹,半径r=3搜索边缘检测图上条码区域。为了保证运行,设置一个2维数组,一维用来存储圆心位置,另一维用来存储该圆内的边界点数目。按照半径r=3的取整欧式圆盘沿直线PM进行边界点搜索,并将搜索到的边界点数目存入二维数组中圆心对应的列中,一直搜索到新的圆内边界点数目不满足要求为止;
②、在最后满足要求的圆心的位置内,计算圆内各个边界点到直线PM的垂足位置,取垂足在直线PM最远值为条码此实线边的另一端点Q,并记录下Q点坐标;
③、采用同样方法获取条码另一实线边的端点S坐标;
④、联立直线RS、RQ的方程,得到交点R;
⑤、根据P、Q、R、S四点确定条码的位置,完成条码区域的准确定位。
本发明针对简单工业环境下条码图像,根据Data Matrix定位图形的特点,采用互相垂直方向上的差分作为梯度原理的Roberts算子进行边缘检测,有很强的针对性;在二值化等图像预处理后用8邻域递归法对图像中的区域进行标记,得到很多小区域后再然后结合Data Matrix的轮廓为矩形的特点,利用区域面积、形状参数和球状性对区域进行区域筛选,得到条码的大致区域,有很好的实时性。将条码2-D的“L”形边界用1-D的距离为角度的函数来表达,根据Data Matrix条码边界特性在边界函数中求取出边界的直线方程以及旋转的角度;并用圆搜索的方法减弱断裂直线对条码边界定位的影响;联立虚线边直线方程来确定虚线边的交点,达到对条码区域准确定位的目的。此边界标记算法是目前首先应用在条码的定位上,跳出了传统的条码定位思路,仅仅根据边界的标记曲线来对条码进行准确定位,不仅计算量小,还提高了Data Matrix的识别效率。