Что делает маскирование
После размещения битов данных и коррекции ошибок в некоторых областях могут оказаться длинные цепочки одного цвета или формы, похожие на поисковые узоры. Маскирование исправляет это: оно инвертирует модули везде, где выполняется простая формула, и тёмные и светлые модули распределяются равномернее.
Маска применяется только к области данных и коррекции ошибок. Поисковые, синхронизирующие и выравнивающие узоры, информация о формате и версии, а также тёмный модуль никогда не маскируются.
Восемь масок
Маски пронумерованы от 000 до 111. Каждая определяется условием для строки i и столбца j модуля; там, где условие выполняется, модуль инвертируется. Считыватель узнаёт номер маски из информации о формате и применяет ту же маску повторно, чтобы её снять.
- 000: (i + j) mod 2 = 0, шахматная доска
- 001: i mod 2 = 0, чередующиеся строки
- 010: j mod 3 = 0, каждый третий столбец
- 011: (i + j) mod 3 = 0, диагональные полосы
- 100–111: более сложные сочетания строк, столбцов и произведений
Как выбирается лучшая маска
Кодировщик пробует все восемь масок и оценивает каждый результат по четырём штрафным правилам. Используется маска с наименьшей суммой штрафов, благодаря чему готовый код камерам читать проще.
Некоторые генераторы пропускают полную оценку и используют фиксированную маску: код всё равно получается корректным, но сканируется, возможно, чуть хуже. В Micro QR применяется меньший набор из четырёх масок со своим правилом оценки.
- Правило 1: длинные цепочки одного цвета в строке или столбце
- Правило 2: блоки 2 × 2 одного цвета
- Правило 3: узоры, напоминающие соотношение поисковых узоров 1:1:3:1:1
- Правило 4: общий дисбаланс между тёмными и светлыми модулями