Alignment Pattern
Alignment Pattern — метки выравнивания в QR-кодах версий от 2 и выше, помогающие сканеру корректно декодировать код при искажениях и наклоне.
Определение Alignment Pattern
Alignment Pattern (метка выравнивания) — дополнительные квадратные структуры размером 5×5 модулей, встраиваемые в область данных QR-кода начиная с версии 2 (25×25 модулей) и старше. Метки выравнивания помогают сканеру корректно декодировать код в условиях геометрических искажений: перспективы (камера не перпендикулярна к коду), наклона, изгиба поверхности (QR на бутылке, рукаве одежды). Количество и позиции Alignment Pattern строго определены стандартом ISO/IEC 18004 и зависят от версии QR-кода.
В QR-коде версии 1 (21×21 модуль) метки выравнивания отсутствуют — код достаточно мал, чтобы Finder Pattern в углах обеспечили корректное декодирование. Начиная с версии 2 добавляется одна Alignment Pattern в правом нижнем углу. В версии 40 (177×177) их уже 46 штук, распределённых равномерно по сетке кода. Каждая метка имеет структуру «квадрат в квадрате»: внешний чёрный 5×5, внутренний белый 3×3, центральный чёрный 1×1 модуль.
Как работает Alignment Pattern
При сканировании QR-кода камерой смартфона почти всегда возникают геометрические искажения: перспектива (дальние стороны кода выглядят меньше), наклон, лёгкий изгиб бумаги или экрана. Finder Pattern в трёх углах дают базовую геометрию, но по ним можно восстановить только линейную трансформацию. Для нелинейных искажений нужны дополнительные опорные точки — и это как раз Alignment Pattern.
Декодер находит центры Alignment Pattern, измеряет их фактическое положение в кадре и сравнивает с ожидаемыми позициями по стандарту. По разнице вычисляется функция геометрической коррекции, которая применяется к модулям данных. Это позволяет правильно считать код, даже если он искажён перспективой или размещён на неплоской поверхности — например, на этикетке бутылки, которую сканируют с угла.
Количество Alignment Pattern по версиям
| Версия QR | Размер матрицы | Количество Alignment Pattern |
|---|---|---|
| 1 | 21×21 | 0 |
| 2 | 25×25 | 1 |
| 6 | 41×41 | 1 |
| 7 | 45×45 | 6 |
| 14 | 73×73 | 13 |
| 25 | 117×117 | 22 |
| 40 | 177×177 | 46 |
Позиции меток по стандарту
Позиции центров Alignment Pattern определены таблицей в Приложении E стандарта ISO/IEC 18004. Для версии 2 это одна метка с центром в модуле (18, 18). Для версии 7 — шесть меток в позициях (6, 22), (22, 6), (22, 22), (6, 38), (22, 38), (38, 38). Алгоритм размещения сделан так, чтобы метки не пересекались с Finder Pattern в углах и равномерно покрывали область данных.
Метки выравнивания размещаются поверх модулей данных, то есть «выбивают» из них 25 модулей (5×5) на каждую метку. Это снижает ёмкость QR-кода, поэтому в версии 40 из 31329 модулей около 1150 уходит на служебные метки, что составляет 3,7%. Компенсируется это ростом общего размера матрицы и повышением надёжности декодирования.
Структура метки
- Внешний чёрный квадрат: 5×5 модулей
- Внутренняя белая рамка: 3×3 модулей
- Центральный чёрный модуль: 1×1 модуль
Важно: Alignment Pattern меньше Finder Pattern и не имеет сепаратора — она встраивается прямо в поле данных. При этом соотношение ширин при пересечении 1:1:1:1:1 (в отличие от Finder Pattern с 1:1:3:1:1), что позволяет алгоритму отличить типы меток друг от друга.
Связанные концепции
- Finder Pattern — поисковые метки в углах кода.
- Timing Pattern — временная дорожка калибровки.
- Версия QR — размер матрицы, от которого зависит количество меток.
Частые вопросы
Зачем нужны Alignment Pattern в QR-коде?
Alignment Pattern компенсируют геометрические искажения при сканировании: перспективу (когда камера не перпендикулярна к коду), наклон, изгибы поверхности. Finder Pattern в углах дают базовую геометрию, но для нелинейных искажений нужны дополнительные опорные точки внутри области данных. Именно поэтому Alignment Pattern появляются начиная с версии 2, когда QR становится достаточно большим, чтобы перспективные ошибки стали заметны и могли привести к ошибкам декодирования без дополнительной калибровки.
Почему в QR версии 1 нет Alignment Pattern?
QR-код версии 1 имеет размер 21×21 модуль и достаточно мал, чтобы Finder Pattern в трёх углах обеспечивали корректное декодирование даже при умеренных перспективных искажениях. Для такого компактного кода погрешность определения модулей не превышает приемлемого уровня. Добавление метки выравнивания «съело» бы 25 модулей из 441 (5,7%), существенно сократив полезную ёмкость без значимого выигрыша в надёжности. Поэтому стандарт ISO/IEC 18004 начинает включать Alignment Pattern только с версии 2.
Сколько Alignment Pattern в QR версии 40?
QR-код максимальной версии 40 (177×177 модулей) содержит 46 меток выравнивания, распределённых равномерно по сетке 7×7 (с учётом пересечений с Finder Pattern в трёх углах). Это обеспечивает плотную калибровку для декодирования кода, который физически может иметь размер 15×15 см или больше и подвергаться значительным геометрическим искажениям. Общая площадь, занимаемая Alignment Pattern в версии 40, составляет около 1150 модулей — всего 3,7% от общей площади кода.
Можно ли разместить логотип на Alignment Pattern?
Крайне не рекомендуется. Alignment Pattern критичны для декодирования больших QR-кодов — их повреждение приводит к ошибкам геометрической коррекции и невозможности корректно считать модули данных. Если нужно встроить логотип, размещайте его в центре кода, где нет Alignment Pattern, и выбирайте уровень коррекции Q или H. Современные генераторы автоматически подбирают позицию логотипа, избегая Finder и Alignment Pattern. При ручной разметке следите, чтобы логотип не перекрывал эти служебные области.
Чем Alignment Pattern отличается от Finder Pattern?
Finder Pattern — три крупные метки 7×7 модулей в углах QR-кода с соотношением ширин 1:1:3:1:1, используемые для первичного обнаружения кода и определения его ориентации. Alignment Pattern — меньшие метки 5×5 модулей с соотношением 1:1:1:1:1, встроенные в область данных начиная с версии 2 для компенсации перспективных искажений. Finder Pattern обязательны всегда, Alignment Pattern появляются с ростом размера кода. Finder Pattern имеют сепаратор, Alignment Pattern — нет.