- 易迪拓培训,专注于微波、射频、天线设计工程师的培养
基于WinCE平台的QR条码识别系统
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),可通过转换公式
计算获得。通过已知四组点得到8个待定系数A、B、D、E、F、H、M、N,然后进行透视矫正。
根据QR码标准定义,QR码符号含有3个相同的位置探测图形。每个位置探测图形由3个重叠的同心正方形组成,其模块宽度比为1∶1∶3∶1∶1。其他地方遇到类似图形的可能性极小,因此可以在得到的二值化图像中迅速地识别可能的QR码符号,完成对条码的检测与定位[5]。但是,在对条码进行矫正时,需要知道4个顶点。通过定位3个位置探测图形可获得其中3个顶点,利用下面基于QR码纹理特征的算法来寻找第4个顶点。
首先根据已经得到3个顶点的位置,可以确定QR码符号的两条边界,及其边界直线斜率θ1、θ2,然后舍去其交叉的顶点。对于剩下的两个顶点,分别利用它作为直线上的一点,以一定范围的角度(-θ,θ)进行搜索来寻找条码边界,依据是包含条码跳数(黑块与白块交替一次称为一跳)最多的直线即为条码的边界。通过这种方法可以找出需要的另外两条边界,其交点即为第4个顶点。知道4个顶点以后,通过反透视变换将其矫正到正确位置,如图5所示。旋转后会产生锯齿边界,这里利用双线性插值对图像进行平滑处理[6]。对相邻的4 个像素进行插值,其单位正方形上任意一点f (x, y) 有:
在编程实现时,反透视变换和双线性插值同时进行。分割出QR码后进行解码,其解码过程不是本文重点,不再详细阐述。
图5 反透视变换
4 图像采集子系统
4.1 DirectShow体系结构
DirectShow是微软公司在ActiveMovie和Video for Windows的基础上推出的新一代基于COM的流媒体处理的开发包。其系统架构图如图6所示。DirectShow通过过滤器图表管理器(Filter Graph Manager)来与上层应用程序和下层的驱动进行联系。应用程序可以通过Filter Graph Manager提供的一组组件对象模型接口来访问过滤器或者控制多媒体数据流,例如控制数据帧率、图像大小、图像质量等等。在本系统中采用COM组件来访问DirectShow中的过滤器,从而获得QR码图像数据。
图6 DirectShow系统架构图
来源:维库开发网
上一篇:直接数字频率合成器DDS的优化设计
下一篇:重复数据删除技术的发展及应用