本发明涉及条形码识别技术领域,特别是涉及一种基于Zbar的条形码图像识别算法。
背景技术:
条形码是将宽度不等的多个黑条和空白,按一定的编码规则排列,用以表达一组信息的图形标识符。随着科技的迅速发展,条形码技术日趋成熟,在商品流通的各个领域皆有应用。条形码上承载着商品的各种信息,是供应链管理的基础技术,是管理现代化的重要手段之一。对条形码的精确识别大大加快商品流通,增强企业竞争力。
当前图像式条形码识别主要采取基于软件编程技术和硬件技术两种方案。与硬件识别系统相比,基于软件编程技术的识别方案具有非接触性、效率高以及成本低廉等优点,识别系统具有较好的灵活性和较低的成本,发展潜力更大。其识别方式主要有两种:其一是根据条形码编码规则,利用编码原理识别。其二是使用开源工具包识别。由于每种条形码对应一种识别算法,所以方式一的编程像中的条形码信息。当前开源工具包主要有Zbar和ZXing,都可用于多种格式条形码。ZBar工具包基于C语言编写,解码效率高,作为windows平台首选。
基于Zbar工具包的识别方法有直接识别法和条形码区域识别法。直接识别法算法简单,流程可分为图片读取、灰度化以及调用Zbar识别三步,在识别较小图像时表现很好,但对于复杂图像,识别速度和准确度不佳。条形码区域识别法识别流程由图像校正、条码区域截取以及调用Zbar识别三个模块组成。条码区域法适用于所有图像,但由于流程复杂以及矫正无倾斜图像导致耗时较长。
技术实现要素:
本发明的目的在于提供一种基于Zbar的条形码图像识别算法,可以很好地解决xx的问题。
为了实现上述目的,本发明提供了以下技术方案:
本发明提供一种基于Zbar的条形码图像识别算法,包括以下步骤:
101、将源图进行图像压缩得到缩略图,根据直接识别法识别缩略图条形码;若识别成功则转到结束流程,否则执行下一程序;和/或
102、将源图进行图像增强得到增强图,根据直接识别法识别增强图条形码;若识别成功则转到结束流程,否则执行下一程序;和
103、将源图进行图像压缩得到压缩图,根据条码区域识别法检测压缩图的倾斜角度,然后,使用该倾斜角矫正源图和/或压缩图得到目标图,在目标图中定位矩形区域并检测条形码;若识别成功则转到结束流程,否则显示错误信息并转到结束流程;和
104、结束流程:显示识别信息,算法结束。
与现有技术相比,本发明具有以下优点:
本发明的基于Zbar的条形码图像识别算法,利用直接识别法和条码区域识别法结合成一种递进式的条形码压缩识别算法,在速度和识别率上都优于直接识别法和条码区域识别法,能够在较短时间内完成条码识别,达到较高识别率。
下面通过附图和实施例,对本发明的技术方案做进一步的详细描述。
附图说明
图1为本发明的实施例的流程框图;
图2为本发明的识别法实施例流程图;
图3为本发明的识别法实施例所采用的直接识别法流程图;
图4为本发明的识别法实施例所采用的条码区域识别法流程图;
图5为本发明的实施例的识别图像测试用编码图;
图6为本发明的实施例的识别图像测试时间图。
具体实施方式
以下结合附图对本发明的实施例进行说明,应当理解,此处所描述的实施例仅用于说明和解释本发明,并不用于限定本发明。
实施例1
如图1-6所示,本实施例提供一种基于Zbar的条形码图像识别算法,包括以下步骤:
步骤101、按比例(第一比例值)将源图进行图像压缩得到缩略图,根据直接识别法识别缩略图条形码;若识别成功则转到结束流程,否则执行下一程序;和/或
步骤102、将源图进行图像增强得到增强图,凸显源图细节,根据直接识别法识别增强图条形码;若识别成功则转到结束流程,否则执行下一程序;和
步骤103、按大比例(第二比例值)将源图进行图像压缩得到压缩图,根据条码区域识别法检测压缩图的倾斜角度,然后,使用该倾斜角矫正源图和/或压缩图得到目标图,在目标图中定位矩形区域并检测条形码;若识别成功则转到结束流程,否则显示错误信息并转到结束流程;和
步骤104、结束流程:显示识别信息,算法结束。
本实施例中,直接识别法主要使用图像压缩和图像增强处理,分别解决耗时长以及图像模糊问题,参见图3。在进行直接识别法识别条码时,根据参数使用opencv对源图进行压缩,算法识别缩略图,减少识别耗时;算法使用拉普拉斯算子对源图进行增强,解决图像模糊。
拉普拉斯算子可以很好的处理拍摄的模糊图像。拉普拉斯算子是一种二阶微分算子,一个连续的二元函数f(x,y),其拉普拉斯运算定义为:
对于数字图像,拉夫拉斯算子可以简化为:
g(i,j)=5f(i,j)-f(i+1,j)-f(i-1,j)-f(i,J+1)-f(i,j-1),
也可以表示为卷积的形式,即
式中,i,j=0,1,2,…,N-1;k=1,l=1,H(r,s)取样如下式:
本实施例中,条码区域识别法首先对源图大比例压缩,检测压缩图倾斜度并矫正源图和/或压缩图得到目标图,再根据目标图定位矩形区域,使用小比例压缩图来完成条形码区域的截取,加快运行速度,参见图4。
针对倾斜图像,先进行矫正得到目标图dstG。检测图像倾斜度则是矫正关键,倾斜度检测Hough变换实现。条码区域识别法的矫正源图的具体流程如下:
1)为减少计算量,压缩源图得到压缩图srcC;
2)为加快DFT变换速度,扩展压缩图srcC为DFT变换最佳尺寸;
3)将单通道的实部和虚部mat融合成多通道的mat,存储变换结果;
4)进行DFT变换并拆分其结果为实部和虚部;
5)对源图进行二值化并进行Hough变换;
6)获取倾斜角度矫正源图srcG和/或压缩图srcC得到目标图dstG。
其中,Hough变换是从图像中识别几何形状的基本方法之一,其原理在于利用点与线的对偶性。将原始图像中曲线检测问题转化为寻找参数空间中的峰值问题。点-线对偶原理如图一所示,标准霍夫变换如等式:
ρ=x cosθ+y sinθ,ρ≥0,0≤θ<2π,
其中,(x,y)表示笛卡尔坐标系中的一点,(ρ,θ)表示霍夫变换参数空间中的参数,图像空间中共线的点在参数空间中相交于一点。
校正后,需要从目标图dstG中定位条码所在矩形区域,对矩形区域进行识别。本实施例的定位条形码区域的处理流程如下:
1)滤波降噪,对目标图进行高斯平滑滤波抑制服从正态分布的噪声;
2)水平垂直梯度差,使用Sobel算子求得灰度图像梯度差;
3)均值滤波,消除高频噪声;
4)二值化,根据阈值进行二值化,为闭运算做准备;
5)闭运算,填充条码间隙;
6)腐蚀,去除背景中的孤立点;
7)膨胀,填充腐蚀造成的空隙;
8)区域定位,通过findContours定位条形码区域的矩形边界。
其中,通过对灰度图像二值化处理,能够凸现出感兴趣目标的轮廓。为得到理想二值图像,本实施例采用改进的OTSU算法进行二值化:先求出图像每个不连续局部的最佳阈值,并求出此时最大类间方差,然后比较局部最大类间方差,找出其中最大局部类间方差所对应的阈值,即全局最优阈值。二值化的具体流程如下:
1)计算图像的直方图;
2)计算灰度级个数为0的灰度级L,存储在数组a[m]中,其中min(image) 3)初始变量:初始最优目标值g=0;初始最优阈值T=min(image);初始循环变量i=min(image); 4)循环计算目标值g0并判断:If(g0>g){g=g0,T=i+1}; 5)把g存储到一维数组sum中; 6)i=a[j](j=1,2,3…m)时转到步骤4);i>=a[m]停止; 7)找出sum中最大的一项,并计算其所对应的阈值T; 8)根据阈值T进行二值化。 膨胀是所有向量加之和的集合,向量加法的两个操作数分别来自于X和B,并且取到任意可能的组合。膨胀的计算式如下: 腐蚀对集合元素采用向量减法,将两个集合合并。腐蚀算法是膨胀算法的对偶运算,公式表达如下: 腐蚀与膨胀的关系可以描述为: 其中,BT是B关于参考点的转置,可以根据此式,利用膨胀运算来实现腐蚀运算。 当然,在具体实施过程中,步骤101及步骤102可以选择其中一个;或同时采用步骤101及步骤102,此时依步骤101、步骤102的次序进行。步骤103中,可选择对源图或压缩图矫正成目标图;也可以依先后次序对压缩图、源图矫正成目标图,此时,先对压缩图矫正成目标图,若识别不出再对源图矫正成目标图进行识别,最后再执行结束流程。 本实施例识别法采用以下步骤,先用直接识别法处理压缩及增强图像,再用条形区域识别法处理源图,见图2-4。为测试改进流程后识别系统性能,分别使用直接识别法、条码区域识别法和本实施例识别法对公共数据集的不同类型图片做测试,对识别率和识别时间进行详细的分析。从公共数据集中选择六种不同编码类型的条码图像进行实验,条形码源图像如图5所示(标注文件名即图像条码类型)。多次测试并且求取稳定结果值,三种不同算法耗时如图6所示,测试结果表明本实施例识别法优于目前的两种识别法。 本实施例识别法在速度和识别率上都优于直接识别法和条码区域识别法,能够在较短时间内完成条码识别,达到较高识别率,适用于所有图像。 应当理解,本发明上述实施例及实例,是出于说明和解释目的,并非因此限制本发明的范围。本发明的范围由权利要求项定义,而不是由上述实施例及实例定义。