基于FPGA的二维码图像旋转系统
扫描二维码
随时随地手机看文章
摘 要: 阐述了在图像预处理阶段将二维码图像旋转至端正的必要性。设计了一种求取QR二维码图像旋转角度的算法以及一种可将二维码图像旋转任意角度的算法。求取旋转角度算法简捷有效,能以较低的硬件代价实现。图像旋转算法利用了CORDIC算法以及双线性插值算法,采用高速流水线架构在FPGA上实现。整个设计在Altera公司的DE2平台下进行了验证。实验结果表明,这两种算法结合使用可以快速有效地将带有一定歪斜角度的二维码图像旋转端正,速度可以达到90.9 MHz,旋转后的图像细节清晰,能有效提高二维码的识别率。
关键词: 图像旋转;FPGA;二维码;CORDIC
近年来,物联网技术高速发展,已成为各国的发展战略,受到高度重视。在物联网的应用和实现过程中,条码技术(可分为一维条码和二维条码)是信息识别领域最为重要和关键的技术之一。如今二维条码技术已经在物流、通信和工业领域中得到了广泛应用[1]。
因图像采集环境复杂多变,采集到的二维码必须进行图像处理才能达到理想的识别率。二维码图像预处理包括灰度化、滤波去噪、二值化、图像旋转和图像去光照等步骤。由于通过摄像头采集到的图像或多或少都会有一定的歪斜,所以将图像旋转端正对二维码图像识别来说是必不可少的[2-3]。
本文基于CORDIC算法,设计了一种高速流水线的图像旋转算法。算法只包含加法和移位操作,在FPGA上的验证结果表明,本设计的电路精度高,速度快,可以适用于实时二维码图像识别。
1 二维码图像采集和显示
在本系统中,图像采集采用OV7620摄像头。OV7620是一种CMOS图像传感器,具有软件可编程性,可以通过SCCB总线协议进行其工作模式的配置,被广泛应用在网络摄像头、摄像手机等产品中。首先基于SCCB协议的寄存器配置电路对OV7620进行初始化,然后设计了摄像头图像采集程序,通过SRAM控制器将采集到的图像存入SRAM中,并在LCD上实时显示出来。摄像头采集与显示框图如图1所示。
2 图像旋转角度的获取
由于受采集环境、摄像头和图像采集者等多种因素的影响,采集到的二维码图像一般都会有一定的歪斜。要将二维码图像旋转端正,首先需要知道二维码图像歪斜的角度。QR码图像在左上角、左下角和右上角各有一个位置探测图形,每个位置探测图形可以看作是由3个重叠且同心的正方形组成,它们分别为7×7个深色模块、5×5个浅色模块和3×3个深色模块。如图2所示,位置探测图形的模块宽度比为1:1:3:1:1。符号中其他地方遇到类似图形的可能性极小,因此可以通过扫描整个二维码图像找出3个位置探测图形,根据3个位置探测图形的相对位置判断出图像的歪斜角度。
式(3)为CORDIC算法的基本旋转公式。可以看出,CORDIC算法是由一系列简单的移位和加法操作组成的。它实际上是一种逐次逼近的坐标旋转方法,每次旋转都使累加的旋转角度之和与目标旋转角更接近。迭代次数n越大,旋转的角度就与真实的角度越接近。在实际应用中,受硬件资源限制,不可能迭代很多次。实际上,对于n次迭代,CORDIC算法的旋转精度为arctan2-(n-1)。当n=8时,旋转精度可达0.447 6°,满足实际应用的需要[4]。