Выравнивающие маркеры (Alignment Pattern)
Небольшие квадраты 5×5 модулей с точкой в центре внутри QR-кода. Компенсируют перспективные искажения при сканировании под углом или с изогнутой поверхности. Появляются с версии 2.
Выравнивающие маркеры — служебные элементы QR-кода, которые помогают сканеру восстановить геометрию символа, когда он снят не строго перпендикулярно. Каждый маркер это квадрат 5×5 модулей: тёмная рамка, светлое кольцо внутри и один тёмный модуль в самом центре. Декодер находит эти опорные точки и распрямляет изображение, пересчитывая координаты каждого модуля сетки.
Зачем нужны выравнивающие маркеры
Три крупных квадрата по углам задают общую ориентацию кода, но их недостаточно, когда символ большой и снят под наклоном или лежит на изогнутой поверхности — бутылке, рукаве, мятой этикетке. Перспектива искажает сетку неравномерно: ближний край плотнее, дальний растянут. Выравнивающие маркеры расставлены по полю как реперные точки: декодер знает их эталонное положение и по смещению вычисляет искажение, возвращая модули на свои места. Без них крупные версии часто не читались бы под углом.
Как расположены по версиям
В версии 1 (21×21 модуль) выравнивающих маркеров нет вовсе — код маленький, трёх угловых искателей хватает. Начиная с версии 2 появляется один маркер, ближе к правому нижнему углу. Чем выше версия, тем маркеров больше: они выстраиваются в регулярную сетку на пересечениях расчётных линий. В старшей, 40-й версии (177×177 модулей) таких маркеров 46. Позиции стандартизованы в ISO/IEC 18004 — генератор берёт их из таблицы, а не рисует произвольно.
Чем отличаются от позиционных маркеров и синхрополос
Легко перепутать три типа служебных элементов, но роли у них разные. Позиционные маркеры (finder pattern) — три больших квадрата 7×7 модулей в углах; по ним камера мгновенно находит код и понимает его поворот. Синхрополосы (timing pattern) — чередующиеся тёмные и светлые модули линией между угловыми квадратами; они задают шаг сетки и номер каждой строки и столбца. Выравнивающие маркеры меньше (5×5), их может быть много, и отвечают они за тонкую коррекцию перспективы уже внутри поля. Посмотреть, как это выглядит на живом коде, можно в генераторе QR.