Позиционные маркеры (finder patterns)

Три крупных квадратных элемента в трёх углах QR-кода, по которым сканер определяет ориентацию, размер и границы символа независимо от угла обзора и искажений перспективы.

Позиционные маркеры (англ. finder patterns) — три идентичных квадратных структуры, расположенных в верхнем левом, верхнем правом и нижнем левом углах QR-кода. Нижний правый угол намеренно оставлен свободным: именно его отсутствие помогает сканеру мгновенно определить правильную ориентацию матрицы. Каждый маркер занимает площадь 7x7 модулей и имеет строго регламентированный паттерн слоёв: тёмная внешняя рамка (1 модуль), светлое разделительное кольцо (1 модуль) и тёмный центральный квадрат 3x3 модуля. Это создаёт соотношение тёмных и светлых полос 1:1:3:1:1 при сканировании по любой горизонтальной или вертикальной линии, пересекающей маркер.

Вокруг каждого позиционного маркера стандарт ISO/IEC 18004 предписывает светлую зону разделения шириной 1 модуль — она отделяет маркер от области данных и исключает ложные срабатывания. Размер 7x7 модулей одинаков для всех версий QR-кода от Version 1 (21x21) до Version 40 (177x177): маркеры не масштабируются вместе с матрицей, что позволяет поддерживать постоянное соотношение 1:1:3:1:1 вне зависимости от плотности данных.

Как работает поиск кода

При декодировании сканер просматривает захваченное изображение построчно в поисках последовательности тёмных и светлых участков в соотношении 1:1:3:1:1. Обнаружив такую последовательность по горизонтали, алгоритм проверяет то же соотношение по вертикали через найденную точку — если оба условия выполнены, зафиксирован центр одного маркера. После нахождения трёх таких центров программа вычисляет вектор между ними: угол между векторами верхний левый и верхний правый и верхний левый и нижний левый даёт угол поворота кода, разность длин — масштаб, а смещение из прямого угла — параметры перспективного искажения. На основе этих трёх точек строится проективное преобразование, которое выпрямляет матрицу в прямоугольник с известной сеткой модулей. Вся процедура занимает доли миллисекунды и стабильна при наклонах до 45 градусов и перспективных искажениях типичных для съёмки под углом.

Связанные элементы

  • Timing patterns — таймерные дорожки: чередующиеся тёмные и светлые модули, идущие горизонтально и вертикально между позиционными маркерами (строка 6 и столбец 6). Определяют шаг сетки модулей внутри матрицы.
  • Alignment pattern — маркер выравнивания: меньший квадрат 5x5 с паттерном 1:1:3:1:1, появляющийся начиная с Version 2 (одна штука) для коррекции искажений в крупных кодах. Version 40 содержит до 46 таких маркеров.
  • Quiet zone — тихая зона: незакодированное светлое поле шириной минимум 4 модуля по всему периметру кода. Без неё сканер не отделяет матрицу от фона и позиционные маркеры теряют опорную рамку.
  • Format information — информация о формате: два 15-битных блока данных, расположенных вплотную к позиционным маркерам (вокруг верхнего левого и вдоль двух оставшихся). Содержат уровень коррекции ошибок и номер маски — критически важны для любого декодирования.
  • Version information — информация о версии: два 18-битных блока рядом с верхним правым и нижним левым маркерами, присутствуют начиная с Version 7 и уточняют размерность матрицы.

Частые вопросы

Почему позиционный маркер только в трёх углах, а не в четырёх?

Размещение маркера лишь в трёх углах — намеренное решение стандарта ISO/IEC 18004. Если бы маркеры стояли во всех четырёх углах, квадратный QR-код выглядел бы симметрично при поворотах на 90, 180 и 270 градусов, и сканер не мог бы однозначно определить правильную ориентацию. Отсутствие маркера в нижнем правом углу делает символ асимметричным: три точки образуют угол, вершина которого всегда указывает на верхний левый угол в правильной ориентации. Это позволяет декодировать QR-код при любом из четырёх возможных поворотов за один проход без перебора вариантов. Вместо четвёртого маркера нижний правый угол отведён под маркеры выравнивания (alignment patterns) в старших версиях кода.

Можно ли закрыть или украсить позиционные маркеры в дизайнерском QR?

Частично — да, но с жёсткими ограничениями. Позиционные маркеры обязаны сохранять соотношение 1:1:3:1:1 и достаточный контраст (минимум 40% по яркости между тёмными и светлыми зонами). На практике дизайнеры часто заменяют стандартные квадратные маркеры на скруглённые, круглые или стилизованные под бренд — это допустимо, если форма сохраняет распознаваемое соотношение размеров. Полностью перекрывать маркеры логотипом нельзя: даже при уровне коррекции H (до 30% повреждений) сканер всё равно нуждается в трёх ориентирах для построения проективного преобразования. Подробнее о балансе дизайна и считываемости — в статье QR с логотипом.

Почему маркер именно 7x7 модулей, а не меньше?

Размер 7x7 выбран как минимально необходимый для надёжного распознавания паттерна 1:1:3:1:1 при всех допустимых искажениях. При размере 5x5 внешняя рамка и разделительное кольцо сливались бы, внутренний квадрат занимал бы всего 1x1 модуль — любое смазывание или дефект печати уничтожало бы центр маркера. Размер 7x7 даёт ширину каждой зоны не менее одного модуля при любой версии кода и обеспечивает устойчивость к дефектам печати до 50% модуля. Этот же размер сохраняется во всех версиях QR (от 21x21 до 177x177): в маленьких кодах Version 1 три маркера занимают около 28% площади матрицы, в крупных Version 40 — менее 2%. Для создания QR-кода с оптимальными настройками используйте генератор qrcode.website.