首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

QR 二维码掩码(六)

既然所有码元(除了预留区域)都已经被布置到二维码矩阵中了,接下来我们要选出最合适的掩码。这里掩码指根据特定规则将二维码区域内码元的值改变的一种策略。采用掩码的目的是调整 QR 二维码内码元展示,方便 QR 读码器尽可能更容易地读取信息(例如避免二维码内大面积空白或黑块,影响扫码识别)。

术语:掩码

如果二维码内某个码元被掩码处理了,简单来说如果它之前是白色码元,那么它现在应该变成黑色码元了。换句话说,掩码最简单就是将码元值改掉。

掩码模式概览

QR 二维码规范定义了八种可以应用在 QR 二维码中的掩码。例如模式 #1,所有二维码中所有偶数行会被掩码处理;又比如模式 #2,二维码矩阵中每过三列被掩码处理一次。

各掩码模式如下:

掩码范围

掩码只会对数据码元和纠错码元进行处理,换句话说:不要对功能模块的码元进行掩码处理(包括定位模块、时间模块、隔离模块和校准模块);也不要对预留区域进行掩码处理(包括预留格式信息区域和预留版本信息区域)。

决定最合适的掩码

对 QR 二维码矩阵应用某种掩码后,会根据 QR 二维码规范制定的四条规则对掩码后的码得出一个损失分数。每个 QR 二维码必须应用八种掩码并且每种都得到评分。损失分数最低的掩码模式将会是最终采用的掩码模式。

评分区域

注意,尽管掩码只对数据和纠错码码元进行处理,评分时会对整个二维码区域进行评分,包括功能模块和预留区域。

四条损失分数规则

四条评分规则总结如下:

  1. 当某行或列出现连续五个或以上同色码元时,增加损失分
  2. 当 2x2 同色码元出现时,增加损失分
  3. 当与定位模块相似的模式出现时,增加损失分
  4. 如果整个 QR 二维码超过一半码元是黑或白时,增加损失分,差异越大分数越高

规则 1:

检查每一行,如果有 5 个相连的码元同色,损失分加 3,如果 5 个相连之后还有同色,之后每多一个损失分加 1。同理,检查每一列。最终将水平方向和竖直方向规则 1 下损失分相加。

下图展示了水平方向和竖直方向规则 1 下的损失分分别为 88 和 92 共计 180分:

规则 2:

寻找包含至少 2x2 同色码元的区域,QR 二维码规范规定对于 mxn 同色码元区域,损失分将增加 3x(m-1)(n-1)。然而 QR 二维码规范并没有说明这种同色码元区域可以再以多种方式划分小块时如何积分。

因此,与其去寻找大于 2x2 的码元区,我们直接找 2x2 的同色区域,每发现一个 就给损失分加 3,彼此相互覆盖的 2x2 区域也算。例如一个 3x2 的区域可以拆分乘 两个 2x2 的区域,那么要为损失分总共加 6。

下图展示了规则 2 下损失分情况:

规则 3:

寻找类似 黑-白-黑-黑-黑-白-黑 外加侧边连着四个白码元的模式,即下图中所示的码元模式:

每当在同一行或列发现类似的模式,损失分加 40,如下图中有两个类似模式,损失分加 80:

规则 4:

本规则基于白色码元和黑色码元的比例。首先计算二维码矩阵中所有码元数,然后数一下黑色码元有多少,计算黑色码元所占比例。找到该比例临近的两个 5 的整倍数,例如 43 %,43 相邻的两个 5 的整倍数是 40 和 45。取这两个 5 的整倍数与 50 的差值的绝对值。40 和 50 是 10, 45 和 50 是 5。将两个差值绝对值除以 5,取其中较小的值乘以 10,用损失分增加该乘法结果。10 / 5 = 2, 5 / 5 =1,取 1 ,1 x 10 = 10,损失分增加 10。

图中是另一个例子:

总共 441 个码元,黑色码元有 213 个,占比约 48%,临近的 5 的整倍数是 45 和 50,与 50 差值分别是 5 和 0。取小的除以 5 再乘以 10 得到 0。所以规则 4 下 损失分 为 0。

将四种规则下损失分相加

四种规则下的损失分相加,得到 QR 二维码在该掩码下的损失分。

选择损失分最低的掩码模式

下图将展示 8 中掩码模式下得到的 8 个 QR 二维码,这 8 中二维码掩码之前都是同一份数据编码。

如图所示,掩码模式 0 所得到的损失分最低,因此该 QR 二维码应该采用掩码模式 0 进行掩码。

代码语言:javascript
复制
本文翻译自
https://www.thonky.com/qr-code-tutorial/introduction
举报
领券