数据掩蔽

现在模块已放置在矩阵中,必须确定最佳掩码模式。掩码模式根据特定规则更改哪些模块是深色的,哪些模块是浅色的。此步骤的目的是修改二维码,使二维码阅读器尽可能容易地扫描。

术语:掩蔽

如果二维码中的模块被“掩蔽”,这只是意味着,如果是浅色模块,就应该改成深色模块,如果是深色模块,就应该改成浅色模块。换句话说,掩蔽只是意味着要切换模块的颜色。

掩码图案概述

QR 码规范定义了可应用于 QR 码的八种掩码模式。例如,对于掩码图案 #1,二维码矩阵中的每个偶数行都被屏蔽,对于掩码图案 #2,二维码矩阵中每隔三列被屏蔽。
二维码掩码图案解释
有关八种遮罩图案的更多详细信息,请参阅掩码图案页面。

遮盖什么

掩码图案只能应用于数据模块和纠错模块。换句话说:
  • 不要屏蔽功能图案(查找器图案、定位图案、分隔符、对齐图案)
  • 不屏蔽保留区域(格式信息区域、版本信息区域)

确定最佳掩码图案

将掩码图案应用于二维码矩阵后,将根据二维码规范中定义的四个评估条件为其提供惩罚分数。二维码编码器必须应用所有八种掩码图案并评估每种图案。无论哪种掩码图案导致最低的惩罚分数,都是必须用于最终输出的掩码模式。

如何评估保留区域

请注意,即使掩码仅适用于数据和纠错模块,也会评估整个矩阵(包括功能图案和保留区域)。

四条处罚规则

这四条处罚规则可以概括如下:
  • 第一条规则给QR码在一行(或一列)中的每一组5个或更多的同色模块带来惩罚。
  • 第二条规则对矩阵中每个2x2区域的同色模块给予QR码一个惩罚。
  • 第三条规则将对二维码内部出现看起来与查找器图案相似的图案的二维码一个很大的惩罚。
  • 第四条规则,如果超过一半的模块是深色或浅色,则给QR码一个惩罚,差异越大,惩罚越大。

评估条件 #1

对于第一个评估条件,逐行检查。如果有五个相同颜色的连续模块,则在惩罚中加 3。如果在前五个模块之后有更多相同颜色的模块,则为每个相同颜色的附加模块添加 1。然后,逐一检查每列,检查相同的条件。将水平和垂直总数相加以获得惩罚分数 #1。
下图说明了以这种方式评估二维码的过程。在此示例中,水平惩罚为 92,垂直惩罚为 88。因此,罚分 #1 是 92 + 88 = 180。
notion image
notion image

评估条件 #2

对于第二个评估条件,请查找至少为 2x2 或更大的模块的相同颜色的区域。二维码规范规定,对于大小为 m × n 的纯色块,惩罚分数为3 × (m - 1) × (n - 1)。但是,二维码规范没有指定当有多种划分纯色块的方法时如何计算罚分。
因此,与其寻找大于2x2的纯色块,不如在二维码中每一个相同颜色的2x2块的惩罚分数上加3,确保计算重叠的2x2块。例如,一个相同颜色的3x2块应算作两个2x2块,其中一个与另一个重叠。
下图说明了如何计算惩罚规则 #2。
notion image

评估条件 #3

第三条惩罚规则寻找暗-亮-暗-暗的图案,这些图案在两侧有四个亮模块。换句话说,它查找以下两种图案中的任何一种:
notion image
notion image
每次发现此图案时,在罚分上加 40。在下面的示例中,有两种这样的模式。因此,惩罚分数 #3 是 80。
notion image

评估条件 #4

最终评估条件基于亮模块与暗模块的比例。要计算此惩罚规则,请执行以下步骤:
  1. 计算矩阵中的模块总数。
  1. 计算矩阵中有多少个暗模块。
  1. 计算矩阵中暗模块的百分比:(暗模块/总模块)* 100
  1. 确定这个百分比的上一个和下一个5的倍数。例如,对于43%,5的上一个倍数是40,5的下一个倍数是45。
  1. 从这些5的倍数中各减去50,然后取其绝对值。例如,|40-50|=|-10|=10,|45-50|=|-5|=5。
  1. 将每个除以五。例如,10/5 = 2 , 5/5 = 1。
  1. 最后,取两个数字中最小的一个并将其乘以 10。在此示例中,较小的数字为 1,因此结果为 10。这是罚分#4。
对于另一个示例,在下图中,模块总数为 441,暗模块总数为 213。
notion image
暗模块的百分比为 (213 / 441) * 100 ≈ 48.2993
前一个5的倍数是45,下一个5的倍数是50。
减去 50 并取每个的绝对值:
|45 - 50| = |-5| = 5
|50 - 50| = 0
各除以 5:
5/5 = 1
0/5 = 0
这两个数字中最小的是 0。乘以 10,这仍然是 0。因此,在此示例中,惩罚分数 #4 为 0。

将四个罚分相加

要完成对二维码的评估,请添加四个惩罚分数。总数是二维码的总罚分。

选择八种掩码图案中最低的惩罚分数的图案

下图显示了八个二维码,每个掩码图案一个。此示例中的所有八个二维码都对相同的数据进行编码。如图所示,惩罚分数最低的掩码模式是掩码模式 0。因此,在此示例中,二维码编码器在输出最终 QR 码时应使用掩码图案 0。
notion image

下一篇: 添加格式和版本信息

添加数据和纠错模块时,格式和版本区域保留供以后使用。编码二维码的最后一步是将格式和版本信息添加到二维码中。