2.2 二维码的编码与识别
二维码(2-dimensional bar code)是用某种特定的几何图形按一定规律在平面(二维方向上)分布的黑白相间的图形记录数据符号信息的。在许多种类的二维条码中,常用的码制有:Data Matrix、Maxi Code、Aztec、QR Code、Vericode、PDF417、Ultracode、Code 49、Code 16K等。本节将以最常用的QR码为例,介绍二维码的编码与识别原理。
2.2.1 解密:二维码的编码
QR码(Quick-Response code)是被广泛使用的一种二维码,解码速度非常快。如图2-3所示为一个QR码的基本编码结构,其中包含以下内容。
图2-3 QR码的基本编码结构
(1) 位置探测图形、位置探测图形分隔符、定位图形。用于对二维码的定位,对每个QR码来说,位置都是固定存在的,只是大小规格会有所差异。
(2) 校正图形。二维码的规格确定后,校正图形的数量和位置也就确定了。
(3) 格式信息。表示二维码的纠错级别,分为L、M、Q、H四个级别。
(4) 版本信息。即二维码的规格,QR码符号共有40种规格的矩阵(一般为黑白色),从21×21(版本1)到177×177(版本40),每一版本符号比前一版本的每一个边都增加4个模块。
(5) 数据和纠错码字。实际保存的二维码信息和纠错码字(用于修正二维码损坏带来的错误)。
简要的编码过程包括:数据分析、数据编码、纠错编码、构造矩阵、掩模、生成格式和版本信息。
2.2.2 解密:二维码的识别
通过图像的采集设备(智能手机、激光扫描器、面阵CCD、数码相机等成像设备),得到含有条码的图像,此后主要经过条码定位(预处理、定位、角度纠正和特征值提取)、分割和解码3个步骤实现二维码的识别。
下面以QR码为例,介绍二维码的识别过程。
图2-4 QR码的定位图形
(1) 定位条码:找到条码符号的图像区域,对有明显条码特征的区域进行定位,然后根据不同条码的定位图形结构特征对条码符号进行下一步的处理。图2-4所示为QR码的定位图形。
(2) 分割条码:经过边缘检测后,由于条码区域的边界不是很完整,所以需要进一步修正边界,然后分割出一个完整的条码区域。
(3) 纠错译码:通过定位与分割操作,得到一幅标准的条码图像后,对该符号进行网格采样,对网格每一个交点上的图像像素取样,并根据阈值确定是深色块还是浅色块。然后构造一个位图,用二进制的1表示深色像素,0表示浅色像素,从而得到条码的原始二进制序列值,然后对这些数据进行纠错和译码,最后根据条码的逻辑编码规则把这些原始的数据位流转换成数据码字,即将码字图像符号换成ASCII码字符串。