引言
目前,条码技术,尤其是二维条码技术应用广泛。2006 年, 中国移动正式推出了手机二维条码业务,主要应用于移动增值服务。2009年,铁道部门正式用QR码取代一维条码应用于火车票票据的检测。可以预见随着3G时代的到来、现代物流业的发展以及物联网的推广,条码识别和应用必将得到全面的飞速发展。
1 QR码简介
QR码是由日本Denso公司于1994年9月研制的一种矩阵二维条码符号。它具有信息容量大、可靠性高、可表示文字图像等多种信息、保密防伪性强等优点,还具有高速全方位识读、能有效表示中国汉字与日本汉字等主要特点。如图1所示,每个QR码符号由编码区域和功能图形组成,其*能图形包括位置探测图形、分隔符和校正图形。
图1 二维条码QR码
2 系统总体设计
2.1 系统硬件结构
图2 WinCE硬件架构
本系统采用基于WinCE嵌入式的智能手机为硬件平台,其硬件结构如图2所示。主处理器DSP上外接摄像头控制器、LCD控制器、SRAM控制器、通用GPIO口、UART口等。摄像头完成图像数据的采集后,系统会在SRAM中创建一片视频帧缓冲区,通过Allocator组件来进行动态管理,将捕捉到的图像一路传给主处理器DSP进行图像实时处理,另一路传给LCD控制器进行图像的预览。主处理器负责主界面的显示/条码的实时识别和解码,以及输入信息的处理。
2.2 系统软件流程
系统软件在基于WinCE 6.0的Windows Mobile 5.0 Pocket PC和Windows Mobile 5.0 SmartphONe平台上使用C++语言实现。软件主要分为图像采集模块、图像预处理模块、识别解码模块和应用模块4个模块。图像采集模块主要完成条码图像的采集,一方面通过摄像头进行数据采集实时解码,另一方面把采集的图像数据送屏幕显示。图像预处理模块主要是对采集的QR码图像进行预处理,包括灰度化、中值滤波、二值化等,为识别解码做好前期准备工作。识别解码模块主要功能包括QR条码的检测、定位、分割、识别以及条码解码。应用模块主要包括发送邮件、拨打电话、访问网址、存储条码信息和短信应用等。软件流程如图3所示。
图3 软件设计流程
3 QR码识别解码的核心算法
考虑到QR码图像的特点、嵌入式平台的处理速度、条码本身的污染扭曲,以及在图像采集过程中光照不均、抖动等因素,QR码识别解码的基本过程是:首先对采集的彩色图像进行灰度化、滤波、二值化,接着在二值化图像中扫描QR码图像,将其从图像中分割出来,进行解码。
3.1图像灰度化、滤波与二值化选取彩色图像的G值(绿色分量)为灰度图像I(x,y)的值,并使用中值滤波去噪声。二值化采用OSTu算法计算阈值。Ostu算法效果好,但计算量比较大,可将图像分成7×7个小分块,对每一个小分块使用Ostu算法计算阈值从而来降低时耗。
3.2 条码检测、定位及矫正
在获取QR码图像数据时,可能会因为拍摄角度等原因造成图像几何失真,例如获取的QR码图像为任意四边形,则须对失真图像进行反透视变换[4]。变换算法如图4所示。
图4 反透视变换
(u,v)是失真图像的坐标,(x,y)是基准图像的坐标,A′B′C′D′为任意四边形,ABCD为矫正后的正方形,则对于u、v坐标系A′B′C′D′任意四边形中的任意一点(u,v),对应在x、y坐标系上的点(x,y),可通过转换公式