基于Android平台的二维条码算法研究与实现
2014-11-21智立甫
李 毅, 智立甫, 贾 明
(石家庄职业技术学院a.电气与电子工程系;b.艺术设计系,河北 石家庄 050081)
随着手持智能终端技术和移动互联技术的飞速发展,基于智能终端的各种应用研究层出不穷.Android平台条码识别技术是利用数字图像处理技术,将图像信息转换为数字信息,在智能终端上进行处理以实现自动识别条码信息的一种技术.本文将分析如何在Android平台上实现条码图像获取、条码定位、条码检测及译码.
1 二维条码识别的结构设计
二维条码识别是数字处理技术的典型应用,由图像捕捉、图像预处理、条码定位、条码检测、译码、信息输出组成,如图1所示.
图1 二维条码识别结构图
2 二维条码识别算法
2.1 图像预处理
Android平台获取的图像信息以彩色模式存在,在数字处理前要将色度信息和色彩饱和度信息去除并转换为256级的灰度图像.将彩色图像转化为灰度图像需要将RGB(红、绿、蓝)颜色模式的图像数据转换为Y,Cb,Cr颜色模式,其中,Y代表图像亮度,Cb代表色度,Cr代表饱和度.利用Gray(灰转换.将色度和饱和度信息分量去掉,得到Gray=0.299R+0.587G+0.114B,再将 R,G,B三个分量设置为相等即可得到灰度图.
为了条码定位和识别准确,需要对灰度图进行二值化处理,在灰度图中选取两个灰度等级T1和T2,并设定为灰度阈值.灰度等级在T1和T2之间的设定为1,其他设定为0.即 g(x,y)=这样就能得到只含有黑色和白色的二值图像,条码图像也就具有较清晰的边缘轮廓[1].
2.2 条码定位
条码图像经过预处理后,具有较为清晰的边界和条码特征.由于条码种类不同,因此,条码图像具有较大的外形差异.定位条码边界是识别条码的关键,具体算法为:第一步,将二值化图像信息读入二维数组ImageArray中,以数组的边界定位图形边界;第二步,创建一个存放条码图像的二维数组QRArray;第三步,采用逐点扫描的方式,扫描ImageArray数组,如果获取的ImageArray中元素为“1”,则在该点进行水平和垂直两次扫描,如果两个方向上的扫描结果中均有两个以上的“1”,则在QRArray中记录该点;否则不记录.重复该扫描方式至ImageArray的最后一个元素,即可得到一幅完整条码图像的映射数组QRArray.
2.3 条码检测
QR_code是目前最为常用的二维条码标准,条码图像是一个正方形矩阵,所包含的信息有定位点、分割区、数据区和纠错区.条码有三个定位点,分别分布于条码图像的左侧和右上角,显示特征为黑白条框[2].见图2.
图2 定位点位置
获取定位点的算法为:第一步,采用对QRArray逐点扫描的方式,利用定位点特殊的比例关系确定三个定位点的边界;第二步,将定位点以外的条码数据区信息根据字符放置位置转换为条码字符数组DataArray;第三步,将DataArray的信息逐点分解为一个字模,即5个数据位和10个纠错位,利用经典Chien搜索法得到纠错位坐标,数据位通过查表方式确定,即可得到条码信息.
3 基于Android平台实现二维条码识别
采用JavaSE技术实现基于桌面的条码识别系统,构建Android平台的条码识别流程,如图3所示.
在图像处理类中,由于Android的硬件资源有限,所以在灰度处理、均衡处理、边缘处理、二值化处理中,先将图像转换为Static类型的三维数组,之后围绕数组展开计算,在图像显示时将数组转换为Image类型.这样不仅能提高运算速度,而且能节约系统资源.条码定位算法先对ImageArray行逐点扫描,符合在水平向右方向上连续6个像素出现“1”,并且垂直向下方向连续6个像素为“1”,则定位为条码的起始坐标.条码的终止坐标算法与起始坐标算法类似.根据计算得到的坐标可以将图像进行切割,得到条码图像映射矩阵.该定位算法的优势在于,它能方便、快速地分割图像中的条码区域;缺点在于,如果条码定位不准确,将不能有效地识别信息,识别率反而降低.
图3 Android应用程序流程图
4 测试与分析
测试环境为:计算机模拟Android4.2.2平台,摄像头200万像素.测试中选择较好的光照条件对条码正面进行拍摄,对10幅二维条码进行测试,每幅照片的识别时间平均为5s,识别成功率为100%.同时,使用一幅没有条码的图像进行测试,由于程序的形态学处理会将整幅画面中所有的亮度腐蚀掉,因此,在图像中找不到任何字符可以识别,识别结果为空.
通过测试可知,系统程序可以对较好环境下拍摄的条码图像进行识别,虽然其在识别速度、正确率和抗干扰方面有待加强,但它仍然证明了使用Android作为信息采集和处理设备的可行性,为今后构建Android平台的信息采集与识别系统打下了基础.
5 结束语
利用Android平台,使用数字图像处理技术可有效识别二维条码,将图像信息转换为文本信息.该信息可以与现有的Android信息过滤软件融合,为安全、高效使用条码提供技术保障,同时也为今后以智能终端作为信息采集与处理平台的各种信息管理系统的建立积累经验.
[1]徐慧,王占全.精通VC++数字图像处理技术与工程案例[M].北京:人民邮电出版社,2009:23.
[2]中国物品编码中心.条码技术与应用 [M].北京:中国计量出版社,2003:145.