基于图像处理的复杂条件下手机二维码识别黄宏博1,穆志纯2(1.北京信息科技大学计算中心,北京100192;2.北京科技大学信息工程学院,北京100083)0引言在自动识别技术中,二维条码技术以其低成本、快速识读、大信息量、高安全性等优点,在社会生活中应用越来越广泛。物联网技术的蓬勃发展,也对二维条码技术提供了广阔的应用空间。相应的二维条码编码、解码技术研究已经很多,应用上也基本成熟。目前,随着移动通信技术的飞速发展,手机的拥有量和使用量越来越大,功能也越来越强。二维条码技术和移动通信技术的结合,促成了手机二维码的诞生。因此,研究在手机等带有摄像头的智能嵌入式设备中的解码技术变得非常必要。与PC系统下的解码方式相比,手机型号多种多样,性能差别很大,摄像头拍摄时受环境干扰也多。在复杂条件下如何有效进行二维条码解码的研究就显得非常必要。本文以QR二维条码为例,通过图像处理技术对带有摄像头的智能设备采集的二维条码图像进行分析处理,解码出二维条码的编码信息,为手机二维码的广泛应用打下一定的技术基础。1)QR码简介QR码是快速识别矩阵码(quickresponsecode)的简称,最早由日本Denso公司在1994年9月推出,我国于2000年底颁布了QR码的国家标准。QR码符号呈正方形,由空白区、功能图形区、数据图形区组成。功能图形区又分为位置探测图形、校正图形、格式信息、版本信息、定位图形等不同图形格式,如图1所示。各部分图形都由深色模块(代表二进制1)或浅色模块(代表二进制0)组成,位置清晰,功能性强,有利于进行图像处理和识别。根据编码数据量的多少,QR码可以分为40个版本,版本1符号大小为21×21模块。从版本1到版本40,符号容量越来越大,相应的图像所占打印面积也随之增大,每增大一个版本,符号图像的每边就增加4个模块。QR码有较强的数据容错能力,使用Reed-Solomon码进行差错控制。根据需要,可以设定L、M、Q、H四个纠错等级,分别可恢复传输或识读出错的约7%、15%、25%、30%的码字信息。2)系统结构QR码作为手机二维码,其应用模式如图2所示。手机等智能设备通过摄像头采集带有条码符号的图像,对图像进行灰度化、二值化、旋转校正等预处理,进行条码检测。如果检测到非QR码,则重新采集;如果是QR码,则进行图像信息的取样。用Reed-Solomon码的译码算法对取到的数据进行纠错译码,统计出现的错误数量。如果错误数量超出纠错容量,则纠错译码失败,重新采集图像;如果可以正确进行纠错译码,则把纠错后的信息进行各种数据模式下的译码,恢复出编码信息,继而根据应用模式进行信息输出、发送短信或网址跳转等后续处理。1图像预处理1.1灰度化智能设备通过摄像头采集到的图像一般是彩色图像。因为QR码携带的信息只需深浅两色即可表征,所以可以把彩色图转换为灰度图,继而转换为二值图像来处理,灰度化和二值化后可以显著降低图像处理的复杂度。摄像头采集到的彩色图像,一般是在RGB空间编码的。每个像素分别用1个字节表示R、G、B三原色。如果把RGB空间转换为YUV色彩空间,那么Y分量刚好表示像素的亮度,可以作为灰度值。转换公式为转换时,不必计算U和V两个分量的值,只需按照Y=0.299R+0.587G+0.114B(2)计算每个像素对应的灰度值,存储为1个字节(即256灰度级)即可。1.2二值化在用手机摄像头采集图像时,由于拍摄条件不同,环境光源的干扰较多,采集的图像经过灰度化后光线往往是不均衡的,如图3(a)所示。如果直接对其进行二值化,使用单一阈值,则会把灰色的背景区域处理成为黑色前景,掩盖了条码符号的信息。图3(b)所示为使用全局阈值算法生成自动阈值进行二值化的结果。可见,用这种方法二值化的图像难以恢复条码信息。对照该图像的直方图可见,直方图信息明显分为3个波峰:第1个波峰对应黑色的条码模块;第2个波峰对应灰色背景;第3个波峰对应白色模块和空白区域。为此,考虑对图像进行分块,应用改进的Niblack局部阈值化算法,分别进行二值化[3-4]。图像的直方图如图3(c)所示,明显具有3峰结构。按照直方图计算3峰的区间,按区间边界的灰度值对图像进行分区。对每个区域分别二值化,再叠加,得到全局的二值化图像,如图3(d)所示。可见,多阈值进行的二值化效果明显高于单一阈值,可以有效去除光线不均的影响。为增强算法的适应性,避免对光线均衡图像处理的复杂化,可按照以下步骤分类进行:1)计算并考察输入图像的直方图,如果直方图呈现明显的双峰结构,说明该图像的光线均衡,直接用直方图双峰法计算全局阈值,对图像进行二值化;2)如果图像直方图呈现单峰或弱双峰结构,说明图像偏亮或偏暗,可使用Otsu算法计算全局阈值进行二值化;3)如果图像直方图具有明显的3峰结构,说明图像光照不均,可对图像进行分块,使用改进的Niblack多阈值方法二值化图像。图3多阈值二值化1.3畸变校正与图像裁切因为手机摄像头拍摄时物距较短,存在较明显的透视现象,所以拍出来的条码图像常常出现几何失真。QR码图像本应是一个正方形,拍摄的图像却畸变成一个不规则的四边形。出现几何失真的QR码图像,很难通过解码算法译出编码信息,必须进行校正。利用二维图像的投影变换,可以对失真图形进行校正。对手机拍摄的图像进行Hough变换,求出条码的4条边界线。由边界线求出A、B、C、D四个交点,如图4所示。图4图像的投影变换设P为拍摄图像中任意一点,用齐次坐标表示为(x,y,1)'。在校正图像中存在唯一的一点P'与P对应,其齐次坐标设为(xh,yh,h)',则存在投影变换矩阵T,满足P'=TP,即把'的齐次坐标转换为普通坐标,有其中t22为比例因子,可取为1。将图4中A、B、C、D四个顶点坐标以及对应的校正图中的A'、B'、C'、D'分别代入式(4)、式(5),可得8个方程,解出矩阵T中的8个未知数[5]。对拍摄图中的各像素,用式(3)计算得到校正值的坐标,再利用双线性插值方法进行插值,可直接得到旋转到水平方向的校正图,不需要再进行旋转校正。校正效果如图5所示。图5畸变校正手机拍摄QR码图像时,可能会同时采集到条码周围其他的图像。这些干扰图像会增加图像处理的复杂度,因此,可以把这些没必要的干扰图像通过裁切的方式去除。校正后,直接对正方形A'B'C'D'外的区域裁切,就可以去除其余背景。1.4符号定位QR码符号中有3个位置探测图形,分别位于符号图像4个角中的3个角,每个位置探测图像都是由固定深浅颜色的模块组成。模块深浅颜色顺序为深色—浅色—深色—浅色—深色,各元素宽度的比例为1∶1∶3∶1∶1。即使图像有旋转,位置探测图像的模块颜色顺序和宽度比例也不变。对二值化后的图像按行、列分别逐点扫描,把同一灰度级的相邻像素记录为线段。如果有5段线段的长度比例符合1∶1∶3∶1∶1,且深浅颜色顺序为深—浅—深—浅—深,则记录该线段。扫描完后,把行相邻的线段分为1组,去除与所有线段都不相邻的行线段(可能是随机的干扰线段)。同样处理列线段,把行线段组和列线段组中相互交叉的组分类,求出交叉的行、列线段组的中心点,即为位置探测图形的中心。2信息采样图像预处理时,已经在1.4节中得到了QR码3个位置探测图形中心和符号模块的大小。设符号图形左上角坐标为(x0,y0),模块大小为m像素。在符号图形A'B'C'D'范围内,以(x0+m/2,y0+m/2)为起点,m像素为间隔,在水平方向和竖直方向建立1个网格。则网格线的交点处,应对应1个模块的中心。为避免识别QR码大版本时,网格线间隔的误差积累过大,导致采样网格中心偏离正确模块现象,可以3个位置探测图形和版本中的校正图形为中心划分不同区域,在各区域分别建立区域网格进行模块采样,再把各区域的采样信息组合起来。尽管QR码有较强的纠错性能,但是在进行信息采样时也要尽可能准确地采样符号模块信息,以防出现的错误数量超过纠错容量,而无法进行纠错解码。为尽量避免采样网格各采样点受噪点干扰出现采样错误,可以使用窗口采样。在网格各采样点采样时建立一个采样窗口,如以采样点为中心的4邻域或8邻域等。因为所有像素都是二值的,对该邻域的像素进行统计,取数量多的值作为采样值。窗口采样可以有效避免噪声干扰,提高采样的准确率。3纠错与译码把网格采样出的信息组成信息矩阵,按照6个步骤进行纠错和译码。1)格式信息译码。按照QR码符号排列规则,取出水平方向上的15位格式信息,与0x5412进行按位异或(XOR)操作去除掩膜;用BCH译码算法对格式信息BCH(15,5)译码。如无法正确译码,则取出竖直方向上的15位格式信息进行同样操作。若2个方向上的格式信息都无法正确译码,则无法继续识读,系统退出;若可以正确译码,则可得到纠错等级和掩膜图形信息。2)版本信息译码。版本7~40的条码符号均含有版本信息。根据符号模块数量估算版本大小,如果版本在7~40之间,则进行版本信息的译码。按照QR码符号排列规则,取出右上角的18位版本信息,用BCH译码算法对版本信息BCH(18,6)译码。如果无法正确译码,则取出左下角的18位版本信息进行同样操作。若2个区域的版本信息均无法正确译码,则无法继续识读,系统退出;若可以正确译码,则可得到符号的版本。3)去除符号掩膜。用步骤1)得到的掩膜图形信息对符号进行异或(XOR)操作,去除掩膜。4)重组数据码字。按照QR码的码字排列规则,对采样矩阵中的信息重新组合,得到数据码字和纠错码字。5)纠错译码。用步骤1)、2)得到的版本和纠错等级信息,查表得到所使用的RS码类别,用迭代译码算法对该RS码译码[6]。若错误数量超出纠错容量,则无法继续识读,系统退出;若可以正确译码,则可得到正确的数据码字。6)数据译码。把数据码字按照编码规则生成信息位流,按照位流中的模式指示符和字符计数指示符把位流分段,每段分别按照所用模式的规则译码,得到原始编码数据。4实验结果本系统使用Android2.2系统,在摄像头分辨率为640×480的手机上进行测试。以分辨率为600DPI打印了160个1~40版本的QR码图像,每个版本在纠错等级为L、M、Q、H各打印1幅。在正常照明条件下,对160份QR码图像进行了识别,能够正确识读的图像有156幅,识读率为97.5%。5结束语以QR码为例研究了手机二维码的识读方法。经过对图像的投影校正、多阈值二值化等处理,可以有效解决手机拍摄条码时畸变、光线不均等问题。识读过程中,采用窗口采样的方法,可以有效抵御噪声干扰,提高识读的准确率。因为手机等设备的性能和摄像头采集图像的质量受限,本系统在进行大版本的QR码识别时速度较慢,有时会出现无法识读现象,这有待于进一步优化算法,提高识读速度。参考文献:[1]中国物品编码中心.GB/T18284-2000,快速响应矩阵码[S].北京:中国标准出版社,2001[2]黄宏博,肖峻岭,佟俐鹃.基于Reed—Solomon算法的QR码纠错编码[J].计算机工程,2003,29(1):93-95[3]刘悦,刘明业,尚振宏.快速响应矩阵码的多级阈值化方法[J].计算机应用研究,2006(6),177-179[4]孙明,傅隆生,杨信廷,等.用于QR码自动识读的图像分析方法[J].电子科技大学学报,2009,38(6):1017-1020