孙洋洋,郭阳宽,张晓青
(北京信息科技大学仪器科学与光电工程学院,光电测试技术北京市重点实验室,北京 100192)
随着社会的发展,在物品流通和管理中记录物品的来源及途径的信息均以不同种类及数量的条形码粘贴在物品上,能同时获取每个环节的条形码信息是提高管理与流通物品效率的重要技术。物品上的条形码特点主要包括:所含的条形码数量及种类多、尺寸大小不一、条形码间距小且间隔中有文字、条码倾斜角度各异、物品上含有其他复杂几何形状、因物品的流通性导致条形码没有直接印在码盘上等。多个条形码的情况多见于超市货架上粘贴的价格条形码、电子加工厂元器件码盘上的条形码、快递包裹上的条形码等场景,多条形码的检测技术能够提高此类场景的识别效率、快速获取物品信息。本文以元器件码盘为例研究多条形码检测的方法。
目前已有的检测方法大多是研究单个条形码的情况,针对多条形码检测还没有提出解决方法。故提出一种在形态学的基础上通过定位条形码区域的整体边缘来同时检测多个条形码的方法,并进行条形码角度校正,为后续获取条形码信息准备了条件。实验验证该方法能够同时识别多个条形码,并能够准确获得所有条形码信息。
工业相机直接获得的图像包含颜色和灰度等无关的信息,对图像进行预处理,可减少其对条形码检测的影响。此处采取的预处理方法主要包括灰度化和二值化,利用传统的灰度处理的方法即可获得灰度图,而二值化的关键是阈值的选取。因检测的条形码图像其灰度背景固定,反复实验之后在[100~120]范围内确定阈值较合适。确定阈值之后根据式(1)可得到条形码图像的二值化图像g(x,y)。
(1)
式中:T为二值化确定的阈值;f(x,y)为图像中某一点(x,y)的灰度值。
高分辨相机采集到的待识别的多条形码原图如图1所示,该码盘上含有8个条形码,二值化所得到的图像如图2所示。
图1 原图
图2 二值化处理结果
二值化之后的图像,条形码区域出现黑色的缝隙,因此需要用形态学的方法进行黑色区域填充。对图像进行形态学处理,主要包括膨胀和腐蚀。膨胀和腐蚀是形态学中彼此对偶的图像处理方法。膨胀是将图像中的高亮部分扩大,腐蚀是将原图中的高亮部分缩小。膨胀或者腐蚀操作就是将图像(或图像的一部分区域,我们称之为A)与核(我们称之为B)进行卷积。式(2)是图像A被核B膨胀的公式,式(3)是图像A被核B腐蚀的公式。
A⊕B={x,y|Bxy∩A≠∅}
(2)
AΘB={x,y|Bxy⊆A}
(3)
式中:Bxy为当核B的原点移动到A中的某一点(x,y)的灰度值;∅为不包括任何像素即空集;A⊕B、AΘB分别为用核B对图像A进行膨胀、腐蚀的结果。
利用条形码特征的方法与形态学方法提取图1所示码盘上的条形码区域进行比较,如图3所示。
(a)基于条形码特征
(b)形态学方法
基于条形码特征的提取方法在提取多个条形码时出现条形码粘连现象,如图3(a)所示,而形态学方法能够将整个条形码区域提取出来,避免了这种问题,如图3(b)所示。
经过定位之后的图像,条形码区域呈现明显的矩形特征,利用轮廓检测方法检测矩形区域的边界,即可获得条形码区域。一个轮廓一般对应一系列的点,也就是对应图像中的一条曲线,从二值图像中查找到的轮廓边缘是很细的“白色”区域,此轮廓所确定的区域即为条形码所在区域,提取到的所有条形码区域如图4所示。
为了保证后续条形码识别效果,需要将提取的条形码进行角度校正,保证条形码处于水平放置(较长边与水平面平行)。解决条形码的倾斜问题,传统的方法是利用Hough变化提取条形码图像中水平和竖直的直线并计算直线的倾斜角度。而待检测的条形码尺寸较小且条形码之间的距离较近,利用传统的方法难度较大,故采用仿射变换旋转图像的方法校正条形码角度。
(a)条形码区域1
(b)条形码区域2
(c)条形码区域3
(d)条形码区域4
将定位出的特征区域经过基本形态学处理之后需确定校正角度a。条形码特征区域提取时利用最小外接矩形的方法获得特征区域的4个特征点,分别是矩形的中心坐标、宽度、高度、旋转角度,其示意图如图5所示。
图5 最小外接矩形旋转角度示意图
如图5,在图像数据存储中,坐标的原点在图像左上角,最小外接矩形的方法得到的旋转角度θ是水平轴(x轴)逆时针旋转,与碰到的矩形的第一条边的夹角。默认将这个边的边长作为w,另一条边边长作为h。在这里,w与h是按照长短来定义的。而为了保证校正之后的条形码的较长边水平放置,因此需要根据判断w和h值的情况来确定校正角度a,其确定如式(4)所示。
(4)
在opencv中,正角度是绕旋转中心逆时针旋转,负角度是绕旋转中心顺时针旋转。由式(4)调整角度校正后,能够保证条形码长边水平放置。
仿射变换是一种基于2×3矩阵进行的变换,任意一个仿射变换可以表达为乘以一个矩阵再加上一个向量的形式,如式(5)所示,代表这种变换的标准形式是2×3的矩阵,如(6)所示。
(5)
(6)
校正的旋转中心选取的是原图像的中心,导致校正之后的条形码中心不在新图像的中心,条形码区域不能完整显示,影响后续识别效果。因此需要在获得仿射变换之后的新图像前,计算生成的图像大小,来给仿射变换矩阵添加平移信息。新图像的尺寸示意图如图6所示。
(a) 原图像
(b)新图像
图6中的尺寸关系如式(7)、式(8)。
w1=w|cosa|+h|sina|
(7)
h1=w|sina|+h|cosa|
(8)
式中:角度a为校正角度;w、h分别为图像校正前的宽度和高度;w1、h1分别为图像校正之后新图像的宽度和高度。
根据新生成图像的大小,给仿射变换矩阵添加平移信息。经过调试后,确定变换矩阵需添加的平移量具体如式(9)所示。
(9)
修改仿射变换的变换矩阵之后校正图像,其结果如图7所示。图7(a)是未修改仿射变换算法之前的校正结果,可以明显看到条形码部分图像不在图像内,图7(b)为修改仿射变换算法之后的校正结果,明显看出条形码能够在图像中完整显示,完成校正。
(a)修改算法前
(b)修改算法后
码盘图像处理之后,提取的多个条形码图可以直接调用识别包进行解码,获得条形码的具体信息识别结果如图8所示。实验中用到的码盘含有8个条形码,利用文中的方法能够将其全部识别出来。采用市面上成熟的条形码扫描枪进行识别结果验证,验证结果如表1所示。
图8 元器件码盘条形码检测结果
表1中的待测条形码ID代表含有多个条形码的元器件码盘图从左下方到右上方的条形码顺序,将表1的识别结果与本文方法的识别结果对比,验证该方法的识别结果正确,故设计的多条形码检测方法可行。
本文提出了一种基于图像处理检测多条形码的方法。通过实验证明该方法能够同时识别码盘上的所有条形码,并能准确获取所有条形码的信息,给元器件码盘的流通和管理过程带来极大的便利。该检测方法也可以应用在其他需要同时检测含有多个条形码物品的工业领域。
表1 条形码扫描枪识别结果