摘 要: 介绍了一种基于SoPC的QR二维码识别系统,其目的在于为手持和嵌入式设备提供一种识别速度快、成本低、接口灵活的QR码识读方案。该系统包括图像采集、图像预处理、QR码解码及纠错、外设接口等组成单元。图像采集单元驱动CMOS摄像头获取QR码图像,图像预处理单元将QR码图像进行一系列预处理以方便解码,QR码解码及纠错单元实现对QR码的纠错与解码。
关键词: SoPC;QR二维码;NIOS II;FPGA
随着信息技术的发展,条码技术作为一种在全球范围内广泛使用的自动识别技术,在交通运输、物流仓储、商品销售、生产自动化管理等领域发挥了巨大的作用,条码技术的使用,极大地提高了数据采集和信息处理的速度,为现代社会的发展做出了重要贡献[1-2]。
二维条码是在一维条码无法满足实际应用需求的前提下产生的,相比一维条码,其具有信息容量大、支持多种字符、可加密、可纠错等突出优点。但由此产生的问题是二维条码的识别比一维条码复杂,识读设备成本高、耗时长,限制了二维条码的进一步发展[3]。
本文选取二维条码中使用最广的QR(Quick Response)二维码,在分析国内外QR二维条码识读方案的基础上,提出了一种基于SoPC的QR二维条码识别系统设计,能够降低识读设备成本,对QR二维条码在国内的推广普及、便利人们的生活具有重要意义。
1 基于SoPC的QR二维码识别系统设计
1.1 系统平台设计
基于DE2开发板搭建的识别系统平台如图1所示。图中虚线框为基于友晶DE2开发平台定制的SoPC系统,包括NIOS II处理器、图像采集、图像预处理、QR码识别硬件加速、外设接口及存储等组成单元[4]。图像采集单元通过图像采集模块驱动CMOS摄像头获取QR码图像。图像预处理单元根据摄像头获取的QR码图像进行一系列预处理以方便解码。QR码识别硬件加速单元结合NIOS II处理器对处理后的QR图像进行解码。外设接口单元主要包括按键及LCD显示,存储单元包括SRAM、SDRAM、Flash等存储器及其控制接口[4]。
1.2 图像采集与显示
QR码图像由OV7670摄像头获取,有两种显示方式,一种是拍摄QR码图像时实时显示拍摄画面;另一种是解码完成后,由NIOS II处理器驱动LCD显示解码结果。其结构图如图2所示。
1.3 图像预处理的FPGA实现
图像采集单元获得的为RGB彩色图像,首先将其灰度化以方便处理,然后进行中值滤波以滤除噪声,再进行二值化以分离背景,最后通过几何校正消除拍照角度的影响,其处理流程如图3所示[3]。
1.3.1 图像的灰度化
图像灰度化是将摄像头获取的RGB565数据提取亮度分量Y,FPGA实现方式如下:
(1)将RGB565数据转变为RGB888数据;
(2)RGB888数据提取亮度分量Y:
Y=0.299R+0.587G+0.114B(1)
将式(1)两边系数分别乘以256,将系数取整后变形为:
256Y=(64+8+4)R+(128+16+4+2)G+(16+8+4+2)B
(2)
通过式(2)可以将小数乘法转换为移位和加法,可方便地在FPGA中实现。
1.3.2 图像的中值滤波
图像中值滤波可以有效滤除摄像头引入的噪声,并能很好地保持图像的边沿[2]。在FPGA实现时,需要先产生滤波窗口,然后对窗口中的数据进行快速排序,选取中值替换原来的灰度值。由FPGA实现的中值滤波框图如图4所示。由图4可知,生成3×3滤波窗口后,可以进行快速排序选取中值。
1.3.3 图像的二值化
以某一灰度t为门限将图像分割成2个区域:灰度小于等于t的像素区域A(目标类)和灰度大于t的像素区域B(背景类)。大津法把两类的类间方差作为判别准则,认为使得σ2值最大的t即为所求的最佳阈值(方差越大,说明构成图像的两部分差别越大)。
其中,PA、PB表示A、B两类出现的概率,?棕A、?棕B表示A、B两类的灰度均值,?棕O表示总的灰度均值,σ2为类间方差。为方便在FPGA中进行处理,对式(3)化简如下:
ini为灰度值>t的所有像素点的累计灰度。因为N是已知的,只要求得式(4)右边式子中最大的t即为所求的最佳阈值。FPGA实现框图如图5所示。
其中,统计模块1统计图像总像素数和总的累计灰度,统计模块2统计各灰度值对应的像素点数,统计模块3统计小于等于灰度值i的所有像素点数,统计模块4统计小于等于灰度值i的所有像素点的累计灰度。得到上述值后就可以送到计算模块计算各灰度值对应的类间方差,取类间方差最大的灰度值作为最佳阈值,对图像进行二值化。
1.3.4 图像的几何校正
由于摄像头拍摄角度的原因,二维码图像一般都会有一定的偏转角度,为方便解码,通常先将二维码进行旋转使其端正[3]。QR码图像在左上角、左下角和右上角各有一个位置探测图形,每个位置探测图形可以看作是由3个重叠的同心正方形组成的,其模块宽度比为1:1:3:1:1,符号中其他地方遇到类似图形的可能性极小,因此可以通过扫描整个二维码图像来找出3个位置探测图形,根据3个位置探测图形的相对位置判断出图像的偏转角度θ,如图6所示。
设(x,y)为原图像旋转角度后的新坐标,(x′,y′)为原图像中的对应坐标。则(x,y)与(x′,y′)的对应关系为[5]:
x′=cosθ(x+y×tanθ)
y′=cosθ(y-x×tanθ)(5)
由式(5),结合NIOS II处理器,就可以将图像旋转至端正,使其便于解码。
1.4 QR二维码解码实现
图7所示为QR码符号版本7的结构图,每个QR码符号由名义上的正方形模块构成,组成一个正方形阵列,由编码区域和包括位置探测图形、分隔符、定位图形、校正图形在内的功能图形组成。功能图形不能用于数据编码。符号的四周由空白区包围。另外有格式信息区域、版本信息区域以及数据和纠错码字区域[5,2]。
根据QR二维码图像特点,在NIOS II中进行解码的子程序的软件流程图如图8所示。当采集到QR码图像经过图像预处理后,得到的是端正的二值图像,进行以下操作:(1)扫描位置探测图形以定位QR图像;(2)确定校正图形中点,求取模块宽度;(3)对图像建立采样网络以获取采样数据,从采样数据中可以得到格式以及掩膜信息;(4)根据格式及掩膜信息从采样数据中提取QR编码数据并纠错;(5)解码数据得到最终信息[2,7]。
2 系统测试
系统搭建完成后,利用PsqrEdit_Zh软件制作了一系列QR码来测试系统的性能,图9所示为其中一幅QR码图像的识别,可以看到其版本为2、纠错等级为L、包含的信息为一张英文名片。本设计制作了不同版本、不同纠错等级的QR码30张,可以识别其中的23张,识别率为76.7%。分析识别不了的主要原因是所采用的摄像头的分辨率只有320×240,当QR码模块数较多时,该分辨率下不足以对QR码图像进行正确采样。这一问题可以通过更换性能更好的摄像头解决。
实验证明本系统工作稳定、识别速度快、识别率较高,并且具有集成度高、接口灵活、成本低等优点,可以很方便地用于手持设备和嵌入式设备中。该系统对QR二维条码在国内的推广普及、便利人们的生活具有重要意义。
参考文献
[1] 国家质量技术监督局.快速响应矩阵码[M].北京:中国标准出版社,2001.
[2] 中国物品编码中心.二维条码技术与应用[M].北京:中国计量出版社,2007.
[3] 刘东,高两全.QR码图像处理及识别算法研究[J].信息技术,2004,28(1):61-63.
[4] 基于SoPC的二维条码PDF417识别系统的设计[D].重庆:重庆大学,2009.
[5] 陈怡,张萌.基于FPGA的二维码图像旋转系统[J].电子技术应用,2012,38(7):12-14.
[6] Altera.SoPC builder handbook[EB/OL].http://www.altera.com.cn/literature/lit-sop.jsp,2011-07.