新闻中心

EEPW首页>EDA/PCB>设计应用> 基于NiosII的二维条码识别系统设计

基于NiosII的二维条码识别系统设计

作者: 时间:2009-07-02 来源:网络 收藏

2核心算法
条码译码主要流程是首先对条码进行自适应二值化,然后对条码进行定位、旋转、分割。分割出单个码字后,通过边缘检测,得到条码条空序列模块宽度后,再进行纠错解码。
传统算法在对条码定位时多采用Hough变换,通过Hough变换提取条码图像中的直线倾角来旋转条码。但是Hough变换的大运算量并不适用于实时性要求高的的嵌入式设备。笔者结合PDF417条码自身的特点,采用4点定位的方法来分割条码,有效提高速度。核心算法流程详细步骤如下:
(1)条码定位
实际采集条码时会出现各种倾斜,如图6所示。如何定位条码是关键的问题。可以利用条码起始头特有的比例来定位。按照国标的定义,PDF417条码的起始符黑白条空比是81111113,终止符黑白条空比是711311121。扫描图像的每一行,分别匹配起始符和终止符的条空比。考虑到条码采集过程中,边缘受高斯点扩展函数的影响,只要黑白条空比例的误差不超过三位,可近似认为符合比例。标记所有符合起始符条空比比例条码线段,可以得到4个控制点a、b、c、d,用同样的方法可以寻找符合终止符条空比的条码线段,确定点e、f、g、h。判断a、c、e、g是否为正确控制点的标准是,平行边长度误差在5个像素点内,且相邻边角度为90°,其误差角度为2°。


(3)行条码分割及行高确定
由于PDF417条码是层叠式条码,在对单行条码码字进行识别时,必须得到条码的行数,然后分离出每一行。首先对条码使用Sobel算子进行水平边缘检测,如图7所示,然后向水平方向投影,如图8所示。

已知p(x)对应投影的峰值,也就条码的边界,通过对投影下来的每个值求一次差分 p(x),然后逐个判断各个差分值,如果连续两个投影的差分值前一个是负数而后一个是0或者正数,则说明此点是峰值。峰值处的坐标即为条码分层的地方,考虑到条码层与层连接的地方在二值化时会出现噪点,则取每层条码图像中间的50%作为有效图像。
(4)码字识别
分割出单个码字后,得到条空的像素个数,记为{M1,M2,…,M8},因为4个条和4个空的总模块数为17,可以根据式(1)得出条模块数的集合{T1,T2,T3,T4)。同样,用Ki替代式(1)中的Ti,可得到空模块数的集合{K1,K2,K3,K4}。



因PDF417条码用了三个簇的数据来组成一个条码,三个簇的数据量较大,且每个簇中的数据与条空比无一致对应关系,所以就涉及把条空比转换成条码数据的问题。本算法采用的解决方案是:用哈希算法来查找:
F=Z×1400+K2×216+T3×36+K4×6+T (2)
式(2)中Z为空1模块数和条2模块数的组合,再利用F的值进行查找,实现数据流的译码。数据流译码不是本文重点,这里不再详细阐述。



评论


相关推荐

技术专区

关闭